Le WordPress d'aujourd'hui, décodé pour les développeurs

Outils & workflow

Un tableau associatif Bash plutôt qu’une cascade de if dans un script

Représenter une configuration par environnement dans un tableau associatif évite une cascade de conditions répétitives dans un script maison de déploiement.

Par WordPress Développement • 19 mai 2022 • 4 min de lecture • Aucun commentaire
Un tableau associatif Bash plutôt qu'une cascade de if dans un script

declare -A CONFIG_ENVIRONNEMENT : cette seule déclaration a remplacé une vingtaine de lignes de conditions répétitives dans un script de déploiement maison, chacune testant le nom de l’environnement cible pour en déduire un chemin de fichier ou une adresse de serveur différente. Ce billet ne traite pas des langages déclaratifs comme YAML, mais d’une amélioration ciblée d’un script bash existant.

Le problème : une cascade de conditions qui grossit à chaque environnement ajouté

Le script initial testait le nom de l’environnement avec une succession de blocs if et elif, chacun fixant plusieurs variables selon le cas. Ajouter un nouvel environnement, par exemple un environnement de recette supplémentaire, demandait de dupliquer un bloc entier, avec le risque d’oublier une variable ou de mal recopier une valeur d’un bloc à l’autre.

if [ "$ENV" = "production" ]; then
  HOST="prod.serveur.exemple"
  PATH_DEPLOY="/var/www/prod"
elif [ "$ENV" = "staging" ]; then
  HOST="staging.serveur.exemple"
  PATH_DEPLOY="/var/www/staging"
elif [ "$ENV" = "recette" ]; then
  HOST="recette.serveur.exemple"
  PATH_DEPLOY="/var/www/recette"
else
  echo "Environnement inconnu"
  exit 1
fi

La solution : centraliser la configuration dans un tableau associatif

L'essentiel à retenir : Une cascade de if répétitifs devient vite difficile à faire évoluer ; Un tableau associatif centralise la configuration en un seul endroit lisible ; Ajouter un environnement ne demande plus de dupliquer une structure conditionnelle

Un tableau associatif Bash permet d’associer une clé à une valeur, comme un dictionnaire. En représentant chaque environnement comme une clé, et en combinant l’hôte et le chemin de déploiement dans une valeur structurée, la configuration entière tient en quelques lignes lisibles d’un seul coup d’œil, sans répétition de la logique conditionnelle.

declare -A HOTES=(
  [production]="prod.serveur.exemple"
  [staging]="staging.serveur.exemple"
  [recette]="recette.serveur.exemple"
)
declare -A CHEMINS=(
  [production]="/var/www/prod"
  [staging]="/var/www/staging"
  [recette]="/var/www/recette"
)

if [[ -z "${HOTES[$ENV]:-}" ]]; then
  echo "Environnement inconnu : ${ENV}"
  exit 1
fi

HOST="${HOTES[$ENV]}"
PATH_DEPLOY="${CHEMINS[$ENV]}"

Ce que ce changement améliore concrètement

Ajouter un environnement supplémentaire se limite désormais à ajouter une ligne dans chacun des deux tableaux, sans toucher à la logique du script elle-même. La vérification qu’un environnement demandé existe bien devient également une simple vérification de présence de la clé, plus lisible qu’une succession de comparaisons de chaînes de caractères.

  • La configuration de chaque environnement est visible en un seul bloc, sans être dispersée dans des conditions successives.
  • Le risque d’oubli d’une variable lors de l’ajout d’un environnement diminue fortement.
  • La vérification d’un environnement inconnu se fait en une seule condition, au lieu d’un bloc else final fragile.

Une limite à connaître avant de généraliser cette approche

Les tableaux associatifs ne sont disponibles qu’à partir de Bash 4, une version qui n’est pas installée par défaut sur tous les systèmes, notamment certaines versions de macOS qui embarquent historiquement une version antérieure. Avant de généraliser cette approche sur des scripts partagés entre plusieurs postes de travail d’une équipe, il convient de vérifier la version de Bash réellement disponible sur chaque machine concernée.

bash --version

Un tableau associatif ne remplace pas toute logique conditionnelle, mais il élimine la répétition inutile là où une simple correspondance clé-valeur suffit.

Aller plus loin avec une boucle sur les clés du tableau

Une fois la configuration centralisée dans un tableau associatif, une boucle sur l’ensemble de ses clés permet aussi de valider en une seule fois que chaque environnement déclaré dispose bien d’une valeur cohérente dans les deux tableaux, avant même de lancer un déploiement réel. Cette vérification préalable évite de découvrir une configuration incomplète en pleine opération de déploiement, un moment particulièrement mal choisi pour ce type de découverte.

for env in "${!HOTES[@]}"; do
  if [[ -z "${CHEMINS[$env]:-}" ]]; then
    echo "Configuration incomplète pour : ${env}"
    exit 1
  fi
done
echo "Configuration de tous les environnements validée"

En résumé

Remplacer une cascade de conditions répétitives par un tableau associatif Bash rend un script de déploiement plus lisible et plus facile à faire évoluer, à condition de vérifier au préalable que la version de Bash disponible sur chaque poste de l’équipe prend bien en charge cette fonctionnalité.

Laisser un commentaire

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

Partager :

À propos de l'auteur

WordPress Développement

Développeur WordPress, passionné par Elementor, le FSE et l’automatisation par IA.

Voir tous ses articles

Dans la même veine

À lire aussi