La gestion des dépendances         dans un projet PHP                Forum PHP 2012                     1
Jean-Marc FontainePassionné de web depuis 1996, de PHP depuis 2000 et demusique depuis 1977  ‣ Consultant PHP chez Alter W...
La gestion des dépendances    dans un projet PHP                             3
Gestion manuelle                   4
Copie manuelle des dépendancesSimple à mettre en œuvre                                 5
Garantit la disponibilitéPas de risque de voir disparaître la dépendance                                                  6
Impact sur le dépôt de codeTaille plus importante, sauvegardes plus longues                                               ...
Mises à jour parfois difficilesSubversion avant la version 1.7 complique la mise àjour                                     ...
9
Paquets du système d’exploitation                                    10
Lié au système d’exploitation«deb» pour la famille Debian,«rpm» pour famille Red Hat                                11
Simple à utiliserDebian : apt-get install phpmyadminRed Hat : yum install phpmyadmin                                      12
Partagé par tout le systèmeUne seule version installée à la fois                                        13
Peu de paquets PHP disponiblesSeules les librairies les plus connues sont disponibles                                     ...
Versions souvent anciennesComparaison de versions                          Officiel     Debian 6    CakePHP               2...
Possibilité de créer ses propres paquetsPas infaisable mais pas trivial                                           16
Dépôt de code                17
svn:externals avec SubversionSimple à mettre en œuvre mais réservé auxrépertoires                                         ...
19
Sous-modules GitUn peu ardu à mettre en œuvre                                20
21
22
Archives PHAR** Attention : un jeu de mot hasardeux s’est glissé dans cette vignette. Sauras-tu le retrouver ?            ...
Simplicité d’emploiCopier l’archive suffit à installer ou mettre à jour                                                    ...
Simplicité de déploiementUn seul fichier à gérer. Possibilité de le compresser.                                            ...
Projet completImpossible de ne prendre qu’une partie d’un projet                                                     26
Peu de projet distribués sous ce formatatoum, Composer, Clinner, Goutte, Hoa, PHPCoding Standard Fixer, Symfttpd, etc.    ...
La configuration par défaut de PHP poseparfois des problèmes                                         28
PEAR       29
EprouvéLe projet existe depuis plus de 10 ans                                         30
Qualité inégaleMalgré les règles pour assurer une qualitéhomogène, le bon côtoie le très (très) moyen                     ...
Peu attractifPeu de librairies majeures choisissent d’êtredisponibles dans PEAR                                           ...
VieillissantDe plus en plus de paquets ne sont plus maintenus                                                    33
Un installeur indépendant et bien vivantOn peut diffuser ses librairies via un canal PEARpersonnalisé                     ...
35
Création d’un paquet assez simple                                    36
package.xml <?xml version="1.0" encoding="UTF-8"?> <package packagerversion="1.4.10" version="2.0"    xmlns="http://pear.p...
Génération semi-automatiquePEAR_PackageFileManager2 peut générer le fichierpackage.xml                                     ...
Création d’un canal personnalisé facileavec Pirum                                          39
Composer           40
Projet récent et très actifInitié en avril 2011, environ 1 900 commits                                              41
Composer, Packagist & SatisTrois outils complémentaires                               42
ComposerUn gestionnaire de paquets en ligne de commande                                                  43
Installation simplecurl -s http://getcomposer.org/installer | php                                                 44
Simplicité d’utilisationphp composer.phar install                            45
Dépendances par projetPas d’effet de bord                         46
vendor/    autoload.php    composer/    symfony/        browser-kit/        class-loader/        css-selector/        dom-...
Simplicité de diffusion                          48
composer.json   {       "name": "Soko",       "description": "Light continuous integration tool",       "license": "BSD-3-...
composer.json   {       "name": "Soko",       "description": "Light continuous integration tool",       "license": "BSD-3-...
composer.json   {       "name": "Soko",       "description": "Light continuous integration tool",       "license": "BSD-3-...
composer.json   {       "name": "Soko",       "description": "Light continuous integration tool",       "license": "BSD-3-...
Possibilité de lancer des actions aprèsl’installation des dépendancesVidage de cache, création de fichiers, etc.           ...
Chargement automatiqueCompatible PSR-0                         54
Chargement automatique "autoload": {     "psr-0": {         "VendorNamespace": "lib/"     },     "classmap": ["src/", "cla...
Chargement automatique "autoload": {     "psr-0": {         "VendorNamespace": "lib/"     },     "classmap": ["src/", "cla...
Création d’un projet à partir d’un modèlephp composer.phar create-project jmfontaine/application mon-projet               ...
PackagistUn annuaire de paquets bien fourni                                     58
59
Packagist  Quelques chiffres                                                                                      Paquets ...
Une adoption croissanteDe plus en plus de librairies en vue l’utilise                                                 61
Des sources variéesVCS (Subversion, Git, Mercurial), archives                                             62
SatisUn Packagist léger pour vos paquets privés                                             63
{    "name": "Jean-Marc Fontaine packages",    "homepage": "http://satis.jmfontaine.net/",    "repositories": [        { "...
{    "name": "Soko",    "description": "Light continuous integration tool",    "license": "BSD-3-Clause",    "authors": [ ...
Création d’un projet à partir d’un modèlehébergé avec Satisphp composer.phar create-project jmfontaine/modele-application ...
Version stable en vueAlpha 3 disponible, beta en juin,version stablepour la fin de l’été                                   ...
Merci ! ‣ Commentaires et slides : https://joind.in/6458 ‣ Blog : http://www.industrialisation-php.com/ ‣ Twitter : @jmfon...
Crédits photographiquesLes photos et illustrations suivantes ont été utilisées dans cetteprésentation. Merci à leurs auteu...
Upcoming SlideShare
Loading in...5
×

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

5,144

Published on

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.

Published in: Technology
0 Comments
3 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
5,144
On Slideshare
0
From Embeds
0
Number of Embeds
3
Actions
Shares
0
Downloads
51
Comments
0
Likes
3
Embeds 0
No embeds

No notes for slide

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

  1. 1. La gestion des dépendances dans un projet PHP Forum PHP 2012 1
  2. 2. Jean-Marc FontainePassionné de web depuis 1996, de PHP depuis 2000 et demusique depuis 1977 ‣ 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. 3. La gestion des dépendances dans un projet PHP 3
  4. 4. Gestion manuelle 4
  5. 5. Copie manuelle des dépendancesSimple à mettre en œuvre 5
  6. 6. Garantit la disponibilitéPas de risque de voir disparaître la dépendance 6
  7. 7. Impact sur le dépôt de codeTaille plus importante, sauvegardes plus longues 7
  8. 8. Mises à jour parfois difficilesSubversion avant la version 1.7 complique la mise àjour 8
  9. 9. 9
  10. 10. Paquets du système d’exploitation 10
  11. 11. Lié au système d’exploitation«deb» pour la famille Debian,«rpm» pour famille Red Hat 11
  12. 12. Simple à utiliserDebian : apt-get install phpmyadminRed Hat : yum install phpmyadmin 12
  13. 13. Partagé par tout le systèmeUne seule version installée à la fois 13
  14. 14. Peu de paquets PHP disponiblesSeules les librairies les plus connues sont disponibles 14
  15. 15. Versions souvent anciennesComparaison de versions Officiel Debian 6 CakePHP 2.1.13 1.3.2 (10/11) Doctrine 2.2.2 1.2.2 (01/09) phpMyAdmin 3.5.1 3.3.7 (09/10) PHPUnit 3.6.11 3.4.14 (06/10) 15
  16. 16. Possibilité de créer ses propres paquetsPas infaisable mais pas trivial 16
  17. 17. Dépôt de code 17
  18. 18. svn:externals avec SubversionSimple à mettre en œuvre mais réservé auxrépertoires 18
  19. 19. 19
  20. 20. Sous-modules GitUn peu ardu à mettre en œuvre 20
  21. 21. 21
  22. 22. 22
  23. 23. Archives PHAR** Attention : un jeu de mot hasardeux s’est glissé dans cette vignette. Sauras-tu le retrouver ? 23
  24. 24. Simplicité d’emploiCopier l’archive suffit à installer ou mettre à jour 24
  25. 25. Simplicité de déploiementUn seul fichier à gérer. Possibilité de le compresser. 25
  26. 26. Projet completImpossible de ne prendre qu’une partie d’un projet 26
  27. 27. Peu de projet distribués sous ce formatatoum, Composer, Clinner, Goutte, Hoa, PHPCoding Standard Fixer, Symfttpd, etc. 27
  28. 28. La configuration par défaut de PHP poseparfois des problèmes 28
  29. 29. PEAR 29
  30. 30. EprouvéLe projet existe depuis plus de 10 ans 30
  31. 31. Qualité inégaleMalgré les règles pour assurer une qualitéhomogène, le bon côtoie le très (très) moyen 31
  32. 32. Peu attractifPeu de librairies majeures choisissent d’êtredisponibles dans PEAR 32
  33. 33. VieillissantDe plus en plus de paquets ne sont plus maintenus 33
  34. 34. Un installeur indépendant et bien vivantOn peut diffuser ses librairies via un canal PEARpersonnalisé 34
  35. 35. 35
  36. 36. Création d’un paquet assez simple 36
  37. 37. package.xml <?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>sebastian@phpunit.de</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> 37
  38. 38. Génération semi-automatiquePEAR_PackageFileManager2 peut générer le fichierpackage.xml 38
  39. 39. Création d’un canal personnalisé facileavec Pirum 39
  40. 40. Composer 40
  41. 41. Projet récent et très actifInitié en avril 2011, environ 1 900 commits 41
  42. 42. Composer, Packagist & SatisTrois outils complémentaires 42
  43. 43. ComposerUn gestionnaire de paquets en ligne de commande 43
  44. 44. Installation simplecurl -s http://getcomposer.org/installer | php 44
  45. 45. Simplicité d’utilisationphp composer.phar install 45
  46. 46. Dépendances par projetPas d’effet de bord 46
  47. 47. vendor/    autoload.php    composer/    symfony/        browser-kit/        class-loader/        css-selector/        dom-crawler/        event-dispatcher/        finder/        http-foundation/        http-kernel/        routing/    twig/        twig/ 47
  48. 48. Simplicité de diffusion 48
  49. 49. composer.json { "name": "Soko", "description": "Light continuous integration tool", "license": "BSD-3-Clause", "authors": [ { "name": "Jean-Marc Fontaine", "email": "jm@jmfontaine.net", "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/" } } } 49
  50. 50. composer.json { "name": "Soko", "description": "Light continuous integration tool", "license": "BSD-3-Clause", "authors": [ { "name": "Jean-Marc Fontaine", "email": "jm@jmfontaine.net", "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/" } } } 50
  51. 51. composer.json { "name": "Soko", "description": "Light continuous integration tool", "license": "BSD-3-Clause", "authors": [ { "name": "Jean-Marc Fontaine", "email": "jm@jmfontaine.net", "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
  52. 52. composer.json { "name": "Soko", "description": "Light continuous integration tool", "license": "BSD-3-Clause", "authors": [ { "name": "Jean-Marc Fontaine", "email": "jm@jmfontaine.net", "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/" } } } 52
  53. 53. Possibilité de lancer des actions aprèsl’installation des dépendancesVidage de cache, création de fichiers, etc. 53
  54. 54. Chargement automatiqueCompatible PSR-0 54
  55. 55. Chargement automatique "autoload": { "psr-0": { "VendorNamespace": "lib/" }, "classmap": ["src/", "classMap.php"] }, "include-path": ["src/", ""] require __DIR__ . /vendor/autoload.php; 55
  56. 56. Chargement automatique "autoload": { "psr-0": { "VendorNamespace": "lib/" }, "classmap": ["src/", "classMap.php"] }, "include-path": ["src/", ""] require __DIR__ . /vendor/autoload.php; 56
  57. 57. Création d’un projet à partir d’un modèlephp composer.phar create-project jmfontaine/application mon-projet 57
  58. 58. PackagistUn annuaire de paquets bien fourni 58
  59. 59. 59
  60. 60. Packagist Quelques chiffres Paquets Versions4000 3 8633000 2 3752000 1 791 1 423 1 472 1 154 1 0151000 860 752 701 625 658 484 352 140 207 7 48 0 09/2011 10/2011 11/2011 12/2011 01/2012 02/2012 03/2012 04/2012 05/2012Source: http://packagist.org/statistics 60
  61. 61. Une adoption croissanteDe plus en plus de librairies en vue l’utilise 61
  62. 62. Des sources variéesVCS (Subversion, Git, Mercurial), archives 62
  63. 63. SatisUn Packagist léger pour vos paquets privés 63
  64. 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} 64
  65. 65. { "name": "Soko", "description": "Light continuous integration tool", "license": "BSD-3-Clause", "authors": [ { "name": "Jean-Marc Fontaine", "email": "jm@jmfontaine.net", "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/" } }} 65
  66. 66. Création d’un projet à partir d’un modèlehébergé avec Satisphp composer.phar create-project jmfontaine/modele-application mon-projet --repository-url=http://satis.jmfontaine.net 66
  67. 67. Version stable en vueAlpha 3 disponible, beta en juin,version stablepour la fin de l’été 67
  68. 68. Merci ! ‣ Commentaires et slides : https://joind.in/6458 ‣ Blog : http://www.industrialisation-php.com/ ‣ Twitter : @jmfontaine / @indusphp ‣ Email : jean-marc.fontaine@alterway.fr 68
  69. 69. Crédits photographiquesLes photos et illustrations suivantes ont été utilisées dans cetteprésentation. Merci à leurs auteurs ! ‣ 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/ 69
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×