69
1 La gestion des dépendances dans un projet PHP Forum PHP 2012

Gestion des dépendances dans un projet PHP - Forum PHP 2012

Embed Size (px)

DESCRIPTION

Que ce soit un framework, des modules ou des libraires spécialisées, la plupart des application web modernes utilisent du code tiers. Ce code a son propre cycle de développement. Il faut donc pouvoir intégrer régulièrement les nouvelles versions sans pour autant perdre la maîtrise de son propre cycle. La tâche n'est pas aisée si elle n'a pas été été prévue dès la conception de l'application. Nous verrons différentes approches pour gérer les dépendances dont les gestionnaires de paquet du système d'exploitation, les liens externes dans les dépôts de code, les fichiers PHAR, l'installateur PEAR et le tout récent Composer.

Citation preview

Page 1: Gestion des dépendances dans un projet PHP - Forum PHP 2012

1

La gestion des dépendancesdans un projet PHP

Forum PHP 2012

Page 2: Gestion des dépendances dans un projet PHP - Forum PHP 2012

Passionné de web depuis 1996, de PHP depuis 2000 et de musique depuis 1977

Jean-Marc Fontaine

‣ Consultant PHP chez Alter Way‣ Ex-Président de l’AFUP‣ Co-Auteur du livre blanc

«Industrialisation PHP»‣ Auteur du blog

industrialisation-php.com

2

Page 3: Gestion des dépendances dans un projet PHP - Forum PHP 2012

3

La gestion des dépendancesdans un projet PHP

Page 4: Gestion des dépendances dans un projet PHP - Forum PHP 2012

4

Gestion manuelle

Page 5: Gestion des dépendances dans un projet PHP - Forum PHP 2012

5

Copie manuelle des dépendancesSimple à mettre en œuvre

Page 6: Gestion des dépendances dans un projet PHP - Forum PHP 2012

6

Garantit la disponibilitéPas de risque de voir disparaître la dépendance

Page 7: Gestion des dépendances dans un projet PHP - Forum PHP 2012

7

Impact sur le dépôt de codeTaille plus importante, sauvegardes plus longues

Page 8: Gestion des dépendances dans un projet PHP - Forum PHP 2012

8

Mises à jour parfois difficilesSubversion avant la version 1.7 complique la mise à jour

Page 9: Gestion des dépendances dans un projet PHP - Forum PHP 2012

9

Page 10: Gestion des dépendances dans un projet PHP - Forum PHP 2012

10

Paquets du système d’exploitation

Page 11: Gestion des dépendances dans un projet PHP - Forum PHP 2012

11

Lié au système d’exploitation«deb» pour la famille Debian,«rpm» pour famille Red Hat

Page 12: Gestion des dépendances dans un projet PHP - Forum PHP 2012

12

Simple à utiliserDebian : apt-get install phpmyadminRed Hat : yum install phpmyadmin

Page 13: Gestion des dépendances dans un projet PHP - Forum PHP 2012

13

Partagé par tout le systèmeUne seule version installée à la fois

Page 14: Gestion des dépendances dans un projet PHP - Forum PHP 2012

14

Peu de paquets PHP disponiblesSeules les librairies les plus connues sont disponibles

Page 15: Gestion des dépendances dans un projet PHP - Forum PHP 2012

Comparaison de versionsVersions souvent anciennes

15

Officiel Debian 6

CakePHP

Doctrine

phpMyAdmin

PHPUnit

2.1.13 1.3.2 (10/11)

2.2.2 1.2.2 (01/09)

3.5.1 3.3.7 (09/10)

3.6.11 3.4.14 (06/10)

Page 16: Gestion des dépendances dans un projet PHP - Forum PHP 2012

16

Possibilité de créer ses propres paquetsPas infaisable mais pas trivial

Page 17: Gestion des dépendances dans un projet PHP - Forum PHP 2012

17

Dépôt de code

Page 18: Gestion des dépendances dans un projet PHP - Forum PHP 2012

18

svn:externals avec SubversionSimple à mettre en œuvre mais réservé aux répertoires

Page 19: Gestion des dépendances dans un projet PHP - Forum PHP 2012

19

Page 20: Gestion des dépendances dans un projet PHP - Forum PHP 2012

20

Sous-modules GitUn peu ardu à mettre en œuvre

Page 21: Gestion des dépendances dans un projet PHP - Forum PHP 2012

21

Page 22: Gestion des dépendances dans un projet PHP - Forum PHP 2012

22

Page 23: Gestion des dépendances dans un projet PHP - Forum PHP 2012

23

Archives PHAR** Attention : un jeu de mot hasardeux s’est glissé dans cette vignette. Sauras-tu le retrouver ?

Page 24: Gestion des dépendances dans un projet PHP - Forum PHP 2012

24

Simplicité d’emploiCopier l’archive suffit à installer ou mettre à jour

Page 25: Gestion des dépendances dans un projet PHP - Forum PHP 2012

25

Simplicité de déploiementUn seul fichier à gérer. Possibilité de le compresser.

Page 26: Gestion des dépendances dans un projet PHP - Forum PHP 2012

26

Projet completImpossible de ne prendre qu’une partie d’un projet

Page 27: Gestion des dépendances dans un projet PHP - Forum PHP 2012

27

Peu de projet distribués sous ce formatatoum, Composer, Clinner, Goutte, Hoa, PHP Coding Standard Fixer, Symfttpd, etc.

Page 28: Gestion des dépendances dans un projet PHP - Forum PHP 2012

28

La configuration par défaut de PHP pose parfois des problèmes

Page 29: Gestion des dépendances dans un projet PHP - Forum PHP 2012

29

PEAR

Page 30: Gestion des dépendances dans un projet PHP - Forum PHP 2012

30

EprouvéLe projet existe depuis plus de 10 ans

Page 31: Gestion des dépendances dans un projet PHP - Forum PHP 2012

31

Qualité inégaleMalgré les règles pour assurer une qualité homogène, le bon côtoie le très (très) moyen

Page 32: Gestion des dépendances dans un projet PHP - Forum PHP 2012

32

Peu attractifPeu de librairies majeures choisissent d’être disponibles dans PEAR

Page 33: Gestion des dépendances dans un projet PHP - Forum PHP 2012

33

VieillissantDe plus en plus de paquets ne sont plus maintenus

Page 34: Gestion des dépendances dans un projet PHP - Forum PHP 2012

34

Un installeur indépendant et bien vivantOn peut diffuser ses librairies via un canal PEAR personnalisé

Page 35: Gestion des dépendances dans un projet PHP - Forum PHP 2012

35

Page 36: Gestion des dépendances dans un projet PHP - Forum PHP 2012

36

Création d’un paquet assez simple

Page 37: Gestion des dépendances dans un projet PHP - Forum PHP 2012

package.xml

37

<?xml version="1.0" encoding="UTF-8"?><package packagerversion="1.4.10" version="2.0" xmlns="http://pear.php.net/dtd/package-2.0"…> <name>PHPUnit</name> <channel>pear.phpunit.de</channel> <summary>The PHP Unit Testing framework.</summary> <description>The PHP Unit Testing framework.</description> <lead> <name>Sebastian Bergmann</name> <user>sb</user> <email>[email protected]</email> <active>yes</active> </lead> <date>2012-05-31</date> <version> <release>3.6.11</release> <api>3.6.0</api> </version> <stability> <release>stable</release> <api>stable</api> </stability>

Page 38: Gestion des dépendances dans un projet PHP - Forum PHP 2012

38

Génération semi-automatiquePEAR_PackageFileManager2 peut générer le fichier package.xml

Page 39: Gestion des dépendances dans un projet PHP - Forum PHP 2012

39

Création d’un canal personnalisé facile avec Pirum

Page 40: Gestion des dépendances dans un projet PHP - Forum PHP 2012

40

Composer

Page 41: Gestion des dépendances dans un projet PHP - Forum PHP 2012

41

Projet récent et très actifInitié en avril 2011, environ 1 900 commits

Page 42: Gestion des dépendances dans un projet PHP - Forum PHP 2012

42

Composer, Packagist & SatisTrois outils complémentaires

Page 43: Gestion des dépendances dans un projet PHP - Forum PHP 2012

43

ComposerUn gestionnaire de paquets en ligne de commande

Page 44: Gestion des dépendances dans un projet PHP - Forum PHP 2012

44

Installation simplecurl -s http://getcomposer.org/installer | php

Page 45: Gestion des dépendances dans un projet PHP - Forum PHP 2012

45

Simplicité d’utilisationphp composer.phar install

Page 46: Gestion des dépendances dans un projet PHP - Forum PHP 2012

46

Dépendances par projetPas d’effet de bord

Page 47: Gestion des dépendances dans un projet PHP - Forum PHP 2012

47

vendor/    autoload.php    composer/    symfony/        browser-kit/        class-loader/        css-selector/        dom-crawler/        event-dispatcher/        finder/        http-foundation/        http-kernel/        routing/    twig/        twig/

Page 48: Gestion des dépendances dans un projet PHP - Forum PHP 2012

48

Simplicité de diffusion

Page 49: Gestion des dépendances dans un projet PHP - Forum PHP 2012

composer.json

49

{ "name": "Soko", "description": "Light continuous integration tool", "license": "BSD-3-Clause", "authors": [ { "name": "Jean-Marc Fontaine", "email": "[email protected]", "homepage": "http://jmfontaine.net/" } ], "require": { "php": ">=5.3.0", "symfony/console": "2.0.*", "symfony/finder": "2.0.*", "symfony/process": "2.0.*", "symfony/yaml": "2.0.*" }, "autoload": { "psr-0": { "Soko": "src/" } }}

Page 50: Gestion des dépendances dans un projet PHP - Forum PHP 2012

composer.json

50

{ "name": "Soko", "description": "Light continuous integration tool", "license": "BSD-3-Clause", "authors": [ { "name": "Jean-Marc Fontaine", "email": "[email protected]", "homepage": "http://jmfontaine.net/" } ], "require": { "php": ">=5.3.0", "symfony/console": "2.0.*", "symfony/finder": "2.0.*", "symfony/process": "2.0.*", "symfony/yaml": "2.0.*" }, "autoload": { "psr-0": { "Soko": "src/" } }}

Page 51: Gestion des dépendances dans un projet PHP - Forum PHP 2012

composer.json

51

{ "name": "Soko", "description": "Light continuous integration tool", "license": "BSD-3-Clause", "authors": [ { "name": "Jean-Marc Fontaine", "email": "[email protected]", "homepage": "http://jmfontaine.net/" } ], "require": { "php": ">=5.3.0", "symfony/console": "2.0.*", "symfony/finder": "2.0.*", "symfony/process": "2.0.*", "symfony/yaml": "2.0.*" }, "autoload": { "psr-0": { "Soko": "src/" } }}

Page 52: Gestion des dépendances dans un projet PHP - Forum PHP 2012

composer.json

52

{ "name": "Soko", "description": "Light continuous integration tool", "license": "BSD-3-Clause", "authors": [ { "name": "Jean-Marc Fontaine", "email": "[email protected]", "homepage": "http://jmfontaine.net/" } ], "require": { "php": ">=5.3.0", "symfony/console": "2.0.*", "symfony/finder": "2.0.*", "symfony/process": "2.0.*", "symfony/yaml": "2.0.*" }, "autoload": { "psr-0": { "Soko": "src/" } }}

Page 53: Gestion des dépendances dans un projet PHP - Forum PHP 2012

53

Possibilité de lancer des actions après l’installation des dépendancesVidage de cache, création de fichiers, etc.

Page 54: Gestion des dépendances dans un projet PHP - Forum PHP 2012

54

Chargement automatiqueCompatible PSR-0

Page 55: Gestion des dépendances dans un projet PHP - Forum PHP 2012

Chargement automatique

55

"autoload": { "psr-0": { "Vendor\\Namespace": "lib/" }, "classmap": ["src/", "classMap.php"]},"include-path": ["src/", ""]

require __DIR__ . '/vendor/autoload.php';

Page 56: Gestion des dépendances dans un projet PHP - Forum PHP 2012

Chargement automatique

56

"autoload": { "psr-0": { "Vendor\\Namespace": "lib/" }, "classmap": ["src/", "classMap.php"]},"include-path": ["src/", ""]

require __DIR__ . '/vendor/autoload.php';

Page 57: Gestion des dépendances dans un projet PHP - Forum PHP 2012

57

Création d’un projet à partir d’un modèlephp composer.phar create-project jmfontaine/application mon-projet

Page 58: Gestion des dépendances dans un projet PHP - Forum PHP 2012

58

PackagistUn annuaire de paquets bien fourni

Page 59: Gestion des dépendances dans un projet PHP - Forum PHP 2012

59

Page 60: Gestion des dépendances dans un projet PHP - Forum PHP 2012

Quelques chiffresPackagist

60

0

1000

2000

3000

4000

09/2011 10/2011 11/2011 12/2011 01/2012 02/2012 03/2012 04/2012 05/2012

625 658 752 8601 154

1 423

1 791

2 375

3 863

7 48 140 207352 484

7011 015

1 472

Source: http://packagist.org/statistics

PaquetsVersions

Page 61: Gestion des dépendances dans un projet PHP - Forum PHP 2012

61

Une adoption croissanteDe plus en plus de librairies en vue l’utilise

Page 62: Gestion des dépendances dans un projet PHP - Forum PHP 2012

62

Des sources variéesVCS (Subversion, Git, Mercurial), archives

Page 63: Gestion des dépendances dans un projet PHP - Forum PHP 2012

63

SatisUn Packagist léger pour vos paquets privés

Page 64: Gestion des dépendances dans un projet PHP - Forum PHP 2012

64

{ "name": "Jean-Marc Fontaine packages", "homepage": "http://satis.jmfontaine.net/", "repositories": [ { "type": "git", "url": "ssh://git.jmfontaine.net/srv/git/repositories/aviso.git" }, { "type": "git", "url": "ssh://git.jmfontaine.net/srv/git/repositories/soko.git" }, { "type": "git", "url": "ssh://git.jmfontaine.net/srv/git/repositories/modele-application.git" }, ], "require-all": true}

Page 65: Gestion des dépendances dans un projet PHP - Forum PHP 2012

65

{ "name": "Soko", "description": "Light continuous integration tool", "license": "BSD-3-Clause", "authors": [ { "name": "Jean-Marc Fontaine", "email": "[email protected]", "homepage": "http://jmfontaine.net/" } ], "require": { "php": ">=5.3.0", "symfony/console": "2.0.*", "symfony/finder": "2.0.*", "symfony/process": "2.0.*", "symfony/yaml": "2.0.*", "jmfontaine/aviso": "0.1.0" }, "autoload": { "psr-0": { "Soko": "src/" } }}

Page 66: Gestion des dépendances dans un projet PHP - Forum PHP 2012

66

Création d’un projet à partir d’un modèle hébergé avec Satisphp composer.phar create-project jmfontaine/modele-application mon-projet --repository-url=http://satis.jmfontaine.net

Page 67: Gestion des dépendances dans un projet PHP - Forum PHP 2012

67

Version stable en vueAlpha 3 disponible, beta en juin,version stablepour la fin de l’été

Page 68: Gestion des dépendances dans un projet PHP - Forum PHP 2012

68

Merci !

‣ Commentaires et slides : https://joind.in/6458‣ Blog : http://www.industrialisation-php.com/‣ Twitter : @jmfontaine / @indusphp‣ Email : [email protected]

Page 69: Gestion des dépendances dans un projet PHP - Forum PHP 2012

Les photos et illustrations suivantes ont été utilisées dans cette présentation. Merci à leurs auteurs !

69

Crédits photographiques

‣ https://secure.flickr.com/photos/cglosli/3296946161/

‣ http://www.vivelesrondes.com/oarystis/22836/

‣ https://secure.flickr.com/photos/library_of_congress/2163511028/

‣ https://secure.flickr.com/photos/halfbisqued/2353845688/

‣ https://secure.flickr.com/photos/advertisingelyse/3709966085/

‣ https://secure.flickr.com/photos/olibac/1823957148/

‣ https://secure.flickr.com/photos/reebob/3868826366/

‣ https://secure.flickr.com/photos/12287146@N04/4931171160/