Gestion des dépendances dans un projet PHP - Forum PHP 2012
Upcoming SlideShare
Loading in...5
×
 

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

on

  • 3,568 vues

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 ...

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.

Statistiques

Vues

Total des vues
3,568
Vues sur SlideShare
3,568
Vues externes
0

Actions

J'aime
3
Téléchargements
40
Commentaires
0

0 Ajouts 0

No embeds

Accessibilité

Catégories

Détails de l'import

Uploaded via as Adobe PDF

Droits d'utilisation

© Tous droits réservés

Report content

Signalé comme inapproprié Signaler comme inapproprié
Signaler comme inapproprié

Indiquez la raison pour laquelle vous avez signalé cette présentation comme n'étant pas appropriée.

Annuler
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Votre message apparaîtra ici
    Processing...
Poster un commentaire
Modifier votre commentaire

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

  • 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 Way ‣ Ex-Président de l’AFUP ‣ Co-Auteur du livre blanc «Industrialisation PHP» ‣ Auteur du blog industrialisation-php.com 2
  • 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 7
  • Mises à jour parfois difficilesSubversion avant la version 1.7 complique la mise àjour 8
  • 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 14
  • 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
  • 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 18
  • 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 ? 23
  • Simplicité d’emploiCopier l’archive suffit à installer ou mettre à jour 24
  • Simplicité de déploiementUn seul fichier à gérer. Possibilité de le compresser. 25
  • 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. 27
  • 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 31
  • Peu attractifPeu de librairies majeures choisissent d’êtredisponibles dans PEAR 32
  • 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é 34
  • 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.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
  • Génération semi-automatiquePEAR_PackageFileManager2 peut générer le fichierpackage.xml 38
  • 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-crawler/        event-dispatcher/        finder/        http-foundation/        http-kernel/        routing/    twig/        twig/ 47
  • Simplicité de diffusion 48
  • 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
  • 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
  • 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
  • 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
  • Possibilité de lancer des actions aprèsl’installation des dépendancesVidage de cache, création de fichiers, etc. 53
  • Chargement automatiqueCompatible PSR-0 54
  • Chargement automatique "autoload": { "psr-0": { "VendorNamespace": "lib/" }, "classmap": ["src/", "classMap.php"] }, "include-path": ["src/", ""] require __DIR__ . /vendor/autoload.php; 55
  • Chargement automatique "autoload": { "psr-0": { "VendorNamespace": "lib/" }, "classmap": ["src/", "classMap.php"] }, "include-path": ["src/", ""] require __DIR__ . /vendor/autoload.php; 56
  • Création d’un projet à partir d’un modèlephp composer.phar create-project jmfontaine/application mon-projet 57
  • PackagistUn annuaire de paquets bien fourni 58
  • 59
  • 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
  • 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": [ { "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
  • { "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
  • 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
  • Version stable en vueAlpha 3 disponible, beta en juin,version stablepour la fin de l’été 67
  • Merci ! ‣ Commentaires et slides : https://joind.in/6458 ‣ Blog : http://www.industrialisation-php.com/ ‣ Twitter : @jmfontaine / @indusphp ‣ Email : jean-marc.fontaine@alterway.fr 68
  • 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