whitepaper-config: アプリケーション設定ツールキット

Scala アプリケーションの設定をサポートするツールキット whitepaper-config を作りました。
https://github.com/akr4/whitepaper/tree/develop/config


設定を Scala コードとして書いておくと、実行時に環境に応じた設定を選択します。
設定ファイルを外出しにする必要のない web アプリケーションなどに向いています。


環境の選択には

  1. JVMシステムプロパティ
  2. ホスト名

を使います。

使い方

まず設定クラスを用意します。名前、型はなんでも構いません。

trait Config {
  val dbUser: String
  val dbPassword: String
}

次に環境ごとの設定を Environments に登録します。

val env = Environments("whitepaper",
    "dev" -> new Config {
      val dbUser = "dbUser_dev"
      val dbPassword = "dbPassword_dev"
    },
    "prod" -> new Config {
      val dbUser = "dbUser_prod"
      val dbPassword = "dbPassword_prod"
    }
  )

あとは Environments.current メソッドにより環境に応じた設定を取り出すことができます。

env.current.dbUser // dbUser_dev または dbUser_prod


システムプロパティで環境を指定するには Environments の第1引数 + ".env" を使って

java -Dwhitepaper.env=dev ....

とします。

システムプロパティの指定がなければホスト名に一致する環境の設定が取り出されます。

まとめ

Scala で書く点は Twitter の util-eval と似ていますが web アプリケーションの場合たいてい動的に eval する必要がないので環境切り替えにフォーカスして作りました。
実際たいしたことやってなくて、Environments のコードはとても短いです。
Scala は少しのコードでも強力なので、小さめの小道具を組み合わせてシステムを構築するスタイルが向いているんじゃないかなと思っています。(Unfiltered の受け売りですw)