Javaの軽量WebフレームワークPlay。EclipseやGoogle App Engineとの相性もだいぶこなれ、インストールやデプロイもかなり容易になってきました。Eclipseの環境を整えてPlayアプリをGoogle App Engineにデプロイするまでの最短の手順を説明します。
検証環境
検証に使ったのはPlay 1.2.4です。GAEモジュールはPlay 2.0に対応していないので、残念ながら2.0系ではまだGAEを使うことはできないようです。
Java SE 7u1
Java EE 6
Eclipse 3.7.1+Pleiades 1.3.3
Play 1.2.4
Google App Engine SDK 1.6.3.1
Play GAEモジュール 1.6.0
目次
◆とりあえず手順だけ知りたい人はこちら◆JavaEE SDKがインストールされていない人はここから(※Java SEでは不足なので注意)
◆Eclipseがインストールされていない人はここから
◆Playがインストールされていない人はここから
◆Google App Engine SDKがインストールされていない人はここから
◆PlayのGAEモジュールがインストールされていない人はここから
◆PlayをEclipseで使いたい人はこちら
◆うまく行かないときはこちら
最短の手順だけ知りたい人向け
環境を整える
Java EE
ここからダウンロードPlay
ここからダウンロードGoogle App Engine SDK
ここからダウンロードPlay GAEモジュール
> play install gae
手順
1. アプリケーション作成を作成します。
> play new AppName
2. conf/dependencies.ymlを修正
require:という行を追加します。
- play -> gae 1.6.0
3. 依存関係の構成
> play deps
4. Eclipseプロジェクト化し、Eclipseに取り込みます。この手順はやらなくてもかまいません。
> play eclipsify AppName
5. 一度Playを実行します。
※Eclipse上から同等の操作(Playのローカルサーバ実行)をおこなっても、マニフェストファイル(war/WEB-INF/appengine-web.xml)がどういうわけだか作成されません。コマンドラインから実行しましょう。> play run
> Ctrl+C
6. マニフェストファイルを修正します。
一回実行すると、war/WEB-INF/appengine-web.xmlというファイルが作成されます。このファイルを次のように修正します。
<appengine-web-app xmlns="http://appengine.google.com/ns/1.0">
<application>yourappname</application>
<version>1</version>
<threadsafe>true</threadsafe>
</appengine-web-app>
<application>に指定するのは、Google App EngineのApplication Identifierです。
管理コンソール https://appengine.google.com/ にアクセスし、アプリケーション名をクリックします。左上にApplication Identifierが表示されています。
7. GAEにデプロイ
> play gae:deploy --gae=c:\Develop\Java\appengine-java-sdk-1.6.3.1
--gaeオプションは、Google App Engine SDKを展開した場所を指定します。毎回指定するのは面倒な場合は、環境変数をセットしておくこともできます。
GAE_PATHという環境変数にGoogle App Engine SDKのパスを指定しておくと、--gaeオプションが不要になります。
Java EE SDKをインストール
[前提条件]
特になし
Google App Engineを使うには、Java SEだけではなくJavaEEが必要です。Playを使うだけならJavaEEは不要です。
Oracleのサイトから最新のJavaEE SDKをインストールします。
ここでの注意は、Java SEとJavaEE SDKとは別のもので、Java SEとJavaEE SDKの両方をインストールしなければいけない点です。(しかも、Java SEのバージョンは7なのにJavaEE SDKのバージョンは6というややこしさ)
ダウンロードページはここ↓
http://www.oracle.com/technetwork/jp/java/javaee/downloads/index.html
もしJava環境がいっさい入っていない場合は、左端の「Java EE6 SDK with JDK 7」を選びます。
Java SEはすでにインストールされている人は、真ん中の「Java EE 6 SDK」を選びます。
Eclipseをインストール
[前提条件]
JavaEE SDKがインストールされていること
Eclipseをダウンロードします。Eclipseも非常にたくさんのパッケージがありますが、今回のケースで必要なのは、「Eclipse IDE for Java EE Developers」というパッケージです。
Eclipse IDE for Java EE Developersのダウンロードページはこちらです。
http://eclipse.org/downloads/
ダウンロードしたらインストーラでインストールします。Java SDKの場所などはインストーラが見つけ出してくれます。
日本語化を含めたインストール・設定の手順は以下のページが詳しいです。
http://www.kkaneko.com/rinkou/javaintro/eclipse.html
Playをインストール
[前提条件]
Java EE SDKがインストールされていること
Eclipseがインストールされていること
ダウンロードはこちら↓
http://www.playframework.org/
Play 2.0がリリースされてしまったので、Playのサイトは2.0一色です。1.x系のバージョンをダウンロードするには、"all versions"というリンクからたどる必要があります。
しかしインストールは簡単です。ダウンロードしたら展開するだけで、インストール作業などは要りません。
それから、インストールフォルダの直下にパスを通しておきましょう。
Google App Engine SDKをインストール
[前提条件]
Java EE SDKがインストールされていること
Eclipseがインストールされていること
ダウンロードはこちらから↓
https://developers.google.com/appengine/downloads?hl=ja#Google_App_Engine_SDK_for_Java
Playと同様、ダウンロードしたら展開するだけです。
PlayのGAEモジュールをインストール
[前提条件]
Java EE SDKがインストールされていること
Eclipseがインストールされていること
Playがインストールされていること
手動でダウンロードする必要はありません。playコマンドを使ってインストールができます。
> play install gae
これでGAEモジュールをダウンロードして、モジュールとしてインストールしてくれます。最新バージョンも判断してくれます。
Eclipseを使ったPlayアプリケーション開発
play eclipsifyコマンド
Playには、Eclipseでの利用を前提としたeclipsifyというコマンドがあります。生成したアプリケーションディレクトリに移動して次のコマンドを実行します。
> play eclipsify
これでEclipseのプロジェクトが作成されました。
Eclipseのワークスペースに読み込むには次のようにします。
- メニューから「ファイル」>「インポート」を選択
- 「一般」>「既存プロジェクトをワークスペースへ」を選択
- アプリケーションディレクトリを選択し、「完了」をクリック
Eclipse Playプラグイン
Play用Eclipseプラグインは、Playの配布物の中に含まれています。${play.path}\support\eclipse\org.playframework.playclipse_0.7.0.jar
というファイルです。これを
${eclipse.path}\dropins
というディレクトリにコピーして、Eclipseを再起動するだけです。
メニューに「再生!」という項目が表示されれば、インストールは成功しています。それにしても「再生!」ってアンタ。
実行とデバッグ
1. Playサーバを実行
まず、ローカルマシンでPlayサーバを実行します。eclipse/AppName.launcheというファイルがありますので、右クリックして「実行」>「AppName」を選択します。
コンソールに
Listening for transport dt_socket at address: 8000
20:31:09,440 INFO ~ Starting D:\Projects\eclipse\workspace\AppName
20:31:09,448 INFO ~ Module gae is available (D:\Develop\Java\play-1.2.4\modules\gae-1.6.0)
20:31:10,548 WARN ~ You're running Play! in DEV mode
20:31:10,725 INFO ~ Listening for HTTP on port 9000 (Waiting a first request to start) ...
と表示されれば起動できています。試しにブラウザに
http://localhost:9000/
と入力して、ページが表示されることを確認しておきましょう。
2.デバッガを接続
JPDA(Java Platform Debug Architecture)を使って、Playサーバにデバッグ接続します。eclipse/Connect JPDA to AppName.launchというファイルを右クリックし、「デバッグ」>「AppName」を選択します。
表面的には特に何も起きませんが、これでデバッガがPlayサーバに接続しています。
試しに、Application#index()メソッドのrender()行にブレークポイントを設定して、もう一度
http://localhost:9000/
にアクセスしてみましょう。すると、下の図のようにブレークして止まってくれます。
うまく行かないときは
慣れてしまえば異様に簡単な手順なのですが、慣れるまではこまごました作業を見落としがちです。うまくいかないときは、たいてい何かの作業を忘れています。
最後に、こうした忘れがちな作業をまとめておきます。
●gae:deployに--gaeオプションを指定しましたか?
●環境変数GAE_PATHを設定しましたか?
●dependencies.ymlに依存関係を記述しましたか?
●play depsを実行しましたか?
●appengine-web.xmlにApplication Identifierを記述しましたか?
変なエラーが出た
僕の環境はDドライブにEclipseのワークスペースを置いてあるのですが、デプロイ(play gae:deploy)の実行時に次のような変てこなエラーが出ました。Traceback (most recent call last): File "D:\Develop\Java\play-1.2.4\play", line 153, instatus = cmdloader.commands[play_command].execute(command=play_command, app=play_app, args=remaining_args, env=play_env, cmdloader=cmdloader) File "D:\Develop\Java\play-1.2.4\modules\gae-1.6.0\commands.py", line 222, in execute package_as_gae_war(app, env, war_path, None) File "D:\Develop\Java\play-1.2.4\modules\gae-1.6.0\commands.py", line 54, in package_as_gae_war if isParentOf(app.path, war_path): File "D:\Develop\Java\play-1.2.4\framework\pym\play\utils.py", line 38, in isParentOf relpath = os.path.relpath(path1, path2) File "D:\Develop\Java\play-1.2.4\python\lib\ntpath.py", line 488, in relpath % (path_list[0], start_list[0])) ValueError: path is on drive D:, start on drive c:
これは、次のようにntpath.pyというファイルの以下の箇所を書き換えれば回避できます。書き換えることによる影響はありません。
${play.path}\python\lib\ntpath.py:
484: else:
485: raise ValueError("path is on drive %s, start on drive %s"
486: % (path_list[0], start_list[0]))
↓以下のようにコメントアウトする
484: #else:
485: # raise ValueError("path is on drive %s, start on drive %s"
486: # % (path_list[0], start_list[0]))
0 コメント:
コメントを投稿