gestion des dépendances dans un projet php - rmll 2012

Post on 26-Dec-2014

1.126 Views

Category:

Technology

6 Downloads

Preview:

Click to see full reader

DESCRIPTION

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.

TRANSCRIPT

1

La gestion des dépendancesdans 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

3

La gestion des dépendancesdans un projet PHP

4

Gestion manuelle

5

Copie manuelle des dépendancesSimple à mettre en œuvre

6

Garantit la disponibilitéPas de risque de voir disparaître la dépendance

7

Impact sur le dépôt de codeTaille plus importante, sauvegardes plus longues

8

Mises à jour parfois difficilesSubversion avant la version 1.7 complique la mise à jour

9

10

Paquets du système d’exploitation

11

Lié au système d’exploitation«.deb» pour la famille Debian,«.rpm» pour famille Red Hat

12

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

13

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

14

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

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)

16

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

17

Dépôt de code

18

svn:externals avec SubversionSimple à mettre en œuvre mais réservé aux répertoires

19

20

Sous-modules GitUn peu ardu à mettre en œuvre

21

22

23

Archives PHAR** Attention : un jeu de mot hasardeux s’est glissé dans cette vignette. Sauras-tu le retrouver ?

24

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

25

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

26

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

27

Peu de projets distribués sous ce formatatoum, Composer, Clinner, Goutte, Hoa, PHP Coding Standard Fixer, Symfttpd, etc.

28

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

29

PEAR

30

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

31

Qualité inégaleMalgré les règles pour assurer une qualité homogène, le bon côtoie le très (très) moyen

32

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

33

VieillissantDe plus en plus de paquets ne sont plus maintenus

34

Un installeur indépendant et bien vivantOn peut diffuser ses librairies via un canal PEAR personnalisé

35

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

36

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

37

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

38

Composer

39

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

40

Composer & PackagistDeux outils complémentaires

41

ComposerUn gestionnaire de paquets en ligne de commande

42

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

43

Simplicité d’utilisationphp composer.phar install

44

Dépendances par projetPas d’effet de bord

45

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

46

Simplicité de diffusion

composer.json

47

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

composer.json

48

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

composer.json

49

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

composer.json

50

{ "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

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

52

Chargement automatiqueCompatible PSR-0

Chargement automatique

53

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

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

Chargement automatique

54

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

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

55

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

56

PackagistUn annuaire de paquets bien fourni

57

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

59

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

60

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

61

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

62

Merci !

‣ Slides : http://www.slideshare.net/JMF‣ Blog : http://www.industrialisation-php.com/‣ Twitter : @jmfontaine / @indusphp‣ Email : jean-marc.fontaine@alterway.fr

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