Play framework 2.0 betaが出たようです11 – 設定ファイルを使用する
設定ファイルを読む
Play framework 2.0では、デフォルトの設定ファイルとしてconf/application.confファイルが使用されます。 applicaiton.conf以外に自分でファイルを追加することもできますし、それを別ファイルでincludeすることも可能です。 これらPlay frameworkで使用される設定ファイルは、Typesafe configライブラリに基づいており、 HOCONフォーマット(Human-Optimized Config Object Notation。JSONみたいなフォーマット)を使用して記述可能です。 では試してみましょう。
今回使用した動作環境は以下のとおりです。
- OS : MacOS X 10.7.2
- Playframework : HEAD
- Java : 1.6.0_26
- Eclipse : 3.7
注意: この記事ではgithubから取得したHEAD版を使用して試しています。 正式リリース前の状況のため思わぬ不具合が生じるかもしれませんので、ご了承ください。
ソースのHEADを取得してセットアップ
まだgithubからソースを取得していない人は、play2.0のソースを取得してビルドしましょう。
$ git clone https://github.com/playframework/Play20.git $ cd Play20/framework $ ./build > complile > build-repository > publish-local
すでにソースを取得している人は、最新の状態に更新してビルドします。
$ git pull $ cd Play20/framework $ ./cleanEverything $ ./build > compile > build-repository > publish-local
これで準備ができました。
プロジェクト作成
Scalaベースのプロジェクトを作成し、sbtコンソールを起動します。
% play new myConfig % cd myConfig % play
eclipsifyを実行してeclipseプロジェクト化してインポートしてソースの修正をしましょう。
>[myConfig] $ eclipsify
application.confにアクセス
まずはControllerからconf/application.confにアクセスします。 application.confに適当なkey-valueを追加し、Application.scalaで取得してみましょう。
#applicatin.confの一番下 test.msg="hello" test { hoconMsg:"hocon msg" }
//Application.scala#index内 val appConf = Configuration.load() println("appllication.conf/test.msg=" + appConf.getString("test.msg")) println("appllication.conf/hocon.msg=" + appConf.getString("hocon.msg")) println("nothing key=" + appConf.getString("xxx.yyy"))
test.msgはいままで通り=でキーと値を設定しています。 次の値は、JSONのような形式で{}で区切っています。 =でもHOCON形式でもアクセス方法の違いはありません。 次にAppliaiton.scalaを見てみましょう。Configuration.load()メソッドを使用すると、applicatio.confのオブジェクトが取得できます。 キーを.区切りで指定し、値を取得します。なお、戻り値はOptionになっているので、キーが存在しなければOption[None]が返ります。
独自定義の設定ファイルにアクセス
次に独自定義の設定ファイルを作成して、値を取得してみます。 confディレクトリにtest.confを作成して、Application.scalaに追記してください。
#test.conf myconf.msg=this is myconf myconf.foo { bar: this is bar baz: this is baz }
//Application.scala#indexに追記 def getOriginConf(fileName:String) = { ConfigFactory.load(ConfigFactory.parseFileAnySyntax(new File(fileName))) } val myConf = Configuration(getOriginConf("conf/test.conf")) println("test.conf/myconf.msg=" + myConf.getString("myconf.msg")) println("test.conf/myconf.foo.bar=" + myConf.getString("myconf.foo.bar")) println("test.conf/myconf.foo.baz=" + myConf.getString("myconf.foo.baz"))
test.confを新たに作成し、ConfigFactoryを使用してロードしています。 設定ファイルの構文エラーがあれば、parseFileAnySyntaxの時点でエラーが発生します。
ファイルをインクルード
最後にファイルのインクルードをやってみます。
#application.confの一番下 test.inc { incMyConf: {include "test.conf"} }
//Application.scala#indexに追記 println("application.conf include=" + appConf.getString("test.inc.incMyConf.myconf.foo.bar")
application.confではキー: {include "インクルードするファイル名"}として、インクルードしています。 これによってapplication.confの内容は下記のように解釈されます。
test.inc { incMyConf: { myconf.foo { bar: this is bar baz: this is baz } } }
まとめ
今回は設定ファイルの使いかたについてご紹介しました。HOCON形式を使えば階層形式でわかりやすく記述できそうです。
参考サイトなど
- Configuration file syntax and feature https://github.com/playframework/Play20/wiki/Configuration