1 / 33

Gradle × GAE/J

竹本 和敏

2 / 33

本日のお題目

3 / 33

チュートリアルの手順(抄録)

  • JDKとMavenのセットアップ
  • mvn archetype:generateでプロジェクトの雛形を作成
  • pom.xmlが置かれているディレクトリで、mvn clean install
  • 処理を適宜書き、mvn appengine:devserverで動作確認
  • mvn appengine:updateでデプロイ

4 / 33

これをGradleでやってみる

最大の関門:

mvn archetype:generateに相当する処理を

どうするか

5 / 33

これをGradleでやってみる

mvn archetype:generateに相当するgradle initで提供されるテンプレートはこれだけ

  • pom
  • java-library
  • scala-library
  • groovy-library
  • basic

https://gradle.org/docs/current/userguide/build_init_plugin.html

6 / 33

これをGradleでやってみる

  • Mavenのプラグインは使用できないので、Gradleだけでゼロからプロジェクトをつくろうとすると、割と苦労する。
  • ということなので、こういう時は素直にMavenの力を借りる。

7 / 33

プロジェクトの作成

テストした環境:

  • Ubuntu 14.04 x64
  • JDK 8u31 Linux x64
  • Maven 3.2.5
  • Gradle 2.2.1
  • Eclipse 4.4 SR1 Linux x64(Google Plugin for Eclipse、Gradle integration導入)

8 / 33

プロジェクトの作成

  • チュートリアルどおり、mvn archetype:generatemvn clean installでプロジェクトを作成
  • プロジェクトの雛形ができたら、pom.xmlからbuild.gradleを生成

 $ gradle init --type=pom

9 / 33

プロジェクトの作成

翻訳後のbuild.gradleはこんな感じ。

apply plugin: 'java'

apply plugin: 'maven'

group = 'com.example.guestbook'

version = '1.0-SNAPSHOT'

description = """"""

sourceCompatibility = 1.7

targetCompatibility = 1.7

repositories {

maven { url "http://repo.maven.apache.org/maven2" }

}

dependencies {

compile group: 'com.google.appengine', name: 'appengine-api-1.0-sdk', version:'1.9.17'

compile group: 'jstl', name: 'jstl', version:'1.2'

testCompile group: 'com.google.appengine', name: 'appengine-testing', version:'1.9.17'

testCompile group: 'com.google.appengine', name: 'appengine-api-stubs', version:'1.9.17'

providedCompile group: 'javax.servlet', name: 'servlet-api', version:'2.5'

}

10 / 33

build.gradleの手直し

これではGAE/Jのプロジェクトとして動かないので、動くようにbuild.gradleを編集する。

11 / 33

build.gradleの手直し

プラグインはこう変える。

※mavenプラグインは、pomをGradleから利用できるようにするわけではなく、Mavenリポジトリへのアップロード機能を提供するもの

http://gradle.org/docs/current/userguide/maven_plugin.html

apply plugin: 'java'

apply plugin: 'maven'

apply plugin: 'war'

apply plugin: 'eclipse-wtp'

apply plugin: 'appengine'

12 / 33

build.gradleの手直し

appengineプラグイン:

GitHubで公開されている、公式Gradleプラグイン

https://github.com/GoogleCloudPlatform/gradle-appengine-plugin

13 / 33

build.gradleの手直し

プラグインの説明にしたがい、buildscriptブロックを追加

buildscript {

repositories {

mavenCentral()

}

dependencies {

classpath "com.google.appengine:gradle-appengine-plugin:1.9.17"

}

}

14 / 33

build.gradleの手直し

repositoriesブロックはmavenCentral()にする。

repositories {

mavenCentral()

}

15 / 33

build.gradleの手直し

dependenciesブロックには、最低これが必要。

dependencies {

appengineSdk "com.google.appengine:appengine-java-sdk:1.9.17"   

}

16 / 33

build.gradleの手直し

appengineプラグインのプロパティは、こんな感じ。

appengine {� httpPort = 8085� downloadSdk = true

� appcfg {� email = 'benjamin.muschko@gmail.com'� passIn = true�� logs {� severity = 1� outputFile = file('mylogs.txt')� }�� app {� id = 'sample-app'� }� }�}

17 / 33

アプリを動かしてみる

  • アプリを動かすには、gradle appengineRunを実行する。
  • エラーがなければ、85%くらいで Dev App Server is now running と出るはず。
  • build.gradleのhttpPortに書いた番号で待ち受けを始めるので、ブラウザでアクセスしてみる。

18 / 33

アプリを動かしてみる

  • アプリを止めるには、gradle appengineStopを実行する。
  • 実行中のappengineRunタスクがシャットダウンを始め、 BUILD SUCCESSFUL と出るはず。

19 / 33

アプリをデプロイする

  • アプリをデプロイするには、gradle appengineUpdateを実行する。
  • 認証情報とかをbuild.gradleに書けば、タスク一発でデプロイまで完了できるようになる。
  • ただ、そのまんま書くこともできるが、あんまりやらないほうがいいかも。

20 / 33

その他のタスク

  • appengineプラグインがサポートするタスクは、プラグイン公式を参照するか、gradle tasksで確認できる。
  • タスク名はすべて、appengine〜〜という名称

21 / 33

Eclipseにインポートする

Gradle Projectとしてインポートする。

22 / 33

Eclipse上で開発

Gradleタスクは、プロジェクトの右クリックメニュー内にある、Gradle → Task Quick Launcherから実行する。

23 / 33

一度やってしまえば終わりだけど

正直、

めんどくせー!( ゚д゚ )クワッ!!

24 / 33

ちなみにMavenなしだと

  • gradle init --type=java-library でスタブ生成
  • build.gradleをゴリゴリ直す(ほぼ書き直しに近い)
  • 動作に必要なクラスやXMLをゴリゴリ追加(web.xmlやappengine-web.xmlも)
  • gradle appengineRun で動作確認

….という手順になる。

25 / 33

別の方法を模索

  • もっと楽な方法はないの?
  • ということで、Android Studioの出番です。
  • Android Studio Linux 1.1 RC1にて確認。

26 / 33

Why Android Studio?

  • 意識していないとお目にかかることはないかもしれないが、ASにはCloud Platformサポートがある(https://cloud.google.com/mobile/)。
  • ただし、「Androidありき」のモバイルバックエンドを想定した作りなので、こちらもひと手間増える。

27 / 33

GAEプロジェクトだけにするには

まず普通にAndroidプロジェクトを作り、File → New ModuleでGoogle Cloud Platformを追加する。

28 / 33

GAEプロジェクトだけにするには

用意されているModule Typeは、以下の3種類。

今日のネタからすると、App Engine Java Servlet Moduleにしておくのがベターか?

https://cloud.google.com/mobile/app_engine/add_module

App Engine Java Servlet Module

標準的なJava Servletをサポート。OAuthはサポート外

App Engine Java Endpoints Module

Google Cloud Endpointで、クライアントアプリからのAPI直接呼出しをサポート。OAuth 2.0サポートも内蔵

App Engine Backend

with Google Cloud Messaging

Endpoints Moduleに似ているが、こちらはGCMもサポート

29 / 33

GAEプロジェクトだけにするには

その後、Project StructureでAndroidのモジュールを除去する。

30 / 33

GAEプロジェクトだけにするには

  • こうすることで、Moduleディレクトリが削除できるようになるので、いらないものを削除する。
  • あとはAS内蔵のGradleサポートでコーディングしていくだけ。
  • Eclipseでやるよりはるかに簡単....か?

31 / 33

とはいえ

  • モバイルバックエンドが主体
  • 開発環境を統一したい

という場合には、よい選択肢かも。

32 / 33

そういえばGradleのバージョンが

  • 2.2.1で検証していたのは、こういう理由から

Gradle 2.3 appengine and eclipse not working together?

( https://github.com/GoogleCloudPlatform/gradle-appengine-plugin/issues/174 )

  • Gradle 2.3を使いたかったら、AppEngine plugin 1.9.19以降を使え、ということらしい

33 / 33

ということで本日のキモ

  • gradle initで提供される機能はMavenよりも少ない、ということを理解する
  • 足りないところは他のアプリから借りればいいじゃない、と割り切ることも必要
  • 開発に使えるIDEはEclipseだけじゃない
  • GradleとAppEngine pluginのバージョンに注意