Gradleを利用した開発効率アップ

posted in: Gradle, ツール | 0

こんにちは、うえだです。
業務でJenkinsやGradleを組み合わせて利用したところ、とても便利だったので、紹介させていただきたいと思い記事を書きました。多少前提知識が必要だったり、所々、詳細を省いた説明となっていますがご了承ください。

はじめに

今回は、以下が完了しているものとして説明します。

目的

Gradleを使う目的は、Webアプリケーション開発における一定の作業を自動化して、開発効率を高める事です。
今回はGradleを使用した例を1つ、紹介いたします。

開発環境

  • インターネット接続が可能である事
  • 開発対象アプリケーション: Tomcat上で動作するサーブレット + JSP
  • 開発・動作環境
    • OS: Windows10 64bit
    • IDE: Pleiades 4.7 Oxygen
    • Java: JDK 8u172

GradleによるWebアプリケーションプロジェクトの作成

Gradleプロジェクトの作成

Eclipseでプロジェクトを作成しますが、今回は「Gradleプロジェクト」で作成します。
PleadesのEclipseには初めからGradleプラグインがインストールされているため、すぐに作成できます。

新規Gradleプロジェクトウィンドウで次の操作をします。

  • プロジェクト名にgradle-sampeと入力して次へ
  • GradleディストリビューションにGradleラッパーを選択して次へ
  • プロジェクトの作成が開始される

warファイルを作成しサーブレットを動かす

まず、作成したプロジェクトフォルダの gradle/wrapper/gradle-wrapper.properties を開きます。
下記部分が4.10である事を確認します。それ以外であれば書き換えて保存します。

プロジェクトフォルダ直下のbuild.gradleを開き、以下のように変更します。

サーブレットは下記の通りです。

build.gradleとサーブレットを用意したらwarを作成してアプリケーションを動作させてみます。

  1. Gradleのwarタスクを実行します。
    • Eclipseメニューから実行 > 実行構成 > Gradleプロジェクト で右クリックし「新規」
    • 以下を入力し、実行
      • 実行名: gradle-sample war
      • タスク: war
        mgdt_gradlerunwar
  2. warファイルをTomcatに配備します。
    • Eclipseプロジェクトのbuild/libsフォルダを開くとgradle-sampe.warファイルが作成されています。
    • /tomcat/9(以下)直下のwebappsにコピー
  3. Tomcatを起動します。
    • /bin/startup.batを実行
  4. Tomcatが動作している事を確認し、http://localhost:8080/gradle-sample/helloをブラウザで開きます。

タスクの実行

ツールバーの実行ボタンmgdt_runiconの右にある▽をクリックし、リストから「war」を選択します。
mgdt_runwar
mgdt_runtab

Gradle実行のタブに実行リストが表示されます。これが全て緑色であればタスクは正常終了です。

これで、warファイルを作成してアプリケーションを動作させるところまで確認できました。

デプロイのタスク化

先ほど行った「warを作成し」「Tomcatにコピーし」「Tomcatを再起動」の手順をソースファイル修正の度に行うのは面倒です。そこでこの作業をGradleで記述し、ワンクリックで実行できるようにします。

build.gradleにデプロイに必要なタスクを追加します。タスク名は一例です。
なお、build.gradleファイルはGroovy言語で記述します。

追加した要素は下記の通りです。

  • warファイルを作成しTomcatにコピーする: copyWarタスク
  • Tomcatを再起動する: shutdown, startタスク

warファイルを作成しTomcatにコピーする

copyWarタスクは以下を実行します。

  • warタスクを実行(warを作成)
  • プロジェクトのbuild/libs/gradle-sample.warをTomcatのwebappsディレクトリにコピー

dependsOn指定で前提タスクを実施しているところがポイントです。type: Copyは、ファイルコピーを行うタスクに指定します。dependsOn: warは、このタスクを実行する前にwarタスクを実行する指定です。

Tomcatを再起動する

ProcessBuilderを使用してバッチコマンドを実行しています。

Tomcatディレクトリの取得は、Gradleコマンドの引数として渡されたものを読み込むようにします。これは後述のサーバー側におけるデプロイで同じタスクを使用するためです。

タスクの実行

これらをwarタスクと同じ様に実行します。

  • Eclipseメニューから実行 > 実行構成 > Gradleプロジェクト で右クリックし「新規」
  • 以下を入力し、実行
    • 実行名: gradle-sample deployWar
    • タスク: copyWar shutdown start
      • タスク名は半角スペースまたは改行で区切ります。
    • プログラムの引数: -Dtomcat.home=
      これでtomcat.homeがシステムプロパティとしてGradle実行中に参照できます。環境によって異なる値を扱いたい場合に、これらのオプションが利用できます。
      mgdt_gradlerundeploywar1
      mgdt_gradlerundeploywar2

実行するとGradle実行タブに以下のように表示され、Webアプリケーションも再起動されている事が確認できます(アプリケーションはhelloのメッセージを変える等してお試し下さい)。
mgdt_runtab2


今回はGradleでのタスクの作成を紹介しました。

次回はJenkinsで、今回作成したGradleタスクを実行してみようと思います。


補足事項

Gradleタスクの共有

作成したGradleタスクは、以下のファイルがあれば、Javaが動作する他の環境でも実行可能です。

  • /build.gradle
  • /gradlew.bat
  • /gradlew
  • /gradle/wrapper/gradle-wrapper.jar
  • /gradle/wrapper/gradle-wrapper.properties

Git等でこれらのファイルを共有する事により、開発用サーバーや、他の開発PCでも同様のタスクを実行出来るので、デプロイだけでなく様々なタスクを共有する事で、チーム開発の作業効率を向上出来ます。

LINEで送る
Pocket