現時点では、Google App Engineでサポートされているプログラム言語は、PhythonとJavaの2つです。
Javaがサポートされたことにより、Java VM上にPHPやRubyを動かすことが出来ます。
今年の1月中旬に下記を参考にGAEでPhythonを使って「Hello World!」を表示して放置したままでした。
Google App Engineを使って無料でサイトを立ち上げる方法
http://techblog.ecstudio.jp/tech-tips/freewebsite-with-google-app-engine.html
http://www.egashira.jp/#2011/06/first-step-gae
私は認証用の携帯キャリアとしてSoftbankを選択しました。普通の携帯番号ではアカウントコードが送付されてこなかったのですが、+81で頭0を省いた携帯番号(例 +8190xxxxxxxx)にしたらアカウントコードが届きました。
さくらのレンタルサーバー上でPHPを使用していたこともあり、GAE上でPHPが動くなら試しに動かしてみようと気軽な気持ちで「GAE PHP」の検索キーワードでヒットしたサイトを参考にしたのですが、まとに動作するまでにかなりか苦労してしまいました。
苦労した原因としては、出来るだけ最新版を導入しようとしたことと、自分の知識不足です。
■導入した現時点の最新版 OS:Windows7
・Eclipse 3.7.0 Indigo Java Full All in One (JRE あり) http://mergedoc.sourceforge.jp/
・Google Plugin for Eclipse 3.7 http://d.hatena.ne.jp/mitaina/20101021/1287658939
(記事中の3.6→3.7に変更、PHP4Gはインストールしない)
更新83%あたりで、feature.jar 1.4.0 アーティファクト・ファイルが見つかりませんでした。とエラーになり進まなくなるが、Eclipseを再インストールすることで解決した。
・Google App Engine SDK for Java 1.5.3 http://code.google.com/intl/ja/appengine/downloads.html
Google Plugin for Eclipse 3.7のSDKは、1.5.2である。Pluginは必ずしも最新版が入っているわけでない。
自分は、C:\GAEフォルダに展開しました。(SDK1.5.2は、eclipse\plugins\com.google.appengine.eclipse.sdkbundle配下にある。)
・Quercus 4.0.18 http://quercus.caucho.com/ (Quercusは、クエルクスと読むらしい)
Quercus 4.0.1までは、Jetty 6.1.17 のjetty-6.1.17.jar,jetty-util-6.1.17.jar の2つがないとデプロイする時に、'org.mortbay.util.ajax.Continuation' is not a known Java class となる。
Quercus 4.0.3以降からは、Jetty 6.1.17 が無くても動作する。但し、このバージョンからresin.jarのファイルサイズが10MByteを超えるため、デプロイするのにツールのボタンではなく、コマンドライン方式となってしまう。
一番簡単に動かす場合、バージョンを気にしないなら、Quercus 3.1.6とJetty 6.1.17の組み合わせがいいよ。
http://blog-funnel.com/archives/3138
http://blog.daisukeyamashita.com/blog-files/Google%20App%20Engine%20Hackathon%202009-07-24.pdf
※拡張子 war について
Jarファイルの存在は知っていたのですが、warファイルは今回初めて知りました。そのくらいJava関連から遠ざかっています。
中身はzipファイルなので、quercus-4.0.18.warをquercus-4.0.18.zipに拡張子を変更すれば、エクスプローラで展開することが出来ます。
jarとwarの違い http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=5053&forum=12
■環境設定について
普通にインストールすると、Google Plugin for Eclipse 3.7のSDKは、1.5.2であるため、SDKのデフォルトを1.5.3にします。
何かしらのプロジェクト作成後に、App Engin SDKのプロパティを開いて、SDKの構成でSDK for Java 1.5.3を追加してデフォルトにします。
そのままだと、libの中身は、1.5.2のままのため、プロジェクトを再作成します。
JREシステムライブラリーは、jre1.5ではコンパイルエラーとなるため、プロパティで代替JREを jre1.6に変更します。
■設定ファイル(web.xml)について
PHPを動作出来るようになり、echo "Hello World!" は表示できたため、echo "あいうえお"って変更してみると、表示が"BDFHJ"となってしまいました。これは文字コードが怪しいと思い設定ファイルはUTF-8に統一したのですが解決しませんでした。
そもそも、"BDFHJ"になる文字コードって何だって感じで、ネットで調べても既に見たサイトばかりで、もうあきらめようとしたときに「Quercus 4.0 日本語」の検索でひっかかったサイト「TomcatやGlassfishでWordPressが動く~Quercusを試す - inoccu blog」で既に記事は削除されているため、キャッシュから引用すると「web.xmlには、サーブレットのinit-paramとして、script-encodingがUTF-8だといういかにもそれっぽい記述があったりする。当然、今回作成するweb.xmlにも書きたくなるわけだが、これを書くと日本語は文字化けする。私は、ここで何時間もはまってしまったのだが、正しい答えはscript-encodingに関しては何も書かないことだ。何も書かなければ文字化けしない。」
<init-param>
<param-name>script-encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
設定のUTF-8の行を削除したら、日本語が文字化けしないようになりました。
■デプロイについて
ローカル上で動作するようになったので、デプロイしてみようとすると下記のエラーが発生してしまう。
Unable to update app: Found a jar file too large to upload:
\WEB-INF\lib\resin.jar". Consider using --enable_jar_splitting
これは、GAEでデプロイできるファイルの最大サイズは10Mまでとなっていて、resin.jarは10MByteを超えているためです。
最初、「--enable_jar_splitting」が何のことか分かりませんでしたが、調べるとアップロード時に自動的にjarファイルを分割してくれるオプションであることが分かりました。どうやら、コマンドライン方式によるデプロイにしないとこのオプションを使えないのです。
環境変数に「GAE-SDK」にC:\GAE\appengine-java-sdk-1.5.3\bin を設定します。
また、環境変数PATHにコマンドライン上でもJavaが動作するようにjava.exe が存在するディレクトリの絶対パスを設定します。
デプロイするコマンドは、appcfg.cmd (Windows)または appcfg.sh (Mac OS X、Linux)となります。
例 C:\Users\OWNER>%GAE-SDK%\appcfg.cmd --enable_jar_splitting update デプロイするwarフォルダ
http://code.google.com/intl/ja/appengine/docs/java/gettingstarted/uploading.html
http://d.hatena.ne.jp/imaiworks/20090817/1250507473
画像付きの説明は他サイトにまかせ、文章ばかりで分かりにくいと思いますが、自分が苦労して解決できたことを書きました。
今後、導入する方の助けになれば幸いです。次はプログラム編につづきます。