0Pricing
Lua Academy · レッスン

設定用DSLの構築

サンドボックス内でdofile()から読み込める宣言型の設定言語を作成します。

「設定用DSLの構築」はCoddyKit上の無料Lua Academyレッスンです。 これはレッスン3/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはLua Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Lua Academyコースには全4レッスンが含まれています。

目標:宣言的な設定

設定DSLを使うと、ユーザーは読みやすく宣言的な形式で設定を記述しながら、背後ではLuaの機能(条件分岐、ループ、関数)をすべて利用できます。

設定関数パターン

設定を検証して保存するconfig(tbl)関数を公開してください。きれいな構文で記述できるよう、テーブルリテラルを渡して呼び出します。

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

セクションを使った入れ子の設定

設定を整理できるよう、入れ子になったセクションをサポートしてください。

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

設定内のヘルパー関数

計算によって値を求められるよう、設定内でヘルパー関数を呼び出せるようにしてください。

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")),
}

サンドボックス化した設定の読み込み

セキュリティのため、安全なヘルパーだけを許可する制限された環境で設定を読み込んでください。

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

スキーマ検証

読み込み後に、必須フィールドと型を検証してください。

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"))

デフォルト値

必要なすべてのキーに値が設定されるよう、読み込んだ設定をデフォルト値とマージしてください。

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

環境変数による上書き

環境変数で設定ファイルの値を上書きできるようにしてください。これは12-factorアプリの設計に不可欠です。

設定の継承

ベースとなる設定を読み込んだ後、環境固有の設定(development、staging、production)を上書き適用してください。

不変の設定

読み込み後に、エラーを発生させる__newindexを使って設定テーブルを凍結し、実行時に誤って変更されるのを防いでください。

設定内のドキュメント

コメントと構造化されたキー名を、自己文書化の手段として使用してください。適切に設計された設定DSLは、DevOpsチームにとって説明を読まなくても分かるものになります。

設定DSLに関する質問

サンドボックス化した_ENVを使って設定ファイルを読み込むのはなぜですか?

まとめ:設定DSLの構築

config(tbl)関数を公開してください。入れ子になったセクションとヘルパー関数をサポートします。サンドボックス化した環境で読み込みます。必須フィールドと型を検証します。デフォルト値を用意し、12-factorへの準拠のために環境変数による上書きを許可します。

よくある質問

「設定用DSLの構築」レッスンは無料ですか?

はい。「設定用DSLの構築」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Lua Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Lua Academyコースには全4レッスンが含まれています。

「設定用DSLの構築」で何を学びますか?

サンドボックス内でdofile()から読み込める宣言型の設定言語を作成します。 ブラウザで直接実行するハンズオンコードでLua Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

Lua Academyを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのLua Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン3/4です。

「設定用DSLの構築」レッスンにはどのくらい時間がかかりますか?

ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。

このLua Academyレッスンでコードを書いて実行できますか?

はい。すべてのLua Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. LuaにおけるDSL設計原則
  2. DSLの表現力を高める演算子オーバーロード
  3. 設定用DSLの構築
  4. シンプルな式パーサー
← Lua Academyに戻る