codingecho

日々の体験などを書いてます

Play Framework 2.5の設定ファイルの書き方

すでにPlay Framework 2.6が公開されていますが、Play Framework 2.5の設定方法について少しまとめておきます。

Play Frameworkの設定はデフォルトではapplication.confに書くようになっています。

application.confには何を書くか

DBやAkkaアクター、ログや自分で定義したい設定など、基本的に全ての設定を書きます。

application.confのロード

デフォルトでは classpath にある reference.conf がロードされます。Play Frameworkではデフォルトのセッティングとして reference.conf が定義されているのですが、 application.conf を記述することで任意の設定に上書きすることができます。

application.conf はJavaのシステムプロパティで上書きすることもできます。-Dhttp.port=1234のような感じにします。 また application.conf の設定ファイル自体を置き換えることもできます。システムプロパティにconfig.resourcedevelopment.confのように指定します。

application.confのフォーマット

Play Frameworkでは application.confHOCONと呼ばれるフォーマットで設定ファイルを記述します。 HOCONはJSONに似たフォーマットです。

sbt runで開発環境の設定をする

開発用にrunコマンドでアプリケーションを起動するとき build.sbt に設定を追加することができます。 PlayKeys.devSettings := Seq("play.server.http.port" -> "8080")のように設定します。 この設定はアプリケーションをデプロイするときには有効になりません。

runコマンドではアプリケーションがコンパイルされる前にHTTP serverが起動します。そのためHTTP serverが起動した段階では application.conf からHTTP serverの設定を読み込むことはできません。HTTP serverを設定するにはシステムプロパティを使用するかdevSettingsを設定する必要があります。

HOCONシンタックス

HOCONはJSONに似ていますが、違う点について説明します。

同じ部分

  • UTF-8を使う
  • クオートしたstring
  • string, number, object, array, boolean, null

コメント

//#を使用します。

ルートのブレース

JSONではルートでobject({})かarray([])である必要がありますが、HOCONではルートでこれらの括弧は使用しません。

key-valueの区切り

:の他に=でもkey-valueを区切ることができます。 また、"foo": {}"foo" {}のように書くことができます。

複数のkeyでパスを表現する

foo.bar : 42foo { bar : 42 }と同じ意味です。

a.x : 42, a.y : 43a { x : 42, y: 43 }と同じ意味です。

代入

${?foo}${foo}のようにすることでキーがfooの値を代入することができます。また代入するキーはルートからの絶対パスで指定する必要があります。

インクルード

他のファイルから設定を追加でインクルードすることができます。インクルードするファイルはオブジェクトである必要があります。 同じキーがあった場合は一番最後に評価(パース)された値に置き換えられます。

開発環境と本番環境のように環境別にDBの接続先などを変えたいときがあります。そのほかの設定が共通の場合、以下のように書くことができます。

base.conf

akka {
  ...
}

development.conf

include "base.conf"

# DB configs

development.conf から base.conf をインクルードすることで共通のAkkaの設定を追加することができます。

設定方法の一部を紹介しましたが、ここに書かれている内容はこちらに詳しく書かれています。