gestion des dépendances dans un projet php - rmll 2012
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.TRANSCRIPT
1
La gestion des dépendancesdans un projet PHP
RMLL 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
3
La gestion des dépendancesdans un projet PHP
4
Gestion manuelle
5
Copie manuelle des dépendancesSimple à mettre en œuvre
6
Garantit la disponibilitéPas de risque de voir disparaître la dépendance
7
Impact sur le dépôt de codeTaille plus importante, sauvegardes plus longues
8
Mises à jour parfois difficilesSubversion avant la version 1.7 complique la mise à jour
9
10
Paquets du système d’exploitation
11
Lié au système d’exploitation«.deb» pour la famille Debian,«.rpm» pour famille Red Hat
12
Simple à utiliserDebian : apt-get install phpmyadminRed Hat : yum install phpmyadmin
13
Partagé par tout le systèmeUne seule version installée à la fois
14
Peu de paquets PHP disponiblesSeules les librairies les plus connues sont disponibles
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)
16
Possibilité de créer ses propres paquetsPas infaisable mais pas trivial
17
Dépôt de code
18
svn:externals avec SubversionSimple à mettre en œuvre mais réservé aux répertoires
19
20
Sous-modules GitUn peu ardu à mettre en œuvre
21
22
23
Archives PHAR** Attention : un jeu de mot hasardeux s’est glissé dans cette vignette. Sauras-tu le retrouver ?
24
Simplicité d’emploiCopier l’archive suffit à installer ou mettre à jour
25
Simplicité de déploiementUn seul fichier à gérer. Possibilité de le compresser.
26
Projet completImpossible de ne prendre qu’une partie d’un projet
27
Peu de projets distribués sous ce formatatoum, Composer, Clinner, Goutte, Hoa, PHP Coding Standard Fixer, Symfttpd, etc.
28
La configuration par défaut de PHP pose parfois des problèmes
29
PEAR
30
EprouvéLe projet existe depuis une douzaine d’années
31
Qualité inégaleMalgré les règles pour assurer une qualité homogène, le bon côtoie le très (très) moyen
32
Peu attractifPeu de librairies majeures choisissent d’être disponibles dans PEAR
33
VieillissantDe plus en plus de paquets ne sont plus maintenus
34
Un installeur indépendant et bien vivantOn peut diffuser ses librairies via un canal PEAR personnalisé
35
Création d’un paquet assez simpleFichier XML de description, verbeux mais simple
36
Génération semi-automatiquePEAR_PackageFileManager2 peut générer le fichier package.xml
37
Création d’un canal personnalisé facile avec Pirum
38
Composer
39
Projet récent et très actifInitié en avril 2011, plus de 2 000 commits
40
Composer & PackagistDeux outils complémentaires
41
ComposerUn gestionnaire de paquets en ligne de commande
42
Installation simplecurl -s http://getcomposer.org/installer | php
43
Simplicité d’utilisationphp composer.phar install
44
Dépendances par projetPas d’effet de bord
45
vendor/ autoload.php composer/ symfony/ browser-kit/ class-loader/ css-selector/ dom-crawler/ event-dispatcher/ finder/ http-foundation/ http-kernel/ routing/ twig/ twig/
46
Simplicité de diffusion
composer.json
47
{ "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/" } }}
composer.json
48
{ "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/" } }}
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/" } }}
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/" } }}
51
Possibilité de lancer des actions après l’installation des dépendancesVidage de cache, création de fichiers, etc.
52
Chargement automatiqueCompatible PSR-0
Chargement automatique
53
"autoload": { "psr-0": { "Vendor\\Namespace": "lib/" }, "classmap": ["src/", "classMap.php"]},"include-path": ["src/", ""]
require __DIR__ . '/vendor/autoload.php';
Chargement automatique
54
"autoload": { "psr-0": { "Vendor\\Namespace": "lib/" }, "classmap": ["src/", "classMap.php"]},"include-path": ["src/", ""]
require __DIR__ . '/vendor/autoload.php';
55
Création d’un projet à partir d’un modèlephp composer.phar create-project jmfontaine/application mon-projet
56
PackagistUn annuaire de paquets bien fourni
57
Quelques chiffresPackagist
58
0
1250
2500
3750
5000
09/11 10/11 11/11 12/11 01/12 02/12 03/12 04/12 05/12 06/12
626 664 758 8681 177
1 4421 791
2 314
3 345
4 875
7 48 139 204 347 478694
1 006
1 451
1 896
Source: http://packagist.org/statistics
PaquetsVersions
59
Une adoption croissanteDe plus en plus de librairies en vue l’utilise
60
Des sources variéesVCS (Subversion, Git, Mercurial), archives
61
Version stable en vueAlpha 4 disponible, version stablepour la fin de l’été
62
Merci !
‣ Slides : http://www.slideshare.net/JMF‣ Blog : http://www.industrialisation-php.com/‣ Twitter : @jmfontaine / @indusphp‣ Email : [email protected]
Les photos et illustrations suivantes ont été utilisées dans cette présentation. Merci à leurs auteurs !
63
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/