Successfully reported this slideshow.
Your SlideShare is downloading. ×

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

Ad
Ad
Ad
Ad
Ad
Ad
Ad
Ad
Ad
Ad
Ad
Loading in …3
×

Check these out next

1 of 69 Ad

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

Download to read offline

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.

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.

Advertisement
Advertisement

More Related Content

Slideshows for you (20)

Viewers also liked (20)

Advertisement

Similar to Gestion des dépendances dans un projet PHP - Forum PHP 2012 (20)

More from Jean-Marc Fontaine (17)

Advertisement

Recently uploaded (20)

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 Fontaine Passionné de web depuis 1996, de PHP depuis 2000 et de musique 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épendances Simple à 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 code Taille plus importante, sauvegardes plus longues 7
  8. 8. Mises à jour parfois difficiles Subversion 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 à utiliser Debian : apt-get install phpmyadmin Red Hat : yum install phpmyadmin 12
  13. 13. Partagé par tout le système Une seule version installée à la fois 13
  14. 14. Peu de paquets PHP disponibles Seules les librairies les plus connues sont disponibles 14
  15. 15. Versions souvent anciennes Comparaison 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 paquets Pas infaisable mais pas trivial 16
  17. 17. Dépôt de code 17
  18. 18. svn:externals avec Subversion Simple à mettre en œuvre mais réservé aux répertoires 18
  19. 19. 19
  20. 20. Sous-modules Git Un 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’emploi Copier l’archive suffit à installer ou mettre à jour 24
  25. 25. Simplicité de déploiement Un seul fichier à gérer. Possibilité de le compresser. 25
  26. 26. Projet complet Impossible de ne prendre qu’une partie d’un projet 26
  27. 27. Peu de projet distribués sous ce format atoum, Composer, Clinner, Goutte, Hoa, PHP Coding Standard Fixer, Symfttpd, etc. 27
  28. 28. La configuration par défaut de PHP pose parfois des problèmes 28
  29. 29. PEAR 29
  30. 30. Eprouvé Le projet existe depuis plus de 10 ans 30
  31. 31. Qualité inégale Malgré les règles pour assurer une qualité homogène, le bon côtoie le très (très) moyen 31
  32. 32. Peu attractif Peu de librairies majeures choisissent d’être disponibles dans PEAR 32
  33. 33. Vieillissant De plus en plus de paquets ne sont plus maintenus 33
  34. 34. Un installeur indépendant et bien vivant On peut diffuser ses librairies via un canal PEAR personnalisé 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-automatique PEAR_PackageFileManager2 peut générer le fichier package.xml 38
  39. 39. Création d’un canal personnalisé facile avec Pirum 39
  40. 40. Composer 40
  41. 41. Projet récent et très actif Initié en avril 2011, environ 1 900 commits 41
  42. 42. Composer, Packagist & Satis Trois outils complémentaires 42
  43. 43. Composer Un gestionnaire de paquets en ligne de commande 43
  44. 44. Installation simple curl -s http://getcomposer.org/installer | php 44
  45. 45. Simplicité d’utilisation php composer.phar install 45
  46. 46. Dépendances par projet Pas 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ès l’installation des dépendances Vidage de cache, création de fichiers, etc. 53
  54. 54. Chargement automatique Compatible 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èle php composer.phar create-project jmfontaine/ application mon-projet 57
  58. 58. Packagist Un annuaire de paquets bien fourni 58
  59. 59. 59
  60. 60. Packagist Quelques chiffres Paquets Versions 4000 3 863 3000 2 375 2000 1 791 1 423 1 472 1 154 1 015 1000 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/2012 Source: http://packagist.org/statistics 60
  61. 61. Une adoption croissante De plus en plus de librairies en vue l’utilise 61
  62. 62. Des sources variées VCS (Subversion, Git, Mercurial), archives 62
  63. 63. Satis Un 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èle hébergé avec Satis php composer.phar create-project jmfontaine/ modele-application mon-projet --repository- url=http://satis.jmfontaine.net 66
  67. 67. Version stable en vue Alpha 3 disponible, beta en juin,version stable pour 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 photographiques Les photos et illustrations suivantes ont été utilisées dans cette pré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

×