この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。
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