Subscribed unsubscribe Subscribe Subscribe

Play で conf/ 以下のファイルを扱う場合の注意点

Scala Play


Play では conf/ 以下に設定ファイルや、マイグレーション用の sql を置きます。
場合によってはちょっとした画像をファイルを置くこともあるかもしれません。例えば、アプリ起動時にアスキーアートを表示するためにその素材を置くとか。あると思います。


この conf/ 以下のファイルをアプリケーションから参照する際には Application#getFile または Application#resource が使えます。


まずは、普通にファイルとして扱う Application#getFile。これは引数として、プロジェクトルートからの相対パスを渡します。

val file: File = app.getFile("conf/sample.png")


一方、resource はリソースファイルとしてアクセスする API です。
conf/ は実は Maven プロジェクトで言うところの src/main/resources です。

val resource: Option[URL] = app.resource("sample.png")


で、結論としては、Application#getFile ではなく Application#resource を使いましょう。


Application#getFile を使うと play run や play start でアプリを起動する分には良いのですが、
play dist でデプロイした場合には conf が dist には含まれないのでファイルが参照できなくなります。


詳しくはここ -> https://github.com/playframework/Play20/issues/1079
getFile 変じゃね? って話がされてます。getFile は 2.2 で deprecated になるみたいですね。

dist で conf/ をコピーするって案も出てますが、それも無理があると思いました。自分も getFile 要らないと思います。


play-flyway でもこれに引っかかったので、修正しました。見つけて下さった yasushia さんありがとうございました。
https://github.com/tototoshi/play-flyway/issues/4