h1. Play モジュール

Play アプリケーションは、いくつかのアプリケーションモジュールから組み立てることができます。これにより、複数のアプリケーションをまたいでアプリケーションコンポーネントを再利用したり、大きなアプリケーションをいくつかの、より小さなアプリケーションに分割することが可能です。

h2. <a name="what">モジュールとは?</a>

モジュールは、ただの play アプリケーションです; しかし、アプリケーションモジュールのリソースがロードされる方法にいくつかの違いがあります:

* モジュールには @conf/application.conf@ ファイルがありません。
* モジュールは @conf/routes@ ファイルを持つことができますが、これらのルートは自動的にはロードされません。
* すべてのファイルは、まずメインのアプリケーションパスから検索され、その後、すべてのロードされたモジュールから検索されます。
* モジュールは module/lib ディレクトリ に JAR ファイルとしてパッケージされたピュア Java コードを含むことができます。
* モジュールはドキュメントを含むことができます。
* モジュールにおいて、すべてが任意です。

@play new-module@ コマンドでモジュールを作成することができます。

h2. <a name="loading">アプリケーションからモジュールをロードするには</a>

モジュールは、アプリケーションの @/modules@ ディレクトリから自動的にロードされます。"依存性管理システム":dependency を使って自動的にアプリケーションのモジュールを管理することができます。

h2. <a name="routes">モジュールからデフォルトルートをロードする</a>

モジュールはデフォルト @ルート@ ファイルを提供することができます。特別なルート宣言を使用することで、メインアプリケーションの @routes@ ファイルにこれをロードすることができます:

bc. # Import the default CRUD routes
GET     /admin	     module:crud

すべての利用可能なモジュールからルートをロードすることもできます:

bc. GET     /	     module:*

h2. <a name="documentation">モジュールにドキュメントを追加する</a>

モジュールに @documentation/manual/home.textile@ ファイルを追加するだけで、モジュールにドキュメントを追加することができます。 @${play.path}/documentation/manual/@ にある Play 自身のドキュメントと同じ Textile 文法を使ってください。

ドキュメントを持つひとつまたはそれ以上のモジュールを使って Play アプリケーションを実行している場合、 "http://localhost:9000/@documentation":http://localhost:9000/@documentation にあるローカルの Play ドキュメントは、サイドバーの *Installed Modules* の下にそれらドキュメントへのリンクを含みます。

h2. <a name="repository">モジュールリポジトリの使用</a>

"モジュールリポジトリ":https://www.playframework.com/modules は、コミュニティによって寄付されたすべてのモジュールを識別します。モジュールはいくつかのバージョンを持つことができます。使用するフレームワークのバージョンに必要なのはどのバージョンのモジュールなのか、モジュールのドキュメントをチェックする必要があります。

@play list-modules@ コマンドを使ってモジュールリポジトリを閲覧することもできます。

bc. gbo-mac:‾ guillaume$ play list-modules
‾        _            _ 
‾  _ __ | | __ _ _  _| |
‾ | '_ ¥| |/ _' | || |_|
‾ |  __/|_|¥____|¥__ (_)
‾ |_|            |__/   
‾
‾ play! 1.2, https://www.playframework.com
‾
‾ You can also browse this list online at https://www.playframework.com/modules
‾
‾ [bespin]
‾   Bespin online editor
‾   https://www.playframework.com/modules/bespin
‾   Versions: 1.0, 1.0.1
‾
‾ [cobertura]
‾   Cobertura
‾   https://www.playframework.com/modules/cobertura
‾   Versions: 1.0
...

@play install {module}-{version}@ コマンドを使ってローカルにモジュールをインストールすることができます。ローカルにモジュールをインストールすると、いくつかのアプリケーションがそれぞれ個別のコピーをインストールすることなく、このモジュールを使えるようになります。これは、アプリケーションの拡張というよりも、フレームワークを拡張するような大きなモジュールについて有効です。

例えば、フレームワークに Scala サポートをインストールする場合、以下を使います:

bc. play install scala-head

規約では、 @head@ バージョンのモジュールは不安定です。バージョン情報を省略することで、デフォルトバージョンのモジュールをインストールすることもできます。例えば、以下のようにします:

bc. play install scala

この方法の場合、モジュールはフレームワークをインストールした場所の @/modules@ ディレクトリにインストールされます。

@--path@ オプションを使ってこのインストールパスを変更することができます:

bc. play install gwt --path=my-project

h2. <a name="contributing">モジュールリポジトリに新しいモジュールを寄付する</a>

h3. <a name="prerequisites">前提条件</a>

新しいモジュールを登録するには、次のものが必要です。

# Google グループに投稿するための Google アカウント。
# 開発者ログインするための OpenID (このために Google アカウントを使用することができます) 。
# 正規表現 <code>[a-zA-Z]+</code> にマッチするモジュール名。
# モジュールは "ドキュメント":#documentation を含む必要があります。
# 例えば <a href="http://github.com/">GitHub</a>, <a href="http://code.google.com/">Google Code</a> または <a href="http://launchpad.net/">Launchpad</a> プロジェクトのような、ソースコードが利用できてバグを報告する方法を備えたモジュールのホームページ。

h3. <a name="register">モジュールの登録</a>

Google アカウントを OpenID として使用するためには、以下のようにしてその完全な URL を見つける必要があります。

# "https://www.playframework.com/modules":https://www.playframework.com/modules の _Developer login_ の下に @https://www.google.com/accounts/o8/id@ を入力し、 _Login_ ボタンをクリックします。
# Google アカウントにログインします。
# 例えば @https://www.google.com/accounts/o8/id?id=BItOawk7q69CFhRarQIo@ のように、 _Developer login_ の下の完全な Google OpenID URL をメモします。

"play-framework Google Group":https://groups.google.com/forum/#!forum/play-framework にモジュール登録リクエストを投稿します。例えば:

bc. Subject: Module registration request: {module name}
 
Module name:
jqueryui
 
Display name:
jQuery UI
 
Description:
Working examples of jQuery UI widgets, integrated with a Play application.
 
Project home page:
https://github.com/hilton/jqueryui-module
 
OpenID:
https://www.google.com/accounts/o8/id?id=BItOawk7q69CFhRarQIo

モジュールが登録されたら、リリースを公開することができます。


h3. <a name="release">モジュールのリリース</a>

モジュールをリリースするためには:

# 例えば @self: play -> jqueryui 1.0@ のように、 @conf/dependency.yml@ の最初の行にモジュールのバージョン番号を設定します
# @play build-module@ コマンドでモジュールをビルドします
# _Developer login_ の下から "https://www.playframework.com/modules":https://www.playframework.com/modules にログインします
# "https://www.playframework.com/modules/developers":https://www.playframework.com/modules/developers の _Your modules_ の下にあるリンクからあなたのモジュールのページを閲覧します
# _Manage module releases_ の下にあるフォームを使って、あなたのモジュールの @dist/@　ディレクトリから生成した ZIP ファイルをアップロードします

もちろん、ヘルプを提供したり情報を共有するために公式の Google Group を使用することができます。


p(note). **考察を続けます**
 
%(next)"依存性管理":dependency% を使ってモジュールを効率的に管理する方法を学びましょう。