Play framework 2.0 での自作プラグイン - Scala版
Play framework 2.0 における基本的なプラグインの作成方法をご紹介します。
ちなみに Play framework 2.0 は Java・Scala 用の Web アプリケーションフレームワークで、JPA・Akka・EhCache 等の機能をプラグインとして実装しています。
ソースは http://github.com/fits/try_samples/tree/master/blog/20120324/
事前準備
まずは、Play framework 2.0 の実行環境を用意します。
ダウンロードサイト からアーカイブをダウンロード、適当なディレクトリに解凍し、環境変数 PATH にパスを設定するだけです。
次に、自作プラグインを試すためのアプリケーションを用意します。
今回は Scala アプリケーションを用意しました。
アプリケーション作成例
> play new sampleApp ・・・ Which template do you want to use for this new application? 1 - Create a simple Scala application 2 - Create a simple Java application 3 - Create an empty project > 1 OK, application sampleApp is created. ・・・
プラグイン作成
プラグインは以下のようにして作成します。
Java の場合は play.Plugin クラスを extends して、コンストラクタの第一引数で play.Application を指定するようにします。*1
それでは、start と stop 時にログを標準出力するだけの単純なプラグイン SamplePlugin を作成してみます。
app/plugins/SamplePlugin.scala
package plugins import play.api._ class SamplePlugin(app: Application) extends Plugin { val name = "sample plugin" override def onStart() { println("--- " + name + " start") } override def onStop() { println("--- " + name + " stop") } }
プラグインを使うための設定
プラグインを使用するには conf/play.plugins ファイルを用意して、"<優先度>:<プラグインクラス>" というエントリを追加します。
SamplePlugin を使用するための設定は以下のようになります。(優先度は適当に付けました)
conf/play.plugins
450:plugins.SamplePlugin
動作確認
プラグインの動作確認を行うには、play コンソールから run を実行してアプリケーションを起動します。
アプリケーション起動
> cd sampleApp > play ・・・ [sampleApp] $ run ・・・ [info] play - Listening for HTTP on port 9000... ・・・
この状態ではまだプラグインは実行されていないため (初回起動時であればコンパイルも未実施)、http://localhost:9000/ にアクセスしてみます。
そうすると、以下のように SamplePlugin が開始されます。
SamplePlugin 開始ログ
[info] Compiling 6 Scala sources and 1 Java source・・・ --- sample plugin start [info] play - Application started (Dev)
プラグインの利用
プラグインは play.api.Application の plugin メソッドで取得できます。(play.api.Application のインスタンスは play.api.Play の current で取得できます)
それでは、Application コントローラーに手を加えて SamplePlugin の name 値を取得し表示するようにしてみます。
app/controllers/Application.scala
package controllers import play.api._ import play.api.mvc._ object Application extends Controller { def index = Action { //プラグイン名取得 val samplePluginName = Play.current.plugin[plugins.SamplePlugin].map(_.name).getOrElse("nothing") Ok(views.html.index("plugin: " + samplePluginName)) } }
アプリケーション実行中 (run) であれば、上記の変更を行った後で http://localhost:9000/ に再度アクセスしてみると、以下のように SamplePlugin が再実行され、画面にプラグイン名が表示されます。
SamplePlugin 再実行ログ
[info] Compiling 1 Scala source to ・・・ --- (RELOAD) --- --- sample plugin stop --- sample plugin start [info] play - Application started (Dev)
最後に、Ctrl + D でアプリケーションを終了すると SamplePlugin の終了ログが出力されます。
アプリケーション終了時のログ
[info] play - Application started (Dev) --- sample plugin stop