Gradle と App Engine プラグインを使用する

Gradle は、柔軟性に優れたビルド自動化システムです。このシステムは宣言型であり、ビルド、テスト、公開、デプロイを自動化するのに使用されます。このページでは、スタンダード環境で Gradle を App Engine プロジェクトとともに使用する方法を説明します。

始める前に

次の前提条件をインストールして構成します。

Google Cloud プロジェクトの設定と検証

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

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

    App Engine に移動

    1. Google Cloud プロジェクトを選択するか、新規作成します。
    2. 表示された指示に沿って、App Engine アプリケーションが存在することと、課金が有効になっていることを確認します。
      1. プロジェクト用の App Engine アプリケーションを作成する必要がある場合は、App Engine アプリケーションを配置するリージョンを選択するように指示されます。
      2. 指示に従って新しい請求先アカウントを作成するか、既存のアカウントを選択します。
    3. プロジェクトで App Engine アプリケーションが作成され、課金が有効になったら、ダッシュボードが開きます。
  2. プラグインが必要に応じて自動的に SDK をインストールするため、gcloud CLI をインストールする必要はありません。

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

シェルを使用して、新しい Gradle プロジェクトを一から作成できます。別の方法でプラグインを使ってみるには、Hello World プロジェクトをダウンロードし、ローカルで実行してデプロイしてください。

  1. 新しいディレクトリを作成し、そのディレクトリに移動します。

  2. 新しいプロジェクトを初期化するには:

    gradle init --type java-library;
    mkdir -p src/main/webapp/WEB-INF;
    rm src/main/java/Library.java src/test/java/LibraryTest.java
    
  3. 次のコードを build.gradle ファイルに追加します。これにより、App Engine Gradle タスク、Maven リポジトリ、App Engine Gradle プラグイン、依存関係、タスク構成が追加されます。

    buildscript {    // Configuration for building
      repositories {
        jcenter()    // Bintray's repository - a fast Maven Central mirror & more
        mavenCentral()
      }
      dependencies {
        classpath 'com.google.cloud.tools:appengine-gradle-plugin:2.5.0' // If a newer version is available, use it
      }
    }
    
    repositories {   // repositories for Jar's you access in your code
      maven {
        url 'https://oss.sonatype.org/content/repositories/snapshots' // SNAPSHOT repository (if needed)
      }
      mavenCentral()
      jcenter()
    }
    
    apply plugin: 'java'                              // standard Java tasks
    apply plugin: 'war'                               // standard Web Archive plugin
    apply plugin: 'com.google.cloud.tools.appengine'  // App Engine tasks
    
    dependencies {
      implementation 'com.google.appengine:appengine-api-1.0-sdk:+'  // Latest App Engine Api's
      providedCompile 'javax.servlet:javax.servlet-api:3.1.0'
    
      implementation 'jstl:jstl:1.2'
    
    // Add your dependencies here.
    //  implementation 'com.google.cloud:google-cloud:+'   // Latest Cloud API's http://googlecloudplatform.github.io/google-cloud-java
    
      testImplementation 'junit:junit:4.13.2'
      testImplementation 'com.google.truth:truth:1.1.5'
      testImplementation 'org.mockito:mockito-core:4.11.0'
    
      testImplementation 'com.google.appengine:appengine-testing:+'
      testImplementation 'com.google.appengine:appengine-api-stubs:+'
      testImplementation 'com.google.appengine:appengine-tools-sdk:+'
    }
    
    // Always run unit tests
    appengineDeploy.dependsOn test
    appengineStage.dependsOn test
    
    appengine {  // App Engine tasks configuration
      deploy {   // deploy configuration
        projectId = System.getenv('GOOGLE_CLOUD_PROJECT')
        version = '1'
      }
    }
    
    test {
      useJUnit()
      testLogging.showStandardStreams = true
      beforeTest { descriptor ->
         logger.lifecycle("test: " + descriptor + "  Running")
      }
    
      onOutput { descriptor, event ->
         logger.lifecycle("test: " + descriptor + ": " + event.message )
      }
      afterTest { descriptor, result ->
        logger.lifecycle("test: " + descriptor + ": " + result )
      }
    }
    
    group   = "com.example.appenginej8"        // Generated output GroupId
    version = "1.0-SNAPSHOT"       // Version in generated output
    
    sourceCompatibility = 1.8     // App Engine Flexible uses Java 8
    targetCompatibility = 1.8     // App Engine Flexible uses Java 8
  4. 次のファイルをプロジェクトに追加する必要もあります。テキスト エディタまたは統合開発環境(IDE)を使用して追加してください。

Java App Engine プロジェクトの概要については、構成ファイルをご覧ください。

Hello World アプリのダウンロード

  1. Hello World サンプルアプリ リポジトリのクローンをローカルマシンに作成します。

    git clone https://github.com/GoogleCloudPlatform/java-docs-samples.git
    

    あるいは、zip 形式のサンプルをダウンロードして、ファイルを抽出することもできます。

  2. サンプルコードが入っているディレクトリに移動します。

    cd java-docs-samples/appengine-java8/helloworld
    

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

  1. ローカルでの実行中にプロジェクトから Google リソースにアクセスするには、次のコマンドを実行してアプリケーションのデフォルト認証情報を設定します。

    gcloud auth application-default login
    
  2. アプリケーション ディレクトリのルートに移動します。

  3. 開発フェーズでは、アプリケーションをいつでも開発用サーバーで実行およびテストできます。これには、次のコマンドで Gradle を起動します。

    gradle appengineRun
    

    Gradle をインストールせずに実行することもできます。その場合は、Gradle ラッパーを使用します。

  4. サーバーが起動するまで待ちます。アプリケーションが実行された状態でサーバーが起動し、次のようなメッセージが表示されます。

    :compileJava
    :processResources NO-SOURCE
    :classes
    :war
    :explodeWar
    :assemble
    :appengineRun
    2018-06-05 22:50:46.231:INFO::main: Logging initialized @321ms
    Jun 06, 2018 2:50:49 AM com.google.appengine.tools.development.AbstractModule startup
    INFO: Module instance default is running at http://localhost:8080/
    Jun 06, 2018 2:50:49 AM com.google.appengine.tools.development.AbstractModule startup
    INFO: The admin console is running at http://localhost:8080/_ah/admin
    Jun 05, 2018 10:50:49 PM com.google.appengine.tools.development.DevAppServerImpl doStart
    INFO: Dev App Server is now running
    
  5. アプリが http://127.0.0.1:8080 で実行されていることを確認します。

開発サーバーでデバッグする

ローカルで実行中のアプリケーションをデバッグするには、次の例のように jvmFlags プロパティを設定して、基礎となる JVM でのデバッグを有効にします。

    appengine {
      run {
        jvmFlags = ['-Xdebug', '-Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=5005']
      }
    }

アプリケーションのホットリロードを有効にする

ホットリロードは、環境を停止することなく、現在実行中のアプリケーション内の 1 つ以上のクラスを更新することです。ホットリロードを有効にするには、次のようにします。

  • 変更をスキャンするようローカル サーバーに指示する必要があります。

    appengine {
      run {
        automaticRestart = true
      }
    }
    
  • アプリの実行中に explodeWar タスクを実行し、変更内容を展開済みのアプリに直接コピーして、実行中のアプリに変更を反映します。

アプリケーションのデプロイ

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

gradle appengineDeploy

appengineDeploy タスクと他のすべての Gradle タスクには、使用できるプロパティが関連付けられています。すべてのタスクとプロパティのリストについては、App Engine Gradle のタスクとプロパティをご覧ください。

Gradle ラッパーを使用する

Gradle には、インストールせずに、必要なバージョンの Gradle をダウンロードして実行するためのメカニズムがあります。

Linux / macOS

./gradlew appengineRun

Windows

gradlew.bat appengineRun

Gradle に関するその他の情報については、App Engine Gradle のタスクとプロパティをご覧ください。

次のステップ