Play2プラグインのインストールと使用と新規開発:Scala+Play 2.0でWebアプリ開発入門(終)(3/3 ページ)
2.0からScalaに対応したWebアプリ開発の人気軽量フレームワーク「Play framework」について解説し、Webアプリの作り方を紹介する入門連載。最終回は、Playを使ったアプリケーションを拡張させる仕組み、プラグインの使い方および開発方法を紹介します。
Play2プラグインを新規で開発する
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を使うことが多いようです。
プラグインを作成する際には、こちらの公式ドキュメントもご確認ください。
- http://www.playframework-ja.org/documentation/2.1.5/Modules
- http://www.playframework.com/documentation/2.2.x/ScalaPlugins
もうすぐ Play 2.3がリリース
さて、2012年10月から開始したこの連載も今回が最後となりました。連載開始当初は2.0だったPlay2も、何度かのバージョンアップを重ね、現在はバージョン2.2となっています。
最近はPlay2の日本語書籍も発売され、より身近になったのではないでしょうか。なお、開発も以前と変わらず進んでおり、バージョン2.3は2014年第1四半期にリリース予定です。
ここまで本連載にお付き合いいただき、ありがとうございました。
- Play2プラグインのインストールと使用と新規開発
- Play2+nginx/Akka/WebSocketで高速双方向通信
- Play2(+JavaScript)アプリを高速化、最適化する4つのテクニック
- Play2におけるJSONおよびCoffeeScriptの使い方
- Playのグローバルな設定&spec2でBDDなテスト
- Play 2.xからMySQLに接続してAnormでCRUD操作するには
- Play 2.xのScala Templatesでビュー&フォーム操作
- Play 2.1にアップグレードしてコントローラを使いこなす
- Playコントローラ/Action/HTTP Routerの基本的な使い方
- 便利なPlayコンソールとEclipseでのデバッグ方法
- Play 2.0のアーキテクチャとディレクトリ構成の基礎知識
- Play framework 2.0の概要/5つの特徴とScalaで作るための環境構築
著者プロフィール
中村修太(なかむら しゅうた)
クラスメソッド勤務の新しもの好きプログラマです。昨年、東京から山口県に引っ越し、現在はノマドワーカーとして働いています。好きなJazzを聴きながらプログラミングするのが大好きです。
Copyright © ITmedia, Inc. All Rights Reserved.
関連記事
- スケーラブルで関数型でオブジェクト指向なScala入門
Scalaの特徴を紹介し、基本構文や関数、クラスなど、Scalaの基本的な機能について解説する入門連載 - Javaの常識を変えるPlay framework入門
サーブレット/JSPを基にする重厚長大なJavaのWeb開発のイメージを変える軽量フレームワーク「Play」について解説し、Webアプリの作り方を紹介する入門連載