Play モジュール
Play アプリケーションは、いくつかのアプリケーションモジュールから組み立てることができます。これにより、複数のアプリケーションをまたいでアプリケーションコンポーネントを再利用したり、大きなアプリケーションをいくつかの、より小さなアプリケーションに分割することが可能です。
モジュールとは?
モジュールは、ただの play アプリケーションです; しかし、アプリケーションモジュールのリソースがロードされる方法にいくつかの違いがあります:
- モジュールには conf/application.conf ファイルがありません。
- モジュールは conf/routes ファイルを持つことができますが、これらのルートは自動的にはロードされません。
- すべてのファイルは、まずメインのアプリケーションパスから検索され、その後、すべてのロードされたモジュールから検索されます。
- モジュールは module/lib ディレクトリ に JAR ファイルとしてパッケージされたピュア Java コードを含むことができます。
- モジュールにおいて、すべてが任意です。
play new-module コマンドでモジュールを作成することができます。
アプリケーションからモジュールをロードするには
デフォルトのモジュールインストール先は $PLAY_HOME/modules ディレクトリです。この方法では、フレームワークで実行されるすべてのアプリケーションからすべてのモジュールが自動的に利用可能となります。
アプリケーションから外部のモジュールをロードしたい場合は、アプリケーション中の application.conf ファイルに外部のモジュールを宣言するだけです。
# Additional modules
# ~~~~~
# A module is another Play application. Add a line for each module you want
# to add to your application. Module paths are either absolute or relative to
# the application root.
#
module.crud=${play.path}/modules/crud
アプリケーションに必要なすべてのモジュールを含むスタンドアロンプロジェクトを作成することもできます。必要なのは、アプリケーションと同じディレクトリにすべてのモジュールをコピーすることだけです。
CMS コンポーネント、フォーラムコンポーネント、ディレクトリコンポーネントと GWT モジュールを使用する大きなアプリケーションがあるとしましょう。このプロジェクトは次のレイアウトを使うことで作成できます:
/my-project
/cms
/forum
/directory
/gwt
/main
main は (play new コマンドを使って作った) メインアプリケーションのディレクトリで、 gwt にはモジュールリポジトリからインストールされたモジュールがあり、そして、 cms 、 forum 、および directroy は、 play new-module コマンドを使って作られたモジュールです。
メインアプリケーションの設定ファイル (my-project/main/conf/application.conf) において、以下を使用するこれらのモジュールをロードできます:
# Additional modules
# ~~~~~
mdoule.gwt=../gwt
module.cms=../cms
module.forum=../forum
module.directory=../directory
(play run my-project/main を使って) メインアプリケーションを実行したとき、これらのモジュールはメモリにロードされ、より大きなアプリケーションとなります。
モジュールパスが相対パスである場合、メインアプリケーションのルートから解決されます。
モジュールからデフォルトルートをロードする
モジュールはデフォルトルートファイルを提供することができます。特別なルート宣言を使用することで、メインアプリケーションの routes ファイルにこれをロードすることができます:
# Import the default CRUD routes
GET /admin module:crud
すべての利用可能なモジュールからルートをロードすることもできます:
GET / module:*
モジュールリポジトリの使用
モジュールリポジトリ は、コミュニティによって寄付されたすべてのモジュールを識別します。モジュールはいくつかのバージョンを持つことができます。使用するフレームワークのバージョンに必要なのはどのバージョンのモジュールなのか、モジュールのドキュメントをチェックする必要があります。
play list-modules コマンドを使ってモジュールリポジトリを閲覧することもできます。
gbo-mac:~ guillaume$ play11 list-modules
~ _ _
~ _ __ | | __ _ _ _| |
~ | '_ \| |/ _' | || |_|
~ | __/|_|\____|\__ (_)
~ |_| |__/
~
~ play! 1.1-unstable-r761, http://www.playframework.org
~
~ You can also browse this list online at http://www.playframework.org/modules
~
~ [bespin]
~ Bespin online editor
~ http://www.playframework.org/modules/bespin
~ Versions: 1.0, 1.0.1
~
~ [cobertura]
~ Cobertura
~ http://www.playframework.org/modules/cobertura
~ Versions: 1.0
...
play install {module}-{version} コマンドを使ってモジュールをインストールできます。例えば、Scala サポートをフレームワークにインストールするには、以下を使います:
play install scala-head
規約では、 head バージョンのモジュールは不安定です。バージョン情報を省略することで、デフォルトバージョンのモジュールをインストールすることもできます。例えば、以下のようにします:
play install scala
この方法では、モジュールはフレームワークをインストールした先の /modules ディレクトリにダウンロードされます。 --path オプションを使用してインストールパスを変更することができます:
play install gwt --path=my-project
モジュールリポジトリに新しいモジュールを寄付する
まず最初に、OpenID が必要です。OpenID は、あなたをモジュールの作者として認証する手助けになります。その後、Google Group でモジュール登録のリクエストを送ってください。
以下を連絡してください:
- モジュールに関する詳しい情報。どのようなモジュールですか?
- モジュールの名前。[a-zA-Z]+ の正規表現にマッチしなければなりません。
- モジュールの短い概要
- プロジェクトホームページ
- OpenID
- モジュールは、ソースコードが利用可能で、かつバグを報告できるどこかで管理されていなければなりません。適当な場所を知らないのであれば、github、Google Code、または launchpad が良い選択肢です。
モジュールをリリースするには、単に play build-module コマンドを使用してください。そして、モジュールリポジトリに接続して、生成されたパッケージをアップロードしてください。
もちろん、ヘルプを提供したり情報を共有するために公式の Google Group を使用することができます。