Play framework 2.0 betaが出たようです10 – Pluginをつくってみる
Pluginをつくる
Play framework2.0では標準でCachePluginやGlobalPlugin等を持っていますが、独自のプラグインを作成することも簡単にできます。 これによって任意のタイミングで様々な処理行うことが可能です。 それでは試してみましょう。
今回使用した動作環境は以下のとおりです。
- OS : MacOS X 10.7.2
- Playframework : HEAD
- Java : 1.6.0_26
- Eclipse : 3.7
注意: この記事ではgithubから取得したHEAD版を使用して試しています。 正式リリース前の状況のため思わぬ不具合が生じるかもしれませんので、ご了承ください。
ソースのHEADを取得してセットアップ
まだgithubからソースを取得していない人は、play2.0のソースを取得してビルドしましょう。
$ git clone https://github.com/playframework/Play20.git $ cd Play20/framework $ ./build > complile > build-repository > publish-local
すでにソースを取得している人は、最新の状態に更新してビルドします。
$ git pull $ cd Play20/framework $ ./build > compile > build-repository > publish-local
これで準備ができました。
プロジェクト作成
Scalaベースのプロジェクトを作成し、sbtコンソールを起動します。
% play new myPluginApp % cd myPluginApp % play
eclipsifyを実行してeclipseプロジェクト化してインポートしてソースの修正をしましょう。
>[myPluginApp] $ eclipsify
プラグインを追加する
プラグインの追加は簡単です。 まずはプラグインの本体である、MyPluginクラスを作成します。 MyPluginAppディレクトリ直下にpluginディレクトリを作成し、その中にMyPlugin.scalaファイルを作成しましょう。
package sample.plugin import play.api._ class MyPlugin(app: Application) extends Plugin { override lazy val enabled = { Logger.debug(app.configuration.toString()) true } override def onStart() { Logger.debug("MyPlugin#onStart") } override def onStop() { Logger.debug("MyPlugin#onStop") } }
プラグインとしてクラスを実装するには、下記条件を満たしていれば大丈夫です。
- play.api.Pluginを継承
- enabledメソッドをオーバーライド
- onStartメソッドをオーバーライド
- onStopメソッドをオーバーライド
コンストラクタでうけとっているappとは、アプリケーション自体を表すオブジェクトです。 このappを経由すれば、conf/application.confにアクセスすることも可能です。
最後にconfディレクトリに、play.pluginsという名前でファイルを作成します。 ここでプラグインの起動する優先順位とクラス名を記述します。
5000:sample.plugin.MyPlugin
アプリケーションを起動してブラウザでアクセスしてみてください。 アクセス時にはonStart、アプリケーション終了時にはonStopが実行されます。
>[myPluginApp] $ compile >[myPluginApp] $ run
まとめ
今回はプラグインを作成してみました。 とても簡単に作成できますし、利用頻度は多そうですね。
参考サイトなど
- Writing Plugins https://github.com/playframework/Play20/wiki/Scalaplugin