Outils clés et bonnes pratiques de développement en Drupal 8

1 Avril 2019
1
Les outils en ligne de commande, appelés CLI (Command Line Interface), sont devenus des outils incontournables pour la communauté de développeurs Drupal. Découvrons-en quelques-uns ensemble !

Si, avec Drupal 7, Drush a été l’outil principal duquel tout développeur ne pouvait se passer, Drupal 8 s’est imposé avec une palette d’outils encore plus magiques et performants que ce dernier. Ceci est dû à la grande mutation qu’a connue Drupal entre la version 7, qui caractérisait le système de gestion de contenu comme un simple CMS (Content Management System), et la version 8. Drupal 8 est effectivement considéré comme un CMF (Content Management Framework) de par l’ensemble des composants et outils indépendants qu’il intègre. On souligne notamment dans la version 8 l’intégration de la programmation orientée objet, l’utilisation de composants Symfony, du moteur de templating Twig…

De plus, de nouveaux outils importants facilitent la vie de la communauté, et ont été intégrés dans les projets Drupal 8. Des outils supplémentaires comme Composer ou Drupal Console mais également un outil de versionning tel que Git sont désormais indispensables dans le workflow de développement des projets ainsi que pour le travail collaboratif.

La nouvelle multiplicité d’outils dans Drupal 8 implique non seulement de bien tous les connaître, mais aussi de distinguer leurs usages dans les phases de développement des projets Drupal. Que fait chaque outil ? Quand faut-il les utiliser ? Quelles sont les bonnes pratiques à mettre en place ? En effet, on peut facilement confondre leurs usages, en les employant pour des fonctions auxquelles ils ne sont pas destinés.

Drush

Drush (Drupal Shell) est un outil en ligne de commande qui permet d’administrer un site Drupal. Il est utilisé depuis la version 7 de Drupal. La gestion des configurations est une nouveauté de Drupal 8 essentielle et Drush propose des commandes pour sa gestion. Il reste indispensable sur les tâches d’administration comme :

Activer un module :

$ drush en <module_name>

Vider les caches :

$ drush cr

 

Sachant que Drupal 8 est essentiellement basé sur un système de gestion de la configuration (CMI), Drush est également utilisé pour importer ou exporter de la configuration entre plusieurs environnements ou serveurs (local, stage, preprod, prod) :

Pour importer de la configuration :

$ drush cim

Pour exporter de la configuration :

$ drush cex

 

Composer

Composer est un outil de gestion de dépendances en PHP. Il a été adopté avec Drupal 8, mais n’est pas spécifique à ce CMF. Il peut en effet être utilisé dans d’autres projets PHP. Il permet de télécharger et installer un projet Drupal, implémenter des modules contrib, des thèmes, des librairies externes, appliquer des patchs… Un fichier composer.json sera généré et contiendra toutes les librairies nécessaires au projet. Une fois que les librairies seront installées, Composer créera un fichier composer.lock qui contiendra la liste des librairies et leurs versions actuellement installées.

Composer peut être utilisé dans tous les environnements de développement (local, stage, preprod).

Pour installer un projet Drupal avec Composer il suffit de lancer la commande :

$ composer create-project drupal-composer/drupal-project:8.x-dev my_site_name_dir --no-interaction

 

Pour installer un module ou un thème avec Composer :

$ composer require drupal/<modulename>

$ composer require 'drupal/<modulename>:<version>'

 

Pour mettre à jour un module ou un package :

$ composer update

 

Il est recommandé d’utiliser Composer pour gérer Drupal, les modules et les thèmes. En effet, il permet une utilisation de librairies et de solutions externes plus complète que Drush. Composer constitue un outil central de gestion de dépendances. D’ailleurs, pour installer Drush, on utilise Composer avec la commande :

$ composer global require drush/drush

 

Drupal Console

Drupal Console est un CLI Drupal qui permet de générer un squelette de code et interagir avec une instance ou une application Drupal 8. C’est un outil qui a été intégré à Drupal 8 à l’image de la console Symfony pour respecter les bonnes pratiques de la communauté PHP et simplifier la vie des développeurs.

Il s’installe à partir de Composer :

$ composer require drupal/console:~1.0 \

--prefer-dist \

--optimize-autoloader

 

Il contient une centaine de commandes que l’on peut afficher en lançant :

$ drupal list

 

On peut par exemple générer un module avec la commande :

$ drupal generate:module

 

Et ensuite se laisser guider en remplissant les champs proposés comme suit :

drupal generate:module 

 

 // Bienvenue sur le générateur de modules Drupal

 

 Entrez le nom du nouveau module:

 > Mon Module

 Entrez le nom de la machine du module [mon_module]:

 >

 Entrez le chemin du module [/modules/custom]:

 >

 Entrez la description du module [My Awesome Module]:

 > Mon super module de test

 Entrez le nom du paquet [Other]:

 > Celdia

 Entrez la version core Drupal [8.x]:

 >

 Définir le module comme une fonctionnalité <em>feature</em> (yes/no) [no]:

 > no

 Voulez-vous ajouter un fichier composer.json file à votre module (yes/no) [yes]:

 > yes

 Voulez-vous ajouter des dépendances à votre module (yes/no) [no]:

 > no

 Confirmez-vous la génération (yes/no) [yes]:

 > yes

 

Fichiers générés ou mis à jour

 Chemin du site: /media/vhosts/drupal8-test.dev/web

 1 - modules/custom/mon_module/mon_module.info.yml

 2 - modules/custom/mon_module/mon_module.module

 3 - modules/custom/mon_module/composer.json

 

Après avoir confirmé la génération de fichiers et quitté l’invite de commande de la console, un module sera créé dans le dossier modules/custom.

On peut aussi générer des controller, des formulaires, des types d’entités, des thèmes, des services…

 

Versionning avec Git

Git est un outil de gestion de versions distribué, utilisé dans les projets open source en général et Drupal en particulier. Il permet aux développeurs de travailler en équipe, tout en suivant les modifications apportées sur les fichiers. En effet, contrairement à un environnement centralisé, les outils distribués offrent une plus grande flexibilité aux développeurs en permettant une multiplicité des dépôts distants. Chaque développeur peut ainsi avoir un accès en écriture à son propre dépôt public et en lecture aux dépôts des autres contributeurs (ou développeurs). De plus, on pourrait visualiser les changements et revenir si besoin sur des versions antérieures de codes modifiés.

A la première utilisation après l’installation de Git, il faut penser à le configurer. Cela permettra d’être correctement identifié par Git lors des futures modifications apportées :

$ git config --global user.name "Prénom Nom"

$ git config --global user.email prenom_nom@example.com

 

Ainsi, on peut vérifier ses configurations avec la commande :

$ git config --list

 

Vérifier toujours l’état de nos fichiers en lançant la commande :

$ git status

 

N’hésitez pas à lancer cette commande à chaque fois, pour avoir connaissance de l’état de votre copie de travail avant de faire toute autre tâche.

Pour collaborer dans un projet Git, il est nécessaire de savoir comment gérer les dépôts distants. Ce sont des versions du projet sur lequel on travaille, qui sont hébergées sur internet ou un réseau d’entreprise. Ainsi, on peut avoir besoin de cloner un dépôt ou projet, de récupérer et tirer des données depuis un dépôt distant, de pousser son travail sur un dépôt distant.

 

Pour cloner un dépôt :

$ git clone <dépôt>

 

Pour récupérer, tirer depuis un dépôt distant, et fusionner avec la branche locale :

$ git pull

 

Lorsque les modifications sont prêtes à être partagées, on peut les pousser sur le dépôt distant ainsi :

$git push <nom distant> <nom de branche>

 

Ce qui correspond à :

$git push origin master    

 

Il est nécessaire et important de toujours faire un pull avant un push, pour récupérer les modifications sur le dépôt distant, au risque de les écraser. En effet, comme c’est un travail collaboratif, il faut d’abord récupérer les modifications des autres contributeurs avec git pull pour être sur le même index (niveau), avant de pousser (git push) les nôtres.

 

Il faut retenir que lors d’un processus de déploiement entre différents environnements (local, staging, preprod, prod), tous les fichiers Drupal ne doivent pas être versionnés. Seulement les fichiers suivants doivent l’être :

- composer.lock : ce fichier contient la liste des librairies et leurs versions installées. Il est donc important de le versionner

- composer.json : il peut être versionné en local

- modules/custom/ également important à versionner pour une raison de code spécifique au projet

- themes/custom/ également important à versionner pour les mêmes raisons

- config/ : le dossier comportant toutes les configurations YML.

- sites/ : pour les fichiers de configuration uniquement

 

En conclusion,

Tous ces outils sont importants dans les process de développement et de déploiement d’applications sous Drupal 8. De plus, ils effectuent des tâches différentes et complémentaires les unes des autres :

- Drush pour l’administration du site,

- Composer pour la gestion des librairies,

- Drupal Console pour la génération de code,

- Git pour le versionning.

Il est cependant nécessaire de bien maîtriser ces outils avant de les employer à grande échelle. Sur un projet, il est recommandé de commencer à les utiliser sur un périmètre limité. Ainsi, les collaborateurs du projet développent leur maîtrise et peuvent par la suite les déployer à grande échelle.

 

 

1

L’auteur :

Cellou Diallo est Consultant/Développeur PHP/Drupal chez AUSY Montpellier. C’est un fan des logiciels libres et open source ainsi tout ce qui touche au partage, à la collaboration et à l’intelligence collective. Membre de la communauté Drupal de Montpellier et de l’association Drupal France, il participe à l’animation et à la présentation de conférences aux Meetup Drupal Montpellier, et contribue au développement du projet Drupal à travers la traduction française, la remontée et la résolution d’issues et de bugs… Il continue à développer ses compétences pour être, d’ici quelques années, un Expert Drupal.

Par ailleurs, Cellou possède aussi des compétences en cartographie et géolocalisation de par sa formation de géomaticien. Il a participé à un appel pour une cartographie humanitaire de villes et villages en Guinée (son pays d’origine) lors de l’épidémie Ebola dans ce pays. Ces cartes étaient destinées aux agents de santé, médecins sans frontière, pour se déplacer, chercher, traiter et sauver des malades d’Ebola.

Aussi, n’hésitez pas à découvrir notre offre Drupal.

Parlons ensemble de vos projets

c