Documentation

§Play エンハンサ

Play エンハンサ は、Java Bean に getter と setter を生成し、これらのフィールドにアクセスするコードを getter と setter を使うよう書き換える sbt プラグインです。

§動機

Java に対するよくある批判のうちのひとつは、単純なことにも大量のボイラープレートコードを要求されることです。もっとも顕著な例はフィールドのカプセル化です - メソッド内のフィールドアクセスと状態変更をカプセル化することは、将来的にデータのバリデーションや生成を可能とするため、よいプラクティスと見做されます。これは、Java では全てのフィールドを private として、フィールドごとに getter と setter を書くことを意味するので、典型的なフィールドごとに 6 行のオーバーヘッドとなります。

それだけではなく、例えば ORM のようにオブジェクトのプロパティにリフレクションを使ってアクセスする多くのライブラリが、クラスのフィールドごとに getter と setter が実装されていることを要求します。

Play エンハンサは、getter と setter を手作業で実装する代わりとなる機能を提供します。コンパイルされたクラスのバイトコードに対するいくつかの後処理を実装しており、これは一般的にバイトコード拡張と呼ばれています。Play は、クラス内のすべての public フィールドに対する getter と setter を生成し、これらのフィールドを使うコードを生成した getter と setter を使うように書き換えます。

§欠点

しかしながら、getter と setter を生成するバイトコード拡張にも欠点はあります。以下に数点、示します:

Play エンハンサを使うか否かはプロジェクト次第ですが、もし使うと決断した場合は、エンハンサが何を行い、どのような欠点がありえるのかを理解することが、もっとも重要です。

§セットアップ

バイトコードエンハンサは、以下の行を project/plugins.sbt ファイルに追記するだけで有効になります:

addSbtPlugin("com.typesafe.sbt" % "sbt-play-enhancer" % "1.1.0")

Play エンハンサは、すべてのプロジェクトで有効になります。特定のプロジェクトで Play エンハンサを無効にしたい場合は、build.sbt ファイルで以下のように設定します:

lazy val nonEnhancedProject = (project in file("non-enhanced"))
  .disablePlugins(PlayEnhancer)

例えば、事前にバイトコード拡張による getter と setter の生成が保証されていることを要求する Play の ebean プラグインを使っているときのように、いくつかの状況ではエンハンサプラグインを無効にすることができないかもしれません。このような状況で getter と setter を生成したくない場合は、playEnhancerEnabled 設定を使うことができます:

playEnhancerEnabled := false

§操作

エンハンサは、以下に該当する Java クラスの全フィールドを探します:

これらのフィールドについて、もし getter と setter が既に存在していなければ、エンハンサが生成します。フィールドに対して特別な getter または setter を提供したい場合、ただ実装しておけば、Play エンハンサは既に存在している getter または setter の生成を単にスキップします。

§設定

バイトコード拡張されるファイルを正確にコントロールしたい場合は、playEnhancerGenerateAccessorsplayEnhancerRewriteAccessors タスクに souces タスクスコープを設定することができます。例えば models パッケージ内の java ソースだけ拡張する場合は、以下のようになるでしょう:

sources in (Compile, playEnhancerGenerateAccessors) := {
  ((javaSource in Compile).value / "models" ** "*.java").get
}

Next: リバースルートの統合


このドキュメントの翻訳は Play チームによってメンテナンスされているものではありません。 間違いを見つけた場合、このページのソースコードを ここ で確認することができます。 ドキュメントガイドライン を読んで、お気軽にプルリクエストを送ってください。