0Pricing
Lua Academy · Leçon

Construire un DSL de configuration

Créez un langage de configuration déclaratif chargé par dofile() dans un bac à sable.

Construire un DSL de configuration est une leçon Lua Academy gratuite sur CoddyKit. Ceci est la leçon 3 sur 4. Tu peux lire la leçon complète ci-dessous gratuitement — puis la pratiquer en direct dans le navigateur avec un éditeur de code intégré et un tuteur IA 24/7. Elle fait partie du parcours d'apprentissage Lua Academy, et ta progression se synchronise sur le web et l'application CoddyKit. Le cours Lua Academy comprend 4 leçons au total.

Objectif : configuration déclarative

Un DSL de configuration permet aux utilisateurs d'exprimer la configuration dans un style lisible et déclaratif, tout en utilisant en arrière-plan toute la puissance de Lua (conditionnelles, boucles, fonctions).

Patron de fonction de configuration

Exposez une fonction config(tbl) qui valide et stocke la configuration. Appelez-la avec une table littérale pour obtenir une syntaxe claire.

local function config(tbl)
  -- validate and store
  return tbl
end
-- config.lua:
return config {
  host = "localhost",
  port = 8080,
  debug = os.getenv("DEBUG") == "1",
}

Configuration imbriquée avec des sections

Gérez des sections imbriquées pour organiser la configuration.

return config {
  database = { host="db.local", port=5432 },
  cache    = { host="cache.local", ttl=300 },
  logging  = { level="INFO", file="/var/log/app.log" },
}

Fonctions utilitaires dans la configuration

Autorisez l'appel de fonctions utilitaires dans la configuration pour calculer des valeurs.

local function env(name, default)
  return os.getenv(name) or default
end
return config {
  host  = env("DB_HOST", "localhost"),
  port  = tonumber(env("DB_PORT", "5432")),
}

Chargement de configuration dans un bac à sable

Pour des raisons de sécurité, chargez la configuration dans un environnement restreint qui n'autorise que des fonctions utilitaires sûres.

local function loadConfig(path)
  local safeEnv = {
    config = config,
    env    = env,
    math   = math,
    table  = table,
  }
  local fn, err = loadfile(path, "t", safeEnv)
  if not fn then error(err) end
  return fn()
end

Validation du schéma

Validez les champs obligatoires et les types après le chargement.

local function validate(cfg)
  assert(type(cfg.host) == "string", "host must be string")
  assert(type(cfg.port) == "number", "port must be number")
  assert(cfg.port > 0 and cfg.port < 65536, "port out of range")
end
validate(loadConfig("config.lua"))

Valeurs par défaut

Fusionnez la configuration chargée avec les valeurs par défaut afin de garantir que toutes les clés obligatoires possèdent une valeur.

local defaults = {host="localhost", port=8080, debug=false}
local function loadWithDefaults(path)
  local cfg = loadConfig(path)
  for k, v in pairs(defaults) do
    if cfg[k] == nil then cfg[k] = v end
  end
  return cfg
end

Remplacement par l'environnement

Autorisez les variables d'environnement à remplacer les valeurs du fichier de configuration — une fonctionnalité essentielle à la conception d'une application à douze facteurs.

Héritage de configuration

Chargez une configuration de base, puis superposez la configuration propre à l'environnement (développement, préproduction, production).

Configuration immuable

Après le chargement, figez la table de configuration avec un __newindex qui lève une erreur, afin d'empêcher toute modification accidentelle à l'exécution.

Documentation de la configuration

Utilisez des commentaires et des noms de clés structurés comme auto-documentation. Un DSL de configuration bien conçu est explicite pour les équipes DevOps.

Question sur le DSL de configuration

Pourquoi charger un fichier de configuration avec un _ENV isolé dans un bac à sable ?

Récapitulatif : créer un DSL de configuration

Exposez une fonction config(tbl). Gérez les sections imbriquées et les fonctions utilitaires. Chargez la configuration dans un environnement isolé dans un bac à sable. Validez les champs obligatoires et les types. Fournissez des valeurs par défaut et autorisez les remplacements par les variables d'environnement pour respecter les douze facteurs.

Questions Fréquemment Posées

La leçon « Construire un DSL de configuration » est-elle gratuite ?

Oui — le texte complet de « Construire un DSL de configuration » est gratuit à lire ici sur le web. Pour la pratiquer de manière interactive (un éditeur de code intégré et un tuteur IA 24/7) et déverrouiller le reste du cours Lua Academy, passe à CoddyKit PRO. Le cours Lua Academy comprend 4 leçons au total.

Qu'est-ce que j'apprendrai dans « Construire un DSL de configuration » ?

Créez un langage de configuration déclaratif chargé par dofile() dans un bac à sable. Tu pratiques Lua Academy avec du code pratique que tu exécutes directement dans le navigateur, et un tuteur IA 24/7 répond à tes questions au fur et à mesure que tu avances dans la leçon.

Dois-je avoir de l'expérience pour commencer Lua Academy ?

Aucune expérience préalable n'est requise. Lua Academy sur CoddyKit est structuré pour les débutants jusqu'aux apprenants avancés, donc tu peux commencer ici ou depuis le début et avancer à ton rythme. Ceci est la leçon 3 sur 4.

Combien de temps prend la leçon « Construire un DSL de configuration » ?

La plupart des leçons CoddyKit prennent environ 5–10 minutes. Chacune est courte et interactive, tu progresses régulièrement et tu repiques exactement où tu t'es arrêté sur le web et l'app.

Peux-tu écrire et exécuter du code dans cette leçon Lua Academy ?

Oui. Chaque leçon Lua Academy inclut un éditeur de code intégré, tu écris et exécutes du vrai code directement dans ton navigateur et tu reçois des retours IA instantanés — aucune configuration locale requise.

Toutes les leçons de ce cours

  1. Principes de conception des DSL en Lua
  2. Surcharge des opérateurs pour maîtriser les DSL
  3. Construire un DSL de configuration
  4. Analyseur d’expressions simple
← Retour à Lua Academy