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

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

1

La gestion des dépendancesdans un projet PHP

Forum PHP 2012

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

3

La gestion des dépendancesdans un projet PHP

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

4

Gestion manuelle

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

5

Copie manuelle des dépendancesSimple à mettre en œuvre

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

9

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

10

Paquets du système d’exploitation

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

12

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

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

13

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

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

14

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

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

16

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

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

17

Dépôt de code

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

19

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

20

Sous-modules GitUn peu ardu à mettre en œuvre

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

21

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

22

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

24

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

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

25

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

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

26

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

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

27

Peu de projet 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 - Forum PHP 2012

28

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

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

29

PEAR

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

30

EprouvéLe projet existe depuis plus de 10 ans

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

32

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

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

33

VieillissantDe plus en plus de paquets ne sont plus maintenus

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

35

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

36

Création d’un paquet assez simple

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

package.xml

37

<?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>[email protected]</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> <api>stable</api> </stability>

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

38

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

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

39

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

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

40

Composer

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

41

Projet récent et très actifInitié en avril 2011, environ 1 900 commits

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

42

Composer, Packagist & SatisTrois outils complémentaires

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

43

ComposerUn gestionnaire de paquets en ligne de commande

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

44

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

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

45

Simplicité d’utilisationphp composer.phar install

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

46

Dépendances par projetPas d’effet de bord

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

47

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

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

48

Simplicité de diffusion

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

composer.json

51

{ "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 52: Gestion des dépendances dans un projet PHP - Forum PHP 2012

composer.json

52

{ "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 53: Gestion des dépendances dans un projet PHP - Forum PHP 2012

53

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

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

54

Chargement automatiqueCompatible PSR-0

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

Chargement automatique

55

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

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

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

Chargement automatique

56

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

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

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

57

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

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

58

PackagistUn annuaire de paquets bien fourni

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

59

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

Quelques chiffresPackagist

60

0

1000

2000

3000

4000

09/2011 10/2011 11/2011 12/2011 01/2012 02/2012 03/2012 04/2012 05/2012

625 658 752 8601 154

1 423

1 791

2 375

3 863

7 48 140 207352 484

7011 015

1 472

Source: http://packagist.org/statistics

PaquetsVersions

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

61

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

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

62

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

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

63

SatisUn Packagist léger pour vos paquets privés

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

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}

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

65

{ "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.*", "jmfontaine/aviso": "0.1.0" }, "autoload": { "psr-0": { "Soko": "src/" } }}

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

66

Création d’un projet à partir d’un modèle hébergé avec Satisphp composer.phar create-project jmfontaine/modele-application mon-projet --repository-url=http://satis.jmfontaine.net

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

67

Version stable en vueAlpha 3 disponible, beta en juin,version stablepour la fin de l’été

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

68

Merci !

‣ Commentaires et slides : https://joind.in/6458‣ Blog : http://www.industrialisation-php.com/‣ Twitter : @jmfontaine / @indusphp‣ Email : [email protected]

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

Les photos et illustrations suivantes ont été utilisées dans cette présentation. Merci à leurs auteurs !

69

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/