Démarrer rapidement et facilement un projet avec un script

La dernière fois que vous avez démarré un projet, comment avez-vous fait ? Piqué des bouts du dernier projet sorti ? Cherché dans votre historique Google à la recherche du bout de code magique de la dernière fois ? Joué avec votre mémoire pour retaper les 25 commandes du terminal qui sont utiles ?

« Ah mince, elles sont dans le désordre du coup ça marche pas. Oh, déjà midi, comme le temps file ».

Et si vous aviez un script pour faire le boulot ? Un script qui pourrait vous générer un projet prêt à démarrer, et ce en quelques instants, avec uniquement des interventions de votre part au début pour répondre à des questions basiques ?

C’est ce que je fais depuis quelques années, et je vais tenter de vous convaincre que c’est la voie à suivre à tout prix.

Pourquoi avoir un script ?

Certains appellent ça un « installer », d’autres un « bootstraper » ou un « scaffolder ». Ça permet de créer toujours la même structure pour facilement reprendre en main un projet, et d’éviter au maximum les fichiers copiés-collés entre les projets.

Ainsi, on va plus vite, sans risquer d’oublier une étape, et on évite les erreurs d’inattention.

Pour moi, c’est vital pour ne pas me lasser en me concentrant sur les tâches essentielles. Je peux améliorer progressivement mes process, centraliser des snippets et de la connaissance. 

C’est aussi très intéressant d’un point de vue historique, pour retracer des choix technologiques dans une société, et familiariser ses nouveaux salariés avec un process clair, tout en leur laissant soumettre leurs briques à l’edifice.

Comment ça marche ?

Au prochain démarrage de projet, notez vos actions et les grandes étapes jusqu’au moment où vous commencerez vraiment à travailler sur le projet et pas sur la mise en place.

L’idée est simple : vous allez en automatiser un maximum, progressivement. 

Sur votre plateforme git préférée, créez un repository nommé « project-starter » ( ou  « jean-michel-installer », vous êtes libres hein ), dans lequel vous allez créer un seul fichier nommé install.sh

Dedans, vous mettrez uniquement ce code :

#!/bin/bash

# Nom du projet
_project_id='monprojet';

# Etape 1 : Créer le dossier
mkdir "${_project_id}";
cd "${_project_id}";

# Dernière étape : C'est fini !
echo "${_project_id} a été initialisé. Au boulot !";

Ensuite, et c’est probablement le plus important, documentez dans le README: «  Etape 1 : Ce script va créer un dossier et s’y rendre » puis commitez, et poussez vos modifications !

C’est spartiate. On y met quoi maintenant ?

Vous l’aurez compris, ça n’est que le début. Voici quelques pistes, en vrac :

Poser des questions pour configurer :

# Stocker une valeur dans une variable
read -p "Quel est l’id du projet ? " project_id;

# On confirme le retour
echo "ID du projet : ${project_id}";

# Question à choix multiples
_q_project_type=$(cat <<EOF
Quel est le type du projet ?
- 1 : WordPress ( Par défaut )
- 2 : Magento
[1/2]
EOF
);

# On demande
read -p "${_q_project_type} : " project_type

# Si la valeur n’est pas bonne : on met la valeur par défaut
if [[ "${project_type}" != '1' && "${project_type}" != '2' ]];then
    project_type='1';
fi;

# On confirme le retour
echo "Type du projet : ${project_type}";

Vérifier que le poste de travail a tous les softs nécessaires

# Test commands
main_commands="curl git yarn wp";
for i in $main_commands
do
    command -v "$i" >/dev/null 2>&1 || { echo >&2 "Il manque \"${i}\"."; exit 1; }
done;

Cloner un projet « squelette »

# Récupérer le repository
git clone https://github.com/darklg/wputilities.git;
# Retirer le tracking ( c'est un exemple hein )
rm -rf wputilities/.git*
# Copier tous les fichiers dnas le dossier courant
cp -r wputilities/* .
# Supprimer le dossier temporaire
rm -rf wputilities/;

Copier des fichiers depuis votre starter

# On récupère le chemin du script qui est installé ailleurs
_JEANMICH_SCRIPT_DIR="$( dirname "${BASH_SOURCE[0]}" )/";
# On copie les fichiers au bon endroit.
cp "${_JEANMICH_SCRIPT_DIR}files/gulpfile.js" gulpfile.js;

Creer un commit à la volée 

# On ajoute tout
git add -A
# On crée le commit
git commit --no-verify -m "Etape 1 : Fichiers initiaux" --quiet;

Et bien d’autres

  • Créer des sous-dossiers .
  • Chercher et remplacer dans un fichier.
  • Déclencher des actions : npm install / wp cli / plugins WordPress / plugins jQuery / composer / gulp / que sais-je 
  • Télécharger des fichiers distants pour les inclure en local.

Pour conclure, quelques notes

Ça se vend

Il ne faut pas le voir comme si on vendait les 3 clics qui ont permis d’initialiser le projet. On vend aussi la main d’oeuvre derrière qui a permis d’arriver à un niveau de qualité fiable et reproductible.

Ça se monte progressivement

Il ne faut pas tenter de tout faire d’un coup : itérez avec les projets, testez, recréez des projets dans le vide avec de mauvais paramètres, faites le lancer par le stagiaire de 3ème sans lui expliquer et observez.

C’est d’ailleurs une excellente façon de démarrer un #commitdujour.

Ça se partage

J’ai appris en lisant des publications d’autres personnes, que ça soit sur Stack Overflow (« ouh la honte »), Medium, Github, des blogs, Twitter et j’en passe. Prenez ce qui vous intéresse, améliorez le et redistribuez le.

Il y a des outils existants

Il y a des systèmes spécialisés comme Yeoman (EN) qui ne se concentrent souvent que sur la partie Front, et pas sur la partie back-end ou projet. Je n’ai jamais réussi à les intégrer dans ma méthodologie car je travaille souvent en full-stack sur des CMS avec beaucoup d’intervenants différents. Ça ne prenait en main qu’une petite partie du projet, ou ça obligeait à une migration de techno trop violente. Une grande partie des actions se boucle souvent en quelques lignes de Shell simples, donc autant jouer avec les cartes qu’on a en main.

J’ai moi-même créé WPUInstaller et InteStarter pour démarrer plus vite sur ce type de prod, et d’autres sont en cours pour d’autres aspects de mon travail.

« gneugneugneu »

« gneugneugneu je le fais déjà il y a rien de neuf » : Alors publiez-le, parlez-en, popularisez le concept ! C’est tellement rageant de voir des gens qui perdent des matinées ou des journées juste pour « démarrer un projet ».

Je suis persuadé que la popularisation de ce concept simple offrirait une main tendue supplémentaire aux personnes en reconversion, ou qui souhaitent ajouter une corde technique à leur arc.

Et maintenant ?

Evidemment, ça dérape souvent vers la modularisation de vos projets, pour réutiliser plus facilement des choses, améliorer la maintenabilité, etc … plutôt chouette non ? 🙂

Partager cet article

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *