Curlシンタックスで設定ファイル

アプリケーションに設定ファイルを用意して、ソースコードを変更せずにアプリケーションの動作を変更できるようにしたい場合があります。例えば以下のようにXMLで設定ファイルを用意する方法が考えられます。

<?xml version="1.0" encoding="UTF-8" ?>
<config>
  <mode>maintenance</mode>
  <log_level>debug</log_level>
</config>


アプリケーションは起動時などに上記のXMLファイルを読み込んで解析します。そして、解析して得られた情報をメモリ上に保持し、プログラム中の必要な箇所から参照できるようにすればよいでしょう。


しかし、curlであればもっと簡単に設定ファイルを実現することができます。
まず、設定情報を保持するためのクラスを定義します。

{define-class public ApplicationConfig
  
  field public constant maintenance?:bool
  field public constant log-level:LogLevel
  
  {constructor public {default
                          maintenance?:bool = false,
                          log-level:LogLevel = LogLevel.normal
                      }
    set self.maintenance? = maintenance?
    set self.log-level = log-level
  }
  
}


次に、scurlファイルをひとつ用意します。内容は、上記で用意したクラスのインスタンス生成のコード(と文字エンコーディング宣言)のみです。

{curl-file-attributes character-encoding = "shift-jis"}
{ApplicationConfig
    maintenance? = true,
    log-level = "debug"
}

これを設定ファイルとして使用します。
例えば config.scurl というファイル名にしたとして、アプリケーションからは以下のように読み込むことができます。

let config:ApplicationConfig = {evaluate {url "config.scurl"}} asa ApplicationConfig
{if config.maintenance? then
    {popup-message "メンテナンス中です"}
}


evaluateは読み込んだファイルの内容をcurlソースコードとして評価し、その結果を返します。
わざわざXMLの解析ロジックをごりごり書く必要はありません。これぞcurl流設定ファイルの作り方です。