Play2のプラグインは、Play2アプリを作るときと同じように簡単に作成できます。プロジェクト自体をプラグインのプロジェクトとして作成することもできますし、既存のプロジェクトにプラグインのクラスを実装して組み込むこともできます。
後者の場合、play.api.Pluginクラスを継承して、そのクラスをplay.pluginsファイルに記述するだけです。しかし、これでは汎用性がないので、プラグイン用プロジェクトを作成して、別プロジェクトから使ってみましょう。
プラグイン用プロジェクトといっても、通常のPlay2プロジェクトと大きな違いはありません。普段と同じく、play newコマンドでプロジェクトを作成します。
$ play new myModule $ cd myModule $ play ・ ・ ・ [myModule] $ eclipse with-source=true
この状態では通常のプロジェクトと何も変わりありません。このサンプルプラグインでは、Controllerやビューは必要ないので、publicディレクトリ以下のファイル、app/views以下のファイル、Application.scalaを削除しましょう。また、conf/application.confも削除します。
次に、プラグインとして動作するクラスを実装します。appディレクトリにpluginsディレクトリを作成し、そこにMyPlugin.scalaファイルを下記のように作成しましょう。
package plugins import play.api._ class MyPlugin(app: Application) extends Plugin { val name = "My plugin" override def onStart() { Logger.debug("--- " + name + " start!") } override def onStop() { Logger.debug("--- " + name + " stop!") } }
Pluginクラスを継承してonStartとonStopを実装しています。メッセージをコンソールに出力するだけのシンプルなものです。プラグインクラスを実装したら、このプラグイン自体の設定を行うためにproject/Build.scalaを記述します。
import sbt._ import Keys._ import play.Project._ object ApplicationBuild extends Build { val appName = "モジュール名" val appVersion = "1.0-SNAPSHOT" val appDependencies = Seq() val main = play.Project(appName, appVersion, appDependencies). settings( publishTo := Some(Resolver.file("Our repository", new File("モジュールをpublishするパス"))), organization := "組織名") }
ここでは「プラグインを使う側のBuild.scala」で指定するモジュール名やバージョン名を記述します。また、publishToではローカルにpublishするためのパスを指定します。
ここまでできたらplayコンソールを起動し、プラグインプロジェクトをpublishします。
$ play ・ ・ ・ [myModule] $ publish
Build.scalaで指定したパスを確認してみてください。プラグインプロジェクトがpublishされています。
では既存プロジェクトに先ほどpublishしたプラグインをインストールして使ってみましょう。gyroプロジェクトのproject/Build.scalaファイルに下記のような記述を追加します。
・ ・ ・ val appDependencies = Seq( ・ ・ "組織名" %% "モジュール名" % "1.0-SNAPSHOT" ) val main = play.Project(appName, appVersion, appDependencies).settings( ・ ・ resolvers += "My Module Repository" at "file://{プラグインをpublishしたパス}" ) ・ ・ ・
appDependenciesにプラグインを追加し、resolversにローカルリポジトリのパスを記述します。
$ play ・ ・ ・ [gyro] dependencies
playコンソールでdependenciesコマンドを実行し、自作プラグインをインストールします。インストールができたら「conf」ディレクトリの「play.plugins」(なければ作成)に次のような記述をして、アプリを起動してみましょう。
1000:plugins.MyPlugin
アプリにアクセスすると、MyPluginのonStartが実行されてコンソールにメッセージが出力されているのが分かります。
なお、今回はローカルにpublishしましたが、特にWeb上に公開したい場合は、GitHubやMaven Central Repositoryを使うことが多いようです。
プラグインを作成する際には、こちらの公式ドキュメントもご確認ください。
さて、2012年10月から開始したこの連載も今回が最後となりました。連載開始当初は2.0だったPlay2も、何度かのバージョンアップを重ね、現在はバージョン2.2となっています。
最近はPlay2の日本語書籍も発売され、より身近になったのではないでしょうか。なお、開発も以前と変わらず進んでおり、バージョン2.3は2014年第1四半期にリリース予定です。
ここまで本連載にお付き合いいただき、ありがとうございました。
中村修太(なかむら しゅうた)
クラスメソッド勤務の新しもの好きプログラマです。昨年、東京から山口県に引っ越し、現在はノマドワーカーとして働いています。好きなJazzを聴きながらプログラミングするのが大好きです。
Copyright © ITmedia, Inc. All Rights Reserved.