Voici la 2ème partie de "Pourquoi Drupal ?". La première partie était une comparaison avec les autres solutions, ici je voudrais exposer ce qu'est Drupal, ce qu'il peut vous offrir, et ce que vous pouvez offrir à Drupal !
Drupal est flexible !
C'est LA caractéristique de Drupal: plus de 4000 modules pour Drupal 7. Un impressionnant jeu de Lego ! C'est ce qui m'a donné l'envie de comprendre son fonctionnement, et comme c'est une une solution opensource c'est tout à fait faisable. La communauté est très active et publie de nombreux articles, tutoriaux et screencast.
Le coeur (core) lui-même fonctionne avec des modules. Le cycle de développement de Drupal illustre cette flexibilité: les modules se développent "librement" en dehors du core, sans contraintes ... l'innovation à son meilleur! Ensuite, selon leur maturité et leur niveau d'adoption, les modules peuvent être intégrés à la version suivante de Drupal. Par exemple, le module CCK de Drupal 6 (qui permet l'ajout de champs aux pages) a été intégré à Drupal 7 (sous le nom Field). De nombreux modules meurent en chemin, et tous n'ont pas cette vocation ... on revient encore à Darwin! Fait intéressant, l'inverse se produit aussi: certains modules trop "spécifiques" quittent le core (comme Blog API).
Grâce à son architecture modulaire, il est possible d'activer juste les fonctions nécessaires, on évite ansi le Bloatware.
Pour aller plus loin:
- une réponse complète de Jeff Eaton sur stackoverflow.
- un article de Julien Dubreuil sur le principe des hook.
Drupal est scalable !
Drupal peut monter en charge à plusieurs niveaux:
- code: le core est petit, ce qui permet de mieux le prendre en main au début. Lors de la première installation, n'ajoutez pas d'autres modules tout de suite, pour bien le comprendre. Ensuite vous pourrez en ajouter en évitant les modules inutiles, car il faudra les maintenir. Tous les modules sont sur http://drupal.org. Privilégiez ceux qui sont "actifs" et qui ont de nombreuses installations.
- équipe: vous pouvez commencer le développement petit, sur votre environnement local et déployer par FTP sur un serveur. Si votre équipe grossit, vous pourrez gérer votre code avec GIT (c'est une bonne idée même tout seul !) et votre déploiement avec drush qui est un outil génial pour déployer votre solution avec des scripts.
- serveur. Dépendant de vos besoins, il est possible de l'installer sur un hébergement partagé (oui, oui, quelques $/mois avec Boost), jusqu'à une grosse infrastructure avec LoadBalancing, Caching (Varnish/Ngnix), BD en cluster (Master/Slave) comme expliqué ici. Rendu à ce stade, des spécialistes de ces technologies seront nécessaires, mais pas avant.
Drupal est frustrant !
Je ne vous ferrai pas croire qu'avec Drupal tout est facile. Il y a des hauts et des bas. Drupal est très vaste. Faire un site comme la Maison Blanche est complexe, même s'il est propulsé par Drupal !
La courbe d'apprentissage est trop ardue. Il faut y aller une bouchée à la fois. Choisissez vos projets en fonction de votre niveau, en essayant de sortir un peu de votre zone de confort à chaque projet. Pour progresser sans trop de risque, je trouve que les projets "bénévole" sont l'idéal, en plus ils seront utiles à votre communauté!
Parfois difficile d'évaluer le temps de développement. Cela peut-être rapide si un module répond parfaitement au besoin ou si vous l'avez déjà fait dans un projet précédent. Mais si le besoin est spécifique il vous faudra, soit modifier un module existant (l'enrichir, ajuster le visuel) ou développer votre propre module. Le plus dur est de gérer l'attente de votre client qui pourrait NE PAS comprendre que ça a été si vite pour avoir 80% des fonctionnalités, et que ce soit si long pour quelques petites fonctionnalités. Aussi, il ne faut pas négliger le temps nécessaire pour "simplifier" les interfaces pour les rendre plus intuitives. La méthode Agile est votre meilleure amie ...
Attention au syndrome "Y-a un module pour ça !". C'est facile et très tentant d'ajouter de nombreux modules. Mais au moment des mises à jour de sécurité (vous les appliquerez hein !), plus il y a de modules installés, plus il y aura de tests et de risques d'incompatibilités. J'essaye d'utiliser le moins de modules possibles. Parfois je m'inspirer du code d'un module existant, pour faire un module juste suffisant ... en plus c'est formateur !
Les versions majeures de Drupal introduisent des bris de compatibilité. C'est frustrant au premier abord, mais le Web bouge vite et c'est aussi une façon d'épurer l'écosystème (encore Darwin !). La mise à jour d'un gros site peut prendre du temps ... par contre cela peut-être l'occasion d'une refonte. La communauté supporte 2 versions de core de Drupal, actuellement la 6 et 7. Lorsque Drupal 8 va sortir, la version 6 sera délaissée. Pour les modules, c'est plus variable.
Difficile de faire le design visuel d'un site Drupal. C'est la conséquence de sa grande flexibilité. Le design visuel doit être intégré au développement (et non pas en amont). Si vous voulez faire du Responsive Web Design c'est de toute façon une bonne idée (voir cette présentation au DrupalDevDays). Vous pouvez partir d'un thème de base (qui donne des guides mais pas de visuel) comme Omega, AdaptiveTheme, Zen, ou d'autre. Si votre budget est serré, une bonne stratégie est de partir d'un thème existant et l'ajuster. Dans ce cas, choisissez un thème simple sinon le modifier peut devenir complexe! Le Design Web est une spécialité, faire un thème Drupal aussi.
En fait, ces difficultés sont plus souvent dues à la complexité de ce que l'on souhaite faire, qu'à Drupal lui-même. Toujours à comparer avec "comment j'aurais fait autrement"
Drupal est une glue
Travaillant aussi avec .Net, certaines personnes de mon entourage ne comprennent pas mon intérêt pour PHP (qui a mauvaise réputation ...). La réalité est que le langage utilisé n'a pas grand chose à voir avec la qualité de ce qui est livré. J'ai toujours vu PHP comme une glue. il existe de nombreuses extensions et scripts pour toutes sortes de besoins. Cela permet d'être hyper productif, Facebook ne s'y est pas trompé! Avec ses coding standard Drupal apporte un bon cadre au développement.
Par extension, je vois Drupal comme une glue. Certains puristes n'aimeront pas cette approche, mais c'est mon coté pragmatique. Selon votre besoin, à la place des fonctions natives, il est parfois plus efficace d'utiliser des services Cloud externe (gratuit ou payant). De nombreux petits modules "pont" existent pour cela:
- pour les commentaires, Disqus,
- pour le Web Analytique, Google Analytic,
- pour l'envoi d'email MailChimp,
- etc ...
Pour l'installation de Drupal lui-même aussi:
- pour des besoins simples drupalgarden,
- pour des besoins plus évolués Pantheon ou DevCloud.
Pour aller plus loin:
- de Jeff Atwood PHP Sucks, But It Doesn't Matter
- et cet article entre puristes et pragmatiques: How I stopped writing awesome code
Drupal est une formidable plateforme d'apprentissage
Pas beaucoup d'article sur ce sujet, mais Drupal est une formidable plateforme d'apprentissage des technologies du Web. Suivez un peu Drupal Planet et vous comprendrez ce que je veux dire. C'est par ces articles que j'ai pris connaissance il y quelques années de jQuery, Ngnix, Varnish, Memcached, du Web Sémantique et j'en passe. Récemment c'est le HTML5, Responsive Web Design, les CSS avec LESS/SASS, le développement d'application mobile avec Drupal coté serveur (Services RestFull/JSON), etc ...
Si vous suivez le développement de Drupal 8 et je vous garantis que vos connaissances Web seront à jour! Encore mieux, c'est facile d'expérimenter: vous installez un module, et c'est parti! Dernièrement j'ai plongé dans les API Twitter grâce à ce module.
Votre temps passé avec Drupal (car il faudra en passer si vous voulez aller loin), est un investissement. Votre connaissance vous appartiendra et vous pourrez l'appliquer comme vous le souhaitez sans être dépendant d'un fournisseur, ni de son Business Modèle (qui peut décider, et c'est son droit, de rendre désuet son produit).
Drupal c'est une communauté
L'expression "Come for the software, stay for the community" est une réalité. C'est tellement "énergisant" de côtoyer du monde motivé. Être impliqué dans la communauté c'est comme multiplier par 100, par 1000 le nombre de vos collègues. Il y a comme une envie de changer le monde ...ce qui donne un sens.
Pas besoin d'être développeur pour participer à la communauté. Le point de départ est http://drupal.org/community, vous pouvez participer aux discussions virtuellement ou physiquement dans une conférence, un camp ou un Meetup proche de chez vous. Si vous essayez des modules, n'hésitez pas à soumettre vos commentaires, les bugs etc ... Et si vous êtes développeur, contribuer par du code, des recettes, des modules !
Drupal c'est vous !
Vous êtes toujours là ... et vous vous dites "c'est beau tout ça mais je fais quoi maintenant ?"
L'important c'est d'y aller étape par étape sans vouloir manger tout le gâteau d'un coup ! Chercher d'abord sur Drupal Groups un Meetup proche de chez vous, et participez-y! Petite plug, si vous êtes à Québec, les Meetup s'organisent ici.
Vous pouvez commencer avec drupalgarden, qui offre un hébergement gratuit (les modules sont limités, mais les mises à jours sont automatiques). Ensuite vous pourrez passer à la vitesse supérieure avec une installation locale: clef en main avec Dev Deskop ou manuel avec XAMPP. Ensuite passer à votre propre hébergement partagé, ou dédié (VPS) ou plus ...
Votre aventure sera différente de la mienne, mais le voyage en vaut la peine !
Vous pouvez me suivre sur twitter @NicolasFruit pour échanger sur Drupal, les Technos Web et plus!