JavaによるGoogle App Engineクラウドプログラム開発

Google App EngineでJavaが使用可能に

米Googleは2009年4月7日(米国時間⁠⁠、PaaS(プラットフォーム・アズ・ア・サービス)型クラウドコンピューティング環境のGoogle App Engine(以下GAE)で、これまでのPythonに加えてJavaに対応(以下GAE for Java)したことを明らかにしました。開発者や利用実績が多いJavaに対応することで、GAEのユーザ数が一気に増えることも考えられます。

図1 Google App EngineサイトでのJava対応アナウンス
図1 Google App EngineサイトでのJava対応アナウンス

Java対応GAEの機能の概要

GAEのクラウド環境はJava 6で稼働しますが、プログラム作成はJava 5およびJava 6のどちらでも可能とされています。プログラムはJava Servletでの作成が基本ですが、他にJSPやServletから呼び出されるJavaBeansを使用することもできます。

またやや余談ですがGAE for JavaのJVMはJavaバイトコードを実行するので、Java以外でもバイトコードを生成するコンパイラさえあれば、どんな言語でも実行できるようになるわけで、たとえばJRuby、GroovyやScalaなども動作可能なはずです。

Javaのプログラム作成はコマンドラインから行うことも可能ですが、Eclipseのプラグイン(Google Plugin for Eclipse)がEclipse 3.3およびEclipse 3.4用に用意されており、プラグインの利用で、プログラムの作成・デバッグからクラウド環境へのデプロイまでを、すべてEclipse環境内で行うことができます。

また、GAEのJava対応版では以下のような機能がサポートされています。

  • JDO(Java Data Object)標準インターフェースによる、APP Engineデータストアに対するアクセス
  • Googleアカウントによる、APP Engineアプリケーション使用時のユーザ認証
  • Memcache、URL Fetch、Mail、ImagesなどPyhton版と同等の機能

この他、UNIXなどでおなじみの日時指定スケジュールジョブ実行ツールcronのサポート、データベースインポートツール、GAEからファイアウォール内データにセキュアアクセスを可能にするSecure Data Connectorのサポートなど、情報システム部門向けのツールも追加されています。

Java用アカウントの所得

それではさっそくGAEでのJavaプログラム作成とデプロイ手順を見ていきますが、今回のアナウンスは「Early Look at」になっており、ユーザは先着10,000人に限定され、最初にGAEのホームページからキーを所得する必要があります。

図2 キー取得のためのサインアップ
図2 キー取得のためのサインアップ

筆者の場合はサインアプからキーリクエストを行ってから1日半くらいたって図3のようなメールが届き、Java版の利用が可能になっています。

図3 Java版使用許諾メッセージ
図3 Java版使用許諾メッセージ

JavaSE開発キット(SDK)とEclipseのインストール

使用許諾メールが届いたら、最初にJavaのSDKとEclipseをインストールします。ここまでは揃っている人も多いと思いますが、もしまだの場合は、それぞれ下記のようにダウンロードとインストールを行ってください。

JavaのSDKのインストール

図4 Sun Developer Networkのホームページ(Java SDKダウンロード)
図4 Sun Developer Networkのホームページ(Java SDKダウンロード)
URL:http://java.sun.com/javase/downloads/index.jsp

Javaのインストール後、コマンドプロンプトから次のコマンドでJavaのバージョンを確認します図5⁠。バージョンが1.6.xまたは1.5.xであれば、GAEforJavaの使用が可能です。

図5 コマンドプロンプトからのJavaバージョン確認
図5 コマンドプロンプトからのJavaバージョン確認

Eclipseのインストール

次にEclipseのサイト図6からEclipseをダウンロード/インストールします。⁠GAEforJava」では、Eclipse3.4または3.3が使用可能です。

図6 Eclipseホームページ(Eclipseダウンロード)
図6 Eclipseホームページ(Eclipseダウンロード)
URL:http://www.eclipse.org/

Eclipseプラグインのインストール

ここからGAE for Java用の手順に入ります。最初にGAE for JavaのプラグインをEclipseにインストールしますが、通常のプラグインインストール手順で行います。

Eclipseのメニューから[Help⁠⁠→⁠Software Update]選択すると、図7のようなSoftware Updates and Add-ons画面が表示されます。

図7 Software Updates and Add-ons画面(1)
図7 Software Updates and Add-ons画面(1)

この画面で[Available Software]タグを選択し、画面右の「Add Site」ボタンをクリックすると、図8のようなダイアロクが表示されます。この画面で

  • Eclipse 3.4の場合は http://dl.google.com/eclipse/plugin/3.4
  • Eclipse 3.3の場合は http://dl.google.com/eclipse/plugin/3.3

を入力して「OK」ボタンをクリックします。

図8 Add Siteダイアログ
図8 Add Siteダイアログ

OKボタンクリックで、図9のような画面表示に変わります。この画面でGoogle Update Site for Eclipse3.4の「Plugin」「SDKs」のチェックボックスにチェックを入れて「Install」ボタンをクリックし、インストールを開始します。

図9 Software Updates and Add-ons画面(2)
図9 Software Updates and Add-ons画面(2)

インストール完了後、Eclipseを再起動すると、ツールバーに図10のように3種類のボタンが追加されています。

図10 Eclipseツールバーへのボタン追加
図10 Eclipseツールバーへのボタン追加

プロジェクトの作成

ここまでの手順が終わるとGAEのJavaプログラム作成が可能になります。追加されたボタンのうち左のボタンボタンがGAEforJavaのプロジェクト生成用で、このボタンクリックをクリックすると図11のようなプロジェクト生成用のダイアログが表示されます。

図11 プロジェクト生成用ダイアログ
図11 プロジェクト生成用ダイアログ

図11の画面例では、⁠Project name」「Package」に、guest1を入力し、デフォールトでセットされている「Use Google Web Toolkit」のチェックを外します。GWT(Google Web Toolkit)はAjaxクライアントのプログラムをJavaで作成する機能をもつGoogleのAjaxツールですが、ここでは使用しないためチェックを外します。

以上設定後、図11の画面で「Finish」ボタンをクリックするとGAE用のプロジェクトが生成され、EclipseのPackage Explorerに作成されたプロジェクトの内容が表示されます図12⁠。

図12 Package ExplorerのGAEプロジェクト表示
図12 Package ExplorerのGAEプロジェクト表示

図12のPackage ExplorerからguestbookServlet.javaをダブルクリックすると、図13のようなJava ServletコードがEclipse画面中央のエディタフィールドに表示されます。

図13 guestbookServlet.java の表示
図13 guestbookServlet.java の表示

GAEのプロジェクトはそのまま実行できる形で生成され、実行により、⁠Hello, world⁠が表示されます。

ここではごく簡単に、表示内容を⁠Yes, We can!⁠に変更してみます。

このServletはWEB-INF下のindex.htmlから呼び出されますが、自動生成されるindex.htmlはリスト1のような内容になっています。

リスト1 index.html
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<!-- The HTML 4.01 Transitional DOCTYPE declaration-->
<!-- above set at the top of the file will set     -->
<!-- the browser's rendering engine into           -->
<!-- "Quirks Mode". Replacing this declaration     -->
<!-- with a "Standards Mode" doctype is supported, -->
<!-- but may lead to some differences in layout.   -->
<html>
  <head>
    <meta http-equiv="content-type" content="text/html; charset=UTF-8">
    <!--                                           -->
    <!-- Any title is fine                         -->
    <!--                                           -->
    <title>Hello App Engine</title>
  </head>
  <!--                                           -->
  <!-- The body can have arbitrary html, or      -->
  <!-- you can leave the body empty if you want  -->
  <!-- to create a completely dynamic UI.        -->
  <!--                                           -->
  <body>
    <h1>Hello App Engine!</h1>
    <table>
      <tr>
        <td colspan="2" style="font-weight:bold;">Available Servlets:</td>
      </tr>
      <tr>
        <td><a href="guestbook"/>guestbookServlet</td>
      </tr>
    </table>
  </body>
</html>

GAEforJavaでは通常のServletにないXMLファイルで、ユーザが直接編集する必要があるものとしてappengine-web.xml(リスト2)があります。このファイルでapplication とversionタグにデプロイ(クラウド環境へのアップロード)するプログラムの値を指定する必要があります。ただしこの部分は記入なしてデプロイを実行してもダイアロクから指定することもできるので、ここでは記入なしでそのままにしておき、デプロイ時に指定してみます。

リスト2  appengine-web.xml
<?xml version="1.0" encoding="utf-8"?>

<appengine-web-app xmlns="http://appengine.google.com/ns/1.0">

<application></application>

<version></version>

<!-- Configure java.util.logging -->

<system-properties>

<property name="java.util.logging.config.file" value="WEB-INF/logging.properties"/>

</system-properties>

</appengine-web-app>

ローカルでの実行

プログラムをGAEのクラウド環境にアップロードする前に、ローカルで実行し動作確認を行います。ローカルの実行では、Package Explorerでguesatbookプロジェクトを右クリックし、表示されるメニューから「Run As⁠⁠ →Web Applicationと選択して行います。プログラムが正常に実行されると、Eclipse下部のConsoleが図14のような表示にかわります。

図14 ローカルPCでのプログラム実行
図14 ローカルPCでのプログラム実行

この状態でブラウザを起動し、http://localhost:8080/でアクセスすると、図15のような画面が表示され、⁠guestbookServlet」のリンククリックで図16の表示に変化します。

図15 ローカルブラウザでの画面表示
図15 ローカルブラウザでの画面表示
図16 guestbookServletのリンククリック後
図16 guestbookServletのリンククリック後

GAEクラウド環境へのアップロード

ローカルPCでの動作確認後、GAEクラウド環境へのアップロードを行います。クラウド環境へのアップロードはプラグインのインストールで追加されたボタンのうち、図17のボタンクリックで行います。

図17 GAEクラウド環境へのアップロード
図17 GAEクラウド環境へのアップロード
図18 ボタンクリックでの警告表示
図18 ボタンクリックでの警告表示

図17のボタンクリックをクリックすると、図18のダイアログで警告が表示されます。これはappengine-web.xmlにアプリケーションIDとバージョンを登録していなかったからで、登録を忘れた場合もこの場で行うことができるようになっており、警告が表示された場合は画面左下の「App engine project setting」のリンクをクリックすると、図19のようなダイアログが表示されます。

図19 プロジェクト設定のダイアログ
図19 プロジェクト設定のダイアログ

図19の画面ではAplication IDにcybersample1をVersionに9を入力しています。筆者の場合はPythonのプログラム作成でこのアプリケーションIDを取得していましたが、新規の場合はID取得後に登録しておく必要があります。

入力後「OK」ボタンのクリックで元の画面に戻り、今度は図20のような画面表示に変わりDeployが可能であることが表示されていまが、この状態でappengine-web.xmlを開くとapplicationとversionタグの内容が次のように変化しています。

<application>cybersample1</application>

<version>9</version>

筆者の環境ではすでにPythonでかなりの数のプログラムがデプロイされているので、既存のAplication IDを使用し、Versionを変えて登録を行っています。なおサーバに保持できるVersion数は10個が上限です。

図20 プロジェクト設定後のDeployダイアログ
図20 プロジェクト設定後のDeployダイアログ

図20の「Deploy」ボタンクリックでデプロイが開始され、完了すると、コンソールに図21のようなメッセージが表示されます。

図21 デプロイ完了後のコンソール表示
図21 デプロイ完了後のコンソール表示

サンプルの実行

デプロイが完了したら、クラウド環境での動作確認を行います。動作確認はGAEのトップページ右上Getting Started図22「Sign up」をクリックすると、サインイン図23が表示されるので。そこからパスワードを入力して管理者画面図24を表示します。ただし、2回目からはサインイン画面は表示されず、直接図24の管理者画面が表示されます。

図22 サインアップ
図22 サインアップ
図23 サインイン画面
図23 サインイン画面
図24 管理者画面
図24 管理者画面

図24の管理者画面では7つのアプリケーションが登録されており、中央のCurrent Versionで指定されているバーションが外部インターネットに公開されています。いま登録したのはcyersample1のバージョン9ですので、登録したプログラムは外部には公開されておらず、またこの画面からアクセスすることもできません。

デプロイしたプログラムの動作確認を行うためには、図24の画面で「cyersample1」をクリックします。

図25 cyersample1のダッシュボード画面
図25 cyersample1のダッシュボード画面

cyersample1のクリックで、図25のようなcyersample1のダッシュボード画面に表示が変わります。次にこの画面で左メニュー下部の「Versions」をクリックします。

図26 cyersample1のVersions画面
図26 cyersample1のVersions画面

Versionsのクリックで、cybersample1のすべてのバージョンが表示されます図26⁠。いま登録したのはバージョン9で、Versionsに⁠(deployed 0:18:24 ago) ⁠と表示され、18分24秒前に登録されたばかりであることがわかります。

この画面上でVersion9のLive URLのリンクをクリックすると、デプロイしたプログラムの動作確認を行うことができます。なおcyersample1のバージョン6まではPythonのプログラムです、このように同じAplication IDで、異なる言語のプログラムをバージョンを変えて混在させることができます。

図27 GAEクラウド環境での画面表示
図27 GAEクラウド環境での画面表示

図26からのリンククリックで図27の画面が表示され、gusetbookServletのクリックでローカルでの実行と同様に表示が変わり、GAEのクラウド環境でも正常に動作することが確認できます。

以上でGAE for Javaの環境設定からデプロイまでの手順は終わりです、手続が多いようにも見えるかもしれませんが、実際に行ってみると意外に簡単にデプロイできると思います。

ただし今回のアナウンスはあくまでも「An Early Look at」で、他のサンプルを見てもまだPython版ほど整理がされていないようにも見えます。また、Googleのサイトにも今回はまだ開発の途中であり、ユーザからのインプットを切望している旨が記載されています。GoogleがGAE for Javaの完成度をどのように高めていくか注目したいところです。

おすすめ記事

記事・ニュース一覧