Apache Maven と App Engine プラグインの使用(Cloud SDK ベース)

このページでは、ソフトウェア プロジェクトの管理および確認ツール Apache Maven を使用して App Engine プロジェクトを管理する方法を説明します。このツールを使って App Engine へのデプロイ用ウェブ アプリケーション アーカイブ(WAR)ファイルをビルドできます。Google では、Maven 3.3.9 以上でサポートされる、プラグインと Maven アーキタイプを提供しています。

Maven によって、Google App Engine SDK から Java ライブラリがダウンロードされます。Maven を使用して、アプリをローカルでテストし、App Engine をデプロイすることができます。

Maven を設定する

Java を設定する

  1. Java がインストールされていない場合には、ダウンロードしてインストールします。

  2. Java 7 または Java 8 を使用できますが、Java 7 のバイトコード レベルを使用する必要があります。Java 8 を使用する場合は、プロジェクトの pom.xml でアプリをコンパイルしたときの出力が 1.7 バイトコードとなるように設定する必要があります。

    <properties>  <!-- App Engine Standard currently requires Java 7 -->
      <maven.compiler.target>1.7</maven.compiler.target>
      <maven.compiler.source>1.7</maven.compiler.source>
    </properties>

Maven 3.3.9 以降をインストールする

  1. Maven がインストールされているかどうか、どのバージョンがインストールされているかを確認するには、次のコマンドを実行します。

     mvn -v
    
  2. 適切なバージョンの Maven がインストールされていない場合は、次の手順に沿ってインストールします。

    1. Maven のウェブサイトから Maven 3.3.9 以降をダウンロードします。
    2. Maven 3.3.9 以降をローカルマシンにインストールします。

Cloud Platform プロジェクトを設定および検証する

Cloud Platform プロジェクトを設定し、Cloud SDK をインストールする必要があります。

  1. Google Cloud Platform Console を使用して、Cloud Platform プロジェクトを作成し、設定します。

    App Engine に移動

    1. Cloud Platform プロジェクトを選択するか新規作成します。
    2. プロジェクト用の App Engine アプリケーションを作成する必要がある場合は、App Engine アプリケーションを配置するリージョンを選択するように指示されます。
    3. プロジェクトで App Engine アプリケーションが作成されると、ダッシュボードが開きます。
  2. Google Cloud SDK をインストールして初期化します。

    gcloud ツールがすでにインストールされていて、初期化時に指定したものと異なる Cloud Platform プロジェクト ID を使用するように設定する場合は、Cloud SDK 設定の管理をご覧ください。

  3. 次のコマンドを実行して、Cloud SDK app-engine-java コンポーネントをインストールします。

    gcloud components install app-engine-java
    

Maven を使用する

App Engine プラグインを既存のプロジェクトに追加する(省略可)

Google App Engine Maven プラグインを既存の Maven プロジェクトで使用するには、プロジェクトの pom.xml ファイルの plugins セクションに、次の内容を追加します。

<plugin>
   <groupId>com.google.cloud.tools</groupId>
   <artifactId>appengine-maven-plugin</artifactId>
   <version>1.3.1</version>
</plugin>

アーキタイプを選択する

Maven アーキタイプを使用すると、一般的な使用事例を想定したテンプレートを使って Maven プロジェクトを作成できます。App Engine では、この Maven の機能を活用するために、便利な App Engine アーキタイプをいくつか Maven Central で提供しています。アプリに適した App Engine アーキタイプを選択してください。

アプリケーションの種類 アーティファクト 説明
App Engine アプリ* guestbook-archetype 実行とテストが可能な完成したゲストブックのデモサンプルを生成します。
App Engine アプリ* appengine-skeleton-archetype 独自のクラスとリソースを利用できる、必要なファイルとディレクトリが含まれた新しい空の App Engine プロジェクトを生成します。
Endpoints Frameworks for App Engine endpoints-skeleton-archetype 独自のクラスとリソースを利用できる、必要なファイルとディレクトリが含まれた新しい空の Endpoints Frameworks for App Engine のバックエンド API プロジェクトを生成します。
Endpoints Frameworks for App Engine hello-endpoints-archetype ビルドして実行することができる、スターター Endpoints Frameworks for App Engine のバックエンド API プロジェクトを生成します。

* このコンテキストでは、App Engine アプリとは標準 App Engine アプリを意味します。Cloud Endpoints Frameworks を使用してエンドポイントとして機能するアプリのことではありません

新しいプロジェクトを作成する

Maven でプロジェクトを作成する際、プロジェクトの groupIdartifactIdversionpackage を指定するよう求められます。

用語 意味
groupId アーティファクトの追跡に使用される、Maven における名前空間。プロジェクトが他のユーザーの Maven プロジェクトに使用される場合、依存性を指定する際に属性として使用されます。
artifactId Maven におけるプロジェクト名。この値も、他のユーザーが自分の Maven プロジェクトをこのプロジェクトに依存させる場合に指定されます。
version プロジェクトの生成に使用する Maven の初期バージョン。version に接尾辞 -SNAPSHOT を付けることをおすすめします。これにより Maven Release Plugin で、開発中のバージョンをサポートできます。詳しくは、Maven Release Plugin の使用方法に関するガイドをご覧ください。
package 生成時に作成される Java パッケージ。

App Engine のゲストブック

App Engine Maven アーキタイプを使用して App Engine アプリを作成するには:

  1. プロジェクトをビルドするディレクトリに移動します。

  2. 次の Maven コマンドを実行します。

    mvn archetype:generate -Dappengine-version=1.9.54 -Djava8=false -Dproject-id=[YOUR-PROJECT_ID] -Dfilter=com.google.appengine.archetypes:
    

    ここで:

    • appengine-version には、Java 用 App Engine SDK の最新バージョンを設定します。
    • project-id には、Cloud Platform プロジェクトの ID を設定します。
  3. 実行可能な完成したゲストブックのサンプルアプリを作成する場合は、com.google.appengine.archetypes:guestbook-archetype に対応する番号を指定します。

    独自のクラスを利用できる、必要なディレクトリ構造とファイルが含まれた空のプロジェクトを作成する場合は、com.google.appengine.archetypes:appengine-skeleton- archetype に対応する番号を指定します。

  4. デフォルト値を受け入れて、表示された利用可能なアーキタイプ バージョンのリストから最新バージョンを選択します。

  5. Define value for property 'groupId'」と表示されたら、アプリの名前空間を指定します(com.mycompany.myapp など)。

  6. Define value for property 'artifactId'」と表示されたら、プロジェクト名を指定します(myappguestbook など)。

  7. Define value for property 'version'」と表示されたら、デフォルト値を受け入れます。

  8. Define value for property 'package'」と表示されたら、希望するパッケージ名を指定するか、デフォルト値を受け入れます。生成される Java ファイルには、ここで指定するパッケージ名が付きます。

  9. 選択した内容を確認するよう促された場合、デフォルト値(Y)を受け入れます。

  10. プロジェクトの生成が完了するのを待ち、新しいプロジェクト ディレクトリ(guestbook/ など)に移動します。

  11. 次のコマンドを実行してプロジェクトをビルドします。

        mvn clean package
    
  12. プロジェクトがビルドされるまで待ちます。ビルドが正常に終了すると、それを知らせるメッセージが表示されます。

        [INFO] --------------------------------------------------
        [INFO] BUILD SUCCESS
        [INFO] --------------------------------------------------
        [INFO] Total time: 1:16.656s
        [INFO] Finished at: 2016-08-04T16:18:24-07:00
        [INFO] Final Memory: 16M/228M
        [INFO] --------------------------------------------------
    
  13. guestbook-archetype アーティファクトを使ってゲストブックのサンプル デモアプリを作成した場合:

    1. 開発サーバーでアプリケーションのローカルテストを実行します。

      mvn appengine:run
      
      Wait for the dev server to start up. When it finishes starting up, you
      will see a message similar to this:
      
           [INFO] GCLOUD: INFO: Module instance default is running at http://localhost:8080/
           [INFO] GCLOUD: Jul 27, 2016 11:44:19 AM com.google.appengine.tools.development.AbstractModule startup
           [INFO] GCLOUD: INFO: The admin console is running at http://localhost:8080/_ah/admin
           [INFO] GCLOUD: Jul 27, 2016 11:44:19 AM com.google.appengine.tools.development.DevAppServerImpl doStart
           [INFO] GCLOUD: INFO: Dev App Server is now running
      

    2. 開発サーバーが使用するデフォルトの URL とポート http://localhost:8080/ でアプリケーションにアクセスします。ゲストブックのデモアプリが表示されます。

    3. アプリと開発サーバーを停止するには、Ctrl+C キーを押します。

  14. appengine-skeleton-archetype アーティファクトを使って新しい空のアプリを作成した場合:

    1. アプリ用クラスのコードの記述を始める前に、基本的なプロジェクトのレイアウトと、必要なプロジェクト ファイルをよく理解します。プロジェクトを作成したディレクトリには myapp というサブディレクトリがあり、そこには pom.xml ファイル、src/main/java サブディレクトリ、src/main/webapp/WEB-INF サブディレクトリがあるはずです。

      Maven プロジェクトのレイアウト

      • src/main/java/... にはアプリケーションの Java クラスを追加する
      • アプリケーションの設定にはファイル src/main/webapp/WEB-INF/appengine-web.xml を使う
      • アプリケーションのデプロイの設定にはファイル src/main/webapp/WEB-INF/web.xml を使う
    2. アプリケーションの Java クラスを作成して src/main/java/... に追加します。詳しくは、スタートガイドをご覧ください。

    3. アプリのユーザーに提供する UI を追加します。詳しくは、アプリケーション コードと UI を追加するをご覧ください。

    4. プロジェクトの作成に使用したアーティファクトでは src/main/webapp/WEB-INF/appengine-web.xml の基本的な設定が完了しています。ただし、詳細設定を行うには、このファイルの編集が必要になることがあります。詳しくは、appengine-web.xml を使用して設定するをご覧ください。

    5. ファイル src/main/webapp/WEB-INF/web.xml を編集して URL をアプリのハンドラにマッピングし、認証やフィルタなどを指定します。詳しくは、デプロイ記述子をご覧ください。

Endpoints Frameworks for App Engine

このアーキタイプは、App Engine Maven プラグインと Endpoints Frameworks Maven プラグインを含む、プラグインの使用例を提供します。

このアーキタイプによって、新しい Endpoints Frameworks for App Engine を使用した Greetings API の例が生成されます。また、これは、より古い Endpoints Frameworks アプリケーションを移行する例としても機能します。ここで説明されている、このアーキタイプの以前のバージョンから移行したバージョンがサンプルになっています。

アーキタイプで生成された README.md には、移行がどこで発生したかに関する情報が示されます。

Endpoints Frameworks for App Engine のバックエンド API アーキタイプ プロジェクトを作成するには:

  1. プロジェクトをビルドするディレクトリに移動します。

  2. 次の Maven コマンドを実行します。

    mvn archetype:generate -Dgoogle-cloud-project=[YOUR-PROJECT-ID] -Dappengine-plugin=1.3.1 -Dendpoints-frameworks=2.0.7 -Dendpoints-plugin=1.0.0 --Dappengine-sdk=1.9.53 -Dfilter=com.google.appengine.archetypes:
    

    ここで、-Dgoogle-cloud-project にはプロジェクト ID を設定します。-Dappengine-plugin には App Engine Maven プラグインの最新バージョンを設定します。-Dendpoints-frameworks には Maven の依存関係に対する Endpoints Frameworks for App Engine の最新バージョンを設定します。-Dendpoints-plugin には Endpoints Frameworks for App Engine Maven プラグインの最新バージョンを設定します。

  3. hello-endpoints-archetype に対応する番号を指定します。

  4. 表示された利用可能なアーキタイプ バージョンのリストから最新バージョンを選択します。

  5. 「[Define value for property 'groupId'」と表示されたら、アプリの名前空間を指定します(com.example.helloendpoints など)。

  6. Define value for property 'artifactId'」と表示されたら、プロジェクト名を指定します(helloendpoints など)。

  7. Define value for property 'version'」と表示されたら、デフォルト値を受け入れます。

  8. Define value for property 'package'」と表示されたら、デフォルト値を受け入れます。

  9. 選択した内容を確認するよう促された場合、デフォルト値(Y)を受け入れます。

  10. プロジェクトの生成が完了するのを待ち、新しいプロジェクト ディレクトリ(helloendpoints/ など)に移動します。

  11. 次のコマンドを実行してプロジェクトをビルドします。

    mvn clean package
    
  12. プロジェクトがビルドされるまで待ちます。ビルドが正常に終了すると、それを知らせるメッセージが表示されます。

    [INFO] ------------------------------------------------------------------------
    [INFO] BUILD SUCCESS
    [INFO] ------------------------------------------------------------------------
    [INFO] Total time: 4.062 s
    [INFO] Finished at: 2017-02-28T00:28:03-08:00
    [INFO] Final Memory: 27M/485M
    [INFO] ------------------------------------------------------------------------
    
  13. ローカルでテストし、Google App Engine スタンダード環境にプロジェクトをデプロイする場合は、Maven プロジェクトの管理、テスト、デプロイをご覧ください。

  14. さらに、次のように Endpoints Framework Maven Plugin を使用して、Greeting API 用の Java クライアント ライブラリを生成することもできます。

    mvn endpoints-framework:clientLibs
    
  15. バックエンドの Greetings API の例を見てみましょう。

    1. 以下に示す基本的なプロジェクトのレイアウトをよく理解します。

      Maven プロジェクトのレイアウト

    2. README.md には、生成された例に関する情報が含まれています。

    3. Greetings.java には、Greetings API の例の API 定義が含まれています。
    4. Constants.java には、Greetings API の例で使用される定数が含まれています。
    5. HelloGreeting.java には、Greetings API の例で送受信されるメッセージのコンテナが含まれています。
    6. index.html には、バックエンドの Greetings API を呼び出すためのシンプルな UI が含まれています。
    7. base.js には、UI によるバックエンド リクエストに必要な JavaScript が含まれています。
    8. build.gradle が生成されると、この例では Gradle もサポートされるようになり、この機能に関する詳細が README.md に示されます。

Maven プロジェクトの管理、テスト、デプロイ

プロジェクトをコンパイルしてビルドする

Maven App Engine アーキタイプを使用して作成したアプリケーションをビルドするには:

  1. プロジェクトのメイン ディレクトリ(guestbook/ など)に移動します。

  2. Maven を起動します。

    mvn clean package
    
  3. プロジェクトがビルドされるまで待ちます。ビルドが正常に終了すると、それを知らせるメッセージが表示されます。

    BUILD SUCCESS
     Total time: 10.724s
     Finished at: 2016-08-04T16:18:24-07:00
     Final Memory: 24M/213M
    
  4. 必要に応じて、以下の手順でアプリケーションのテストを実行します。

開発サーバーでアプリをテストする

開発フェーズでは、App Engine Maven プラグインを起動することによって、開発サーバーでいつでもアプリケーションを実行してテストできます。

App Engine のゲストブック

アプリをテストするには:

  1. アプリをまだビルドしていない場合はビルドします。

    mvn clean package
    
  2. プロジェクトのトップレベルのディレクトリ(myapp など)に移動して Maven を起動します。

    mvn appengine:run
    

    サーバーが起動するまで待ちます。サーバーが起動してアプリケーションが実行されると、それを知らせるメッセージが表示されます。

    [INFO] GCLOUD: INFO: Module instance default is running at http://localhost:44180/
    [INFO] GCLOUD: Jul 29, 2016 9:23:55 PM com.google.appengine.tools.development.AbstractModule startup
    [INFO] GCLOUD: INFO: The admin console is running at http://localhost:44180/_ah/admin
    [INFO] GCLOUD: Jul 29, 2016 9:23:55 PM com.google.appengine.tools.development.devappserver2.DevAppServer2Impl doStart
    [INFO] GCLOUD: INFO: Dev App Server is now running
    
  3. ブラウザに http://localhost:8080/ を指定してアプリにアクセスします。

  4. Ctrl+C キーを押して、アプリケーションと開発サーバーをシャットダウンします。

Endpoints Frameworks for App Engine

Endpoints Frameworks for App Engine アプリをテストするには:

  1. アプリをまだビルドしていない場合はビルドします。

    mvn clean package
    
  2. 次のコマンドにより、例をローカルで実行します。

    mvn appengine:run
    

    サーバーが起動するまで待ちます。サーバーが起動してアプリケーションが実行されると、それを知らせるメッセージが表示されます。

    [INFO] GCLOUD: INFO ### devappserver2.py:764] Skipping SDK update check.
    [INFO] GCLOUD: INFO ### api_server.py:268] Starting API server at: http://localhost:34199
    [INFO] GCLOUD: INFO ### dispatcher.py:199] Starting module "default" running at: http://localhost:8080
    [INFO] GCLOUD: INFO ### admin_server.py:116] Starting admin server at: http://localhost:8000
    [INFO] GCLOUD: ### com.google.appengine.tools.development.SystemPropertiesManager setSystemProperties
    
  3. ブラウザに http://localhost:8080/ を指定してアプリにアクセスします。または、組み込みの Google API Explorer を使用して API をテストする場合は http://localhost:8080/_ah/api/explorer にアクセスします。

  4. Ctrl+C キーを押して、アプリケーションと開発サーバーをシャットダウンします。

ローカルテスト用のポートを指定する

ローカルの開発サーバーでアプリケーションを実行する場合、デフォルトのポートは 8080 です。このデフォルト値を変更する場合は、appengine-maven-plugin のプラグイン エントリを変更します。たとえば、次のように、アプリケーション ディレクトリの pom.xml ファイルでポートとアドレスを指定できます。

<plugins>
   <plugin>
     <groupId>com.google.cloud.tools</groupId>
     <artifactId>appengine-maven-plugin</artifactId>
     <version>1.3.1</version>
     <configuration>
       <devserver.host>0.0.0.0</devserver.host>
       <devserver.port>8181</devserver.port>
     </configuration>
  </plugin>
</plugins>

この例では、<devserver.port> にはデフォルトの代わりに 8181 を指定し、0.0.0.0 を指定することで、開発サーバーによってローカル ネットワークからのリクエストがリスニングされます。

接頭辞 devserver はオプションで、代わりに <port>8181</port> を使用できます。

開発サーバーをデプロイする

ローカルに実行されているアプリケーションをデバッグするには、次の例のように、プラグイン構成に jvmFlags を設定して、基になる JVM でデバッグを有効にします。

<configuration>
  <jvmFlags>
    <jvmFlag>-Xdebug</jvmFlag>
    <jvmFlag>-Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=5005</jvmFlag>
  </jvmFlags>
</configuration>

アプリケーションをデプロイする

アプリケーションをデプロイするには、次のコマンドを実行します。

mvn appengine:deploy

App Engine Maven プラグインの appengine:deploy ゴールと他のすべてのゴールには、使用可能なパラメータが関連付けられています。すべてのゴールとパラメータのリストについては、App Engine Maven プラグインのゴールとパラメータをご覧ください。

次のステップ

外出先でもリソースをモニタリング

Google Cloud Console アプリを入手して、プロジェクトの管理にお役立てください。

フィードバックを送信...

Java の App Engine スタンダード環境