§Scala設定API
PlayはTypesafe configライブラリを使用していますが、Playはより高度なScala機能を備えたConfiguration
という便利なScalaラッパーも提供しています。Typesafe configに馴染みがない場合は、設定ファイルの構文と機能に関するドキュメントも参照してください。
§設定へのアクセス
通常、依存性注入、または単にConfiguration
のインスタンスをコンポーネントに渡すことで、Configuration
オブジェクトを取得します。
class MyController @Inject() (config: Configuration, c: ControllerComponents) extends AbstractController(c) {
def getFoo = Action {
Ok(config.get[String]("foo"))
}
}
get
メソッドは最もよく使用するメソッドです。これは、設定ファイル内のパスにある単一の値を取得するために使用されます。
// foo = bar
config.get[String]("foo")
// bar = 8
config.get[Int]("bar")
// baz = true
config.get[Boolean]("baz")
// listOfFoos = ["bar", "baz"]
config.get[Seq[String]]("listOfFoos")
これは暗黙的なConfigLoader
を受け入れますが、String
、Int
、さらにはSeq[String]
などの最も一般的な型については、期待どおりに動作するローダーがすでに定義されています。
Configuration
は、有効な値のセットに対する検証もサポートしています。
config.getAndValidate[String]("foo", Set("bar", "baz"))
§ConfigLoader
独自のConfigLoader
を定義することで、設定をカスタム型に簡単に変換できます。これはPlay内部で広範囲に使用されており、構成の使用に型安全性を高めるための優れた方法です。たとえば
case class AppConfig(title: String, baseUri: URI)
object AppConfig {
implicit val configLoader: ConfigLoader[AppConfig] = new ConfigLoader[AppConfig] {
def load(rootConfig: Config, path: String): AppConfig = {
val config = rootConfig.getConfig(path)
AppConfig(
title = config.getString("title"),
baseUri = new URI(config.getString("baseUri"))
)
}
}
}
次に、上記のようにconfig.get
を使用できます。
// app.config = {
// title = "My App
// baseUri = "https://example.com/"
// }
config.get[AppConfig]("app.config")
§オプションの設定キー
PlayのConfiguration
は、getOptional[A]
メソッドを使用してオプションの設定キーを取得することをサポートしています。これはget[A]
とまったく同じように動作しますが、キーが存在しない場合はNone
を返します。このメソッドを使用する代わりに、設定ファイルでオプションのキーをnull
に設定し、get[Option[A]]
を使用することをお勧めします。ただし、標準外の方法で構成を使用するライブラリとのインターフェースが必要な場合に備えて、このメソッドを提供しています。
次へ: HTTPプログラミング
このドキュメントにエラーを見つけましたか?このページのソースコードはこちらにあります。 ドキュメントガイドラインを読んだ後、プルリクエストを自由にご投稿ください。質問や共有するアドバイスがありますか?コミュニティフォーラムでコミュニティとの会話を始めてください。