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

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

Maven は App Engine SDK から Java ライブラリをダウンロードします。Maven を使用してアプリをローカルでテストし、App Engine にデプロイできます。

始める前に

  1. Google Cloud コンソールを使用して、Google Cloud プロジェクトを作成し、設定します。

    App Engine に移動

    1. Google Cloud プロジェクトを選択するか、新規作成します。
    2. プロジェクト用の App Engine アプリケーションを作成する必要がある場合は、指示に従い、App Engine アプリケーションを配置するリージョンを選択します。
  2. gcloud CLI をダウンロードしてインストールしてから、Google Cloud CLI を初期化します。

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

  3. gcloud CLI app-engine-java コンポーネントをインストールします。
    gcloud components install app-engine-java

    注: gcloud CLI for Java の最新バージョンを使用できるようにするには、gcloud components update を実行してください。

  4. Java がない場合は、Java をダウンロードし、インストールして構成します。
  5. プロジェクトの pom.xml で Java コンパイラ フラグを設定して、Java 8 バイトコードを指定します。
    <properties>
      <maven.compiler.source>1.8</maven.compiler.source>
      <maven.compiler.target>1.8</maven.compiler.target>
    </properties>
  6. Apache Maven 3.3.9 以降がインストールされている必要があります。 Maven のバージョンを確認するには、次のコマンドを実行します。
     mvn -v
  7. 適切なバージョンの Maven がインストールされていない場合は、次の手順に従ってインストールします。
    1. Maven のウェブサイトから Maven 3.3.9 以降をダウンロードします。
    2. ローカルマシンに Maven をインストールします。

      注: Linux では、apt-get install を使用する代わりに Maven をダウンロードしなければならない場合があります。

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

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

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

App Engine アーキタイプの選択

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

Maven を使用した新しいプロジェクトの作成

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

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

新しい Endpoints Frameworks アプリケーションの作成

このセクションでは、新しい Endpoints Frameworks バージョン 2.0 プロジェクトの作成について説明します。

hello-endpoints-archetype で、App Engine Maven プラグインと Endpoints Frameworks Maven プラグインなどのプラグインの使用例を確認できます。

hello-endpoints-archetype によって、Endpoints Frameworks バージョン 2.0 を使用した Greetings API の例が生成されます。また、Endpoints Frameworks バージョン 1.0 アプリケーションを Endpoints Frameworks バージョン 2.0 に移行する例として、これを使用することもできます。

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

Endpoints Frameworks for App Engine のバックエンド API アーキタイプ プロジェクトを作成するには、次の手順に沿って操作します。

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

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

    mvn archetype:generate -Dgoogle-cloud-project=[YOUR-PROJECT-ID] -Dappengine-plugin=2.7.0 -Dendpoints-frameworks=2.1.0 -Dendpoints-plugin=1.0.2 -Dappengine-sdk=1.9.98 -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. ローカルでテストし、App Engine スタンダード環境にプロジェクトをデプロイする場合は、Maven プロジェクトの管理、テスト、デプロイをご覧ください。

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

    mvn endpoints-framework:clientLibs
    

次の図は、Greetings API の基本的なプロジェクト レイアウトを示しています。

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

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

アプリケーションのコンパイルとビルド

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
    

開発用サーバーを使用してアプリケーションをテストする

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

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/ に移動して、アプリにアクセスします。

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

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

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

<plugins>
   <plugin>
     <groupId>com.google.cloud.tools</groupId>
     <artifactId>appengine-maven-plugin</artifactId>
     <version>2.7.0</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 プラグインのゴールとパラメータをご覧ください。

次のステップ