Scala + Play Framework 2.8 系で、設定ファイル(application.conf)の内容を読み込む

Scala + Play Framework 2.8系で、設定ファイル (application.conf) の内容を読み込む機会があったため、メモを残します。

 
目次

 

環境

  • Scala 2.13.6
  • Play Framework 2.8.8

 

方法

Play Framework 2.8系では

  • Controllerで play.api.Configurationplay.api. Environment をDIする
  • ConfigFactory.load().getString を使う

で行うようです。

 

動作確認

以下の application.config・Controller・Viewを用意し、試してみます。

application.config

foo=bar

 
ConfigLoaderController.scala

今回は

  • Controllerで play.api.Configuration をDIする
  • ConfigFactory.load().getString を使う

を試してみます。

package controllers

import com.typesafe.config.ConfigFactory
import play.api.mvc._

import javax.inject.Inject

class ConfigLoaderController @Inject()(val cc: ControllerComponents, val config: play.api.Configuration) extends AbstractController(cc) {
  def diConfig() = Action { implicit request: Request[AnyContent] =>
    // injectされた config を使うパターン
    Ok(views.html.di_config(config.underlying.getString("foo")))
  }

  def load() = Action { implicit request: Request[AnyContent] =>
    // Factoryでloadする
    val conf = ConfigFactory.load()
    val value = conf.getString("foo")
    Ok(views.html.load_config(value))
  }
}

 
それぞれの方法用にViewを用意して、動作を確認してみます。

DI用のView (di_config.scala.html) を

@(name: String)

@main("Welcome to Play") {
    <h1>Configuration value: @name</h1>
}

と用意したところ、値を読み込めてViewで表示できました。

 
一方、load用のView (load_config.scala.html) を

@(name: String)

@main("Welcome to Play") {
    <h1>Load value: @name</h1>
}

と用意したところ、こちらも読み込めてViewで表示できました。

 

ソースコード

Githubに上げました。
https://github.com/thinkAmi-sandbox/play_scala_hello_app

PRはこちらです。
https://github.com/thinkAmi-sandbox/play_scala_hello_app/pull/1