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

1

La gestion des dépendancesdans un projet PHP

RMLL 2012

Page 2: Gestion des dépendances dans 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

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

3

La gestion des dépendancesdans un projet PHP

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

4

Gestion manuelle

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

5

Copie manuelle des dépendancesSimple à mettre en œuvre

Page 6: Gestion des dépendances dans un projet PHP - RMLL 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 - RMLL 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 - RMLL 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 - RMLL 2012

9

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

10

Paquets du système d’exploitation

Page 11: Gestion des dépendances dans un projet PHP - RMLL 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 - RMLL 2012

12

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

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

13

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

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

14

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

Page 15: Gestion des dépendances dans un projet PHP - RMLL 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 - RMLL 2012

16

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

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

17

Dépôt de code

Page 18: Gestion des dépendances dans un projet PHP - RMLL 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 - RMLL 2012

19

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

20

Sous-modules GitUn peu ardu à mettre en œuvre

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

21

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

22

Page 23: Gestion des dépendances dans un projet PHP - RMLL 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 - RMLL 2012

24

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

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

25

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

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

26

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

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

27

Peu de projets 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 - RMLL 2012

28

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

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

29

PEAR

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

30

EprouvéLe projet existe depuis une douzaine d’années

Page 31: Gestion des dépendances dans un projet PHP - RMLL 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 - RMLL 2012

32

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

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

33

VieillissantDe plus en plus de paquets ne sont plus maintenus

Page 34: Gestion des dépendances dans un projet PHP - RMLL 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 - RMLL 2012

35

Création d’un paquet assez simpleFichier XML de description, verbeux mais simple

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

36

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

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

37

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

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

38

Composer

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

39

Projet récent et très actifInitié en avril 2011, plus de 2 000 commits

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

40

Composer & PackagistDeux outils complémentaires

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

41

ComposerUn gestionnaire de paquets en ligne de commande

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

42

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

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

43

Simplicité d’utilisationphp composer.phar install

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

44

Dépendances par projetPas d’effet de bord

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

45

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

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

46

Simplicité de diffusion

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

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/" } }}

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

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/" } }}

Page 49: Gestion des dépendances dans un projet PHP - RMLL 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 - RMLL 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 - RMLL 2012

51

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

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

52

Chargement automatiqueCompatible PSR-0

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

Chargement automatique

53

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

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

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

Chargement automatique

54

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

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

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

55

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

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

56

PackagistUn annuaire de paquets bien fourni

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

57

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

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

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

59

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

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

60

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

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

61

Version stable en vueAlpha 4 disponible, version stablepour la fin de l’été

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

62

Merci !

‣ Slides : http://www.slideshare.net/JMF‣ Blog : http://www.industrialisation-php.com/‣ Twitter : @jmfontaine / @indusphp‣ Email : [email protected]

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

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/


Top Related