LoginSignup
6
6

More than 3 years have passed since last update.

【Java】【Play Framework】Gradleでプロジェクトを起動するまで

Last updated at Posted at 2019-12-16

数年ぶりにPlay Frameworkを触ろうとしたら変化があったことと、Gradleを使いたいと思ったので、Gradleを使ったプロジェクトの起動までを忘備録として残しておきます。
Play Frameworkは、JavaまたはScalaを使った開発ができるフルスタックのWebアプリケーションフレームワークです。
今回は比較的入りやすい、Javaでのプロジェクトを想定して書いています。

この記事での目標

  • Play Frameworkを使うのに必要なツールをインストールする
  • Gradleを使ってPlay Frameworkの開発用サーバーを起動する

環境

  • macOS Catalina 10.15.2
  • HomeBrew

概要

  1. 必要なツールをインストールする
    1. Java
    2. sbt
    3. Gradle
  2. プロジェクトを作成する
    1. テンプレートプロジェクトの作成
    2. 任意のディレクトリにプロジェクトをダウンロードしたい時は
  3. Gradleを使用したPlay Frameworkプロジェクトの起動
    1. build.gradleの設定
    2. 1.3. Applying the plugin
    3. 3.1. Adding dependencies
    4. 4.1. Targeting a Play version
    5. 4.2. Configuring routes style
    6. 開発用サーバーで起動する

必要なツールをインストールする

Java

公式の必要環境の情報(https://www.playframework.com/documentation/2.8.x/Requirements)を確認すると、Java SE 1.8 or higherと表記されているので、Javaの最新版をインストールします。

brew cask install java

sbt

Java、またはScalaを使用したアプリケーション作成に使用するビルドツールです。
公式の必要環境の情報(https://www.playframework.com/documentation/2.8.x/Requirements)にsbtの記述がありますので、これもインストールします。

brew install sbt

Gradle

主にJava、Scalaをターゲットにしたビルド自動化システムで、プラグインを使うことで色々なフレームワークやJVM言語への対応ができます。公式のプラグイン情報(https://plugins.gradle.org/)を見ると、kotlinやSpring bootのなどのプラグインがあります。
Play Frameworkに関しては、Gradle 5までは本体側に対応があったようですが、Gradle 6からはプラグインでの対応に変更されています。(https://docs.gradle.org/current/userguide/play_plugin.html

brew install gradle

プロジェクトを作成する

この作業を始める前に、Gradle Play Pluginの公式を確認しましょう。サポートするPlay Frameworkのバージョンが記載されています。
実は、現時点(※2019/12)ではPlay Frameworkの2.6系までしかサポートされていません。
ということで、今回は2.6系の最終バージョンである2.6.25での作成を目指します。

テンプレートプロジェクトの作成

Play Framework公式の新規プロジェクト作成の解説を確認すると、Java templateScala templateの2種類の記載があります。
今回はJavaでの開発を目指すため、Java templateの方を使います。
……が、記載されたコマンドをそのまま実行すると、Github上のテンプレートプロジェクトから最新のテンプレートをダウンロードして作成してしまいます。
今回は最新(2019/12時点では2.8.0)ではなく2.6.25で作成するため、ブランチを指定する必要があります。
ブランチを指定する方法を探し回ると、sbtの公式で--branchパラメータについて触れているページがありました。

sbt - Giter8 parameters

ターミナルで任意のディレクトリへ移動して以下のコマンドを実行します。

sbt new playframework/play-java-seed.g8 --branch 2.6.x

しばらくすると、ターミナル上で以下の項目を順番に聞かれます。

name [play-java-seed]:
organization [com.example]:

この2つは入力せずにそのままenterで飛ばして構いません。

処理終了まで待つと、ディレクトリ直下にplay-java-seedの名前でディレクトリが作成され、その中にテンプレートプロジェクト一式がダウンロードされます。

任意のディレクトリにプロジェクトをダウンロードしたい時は

ここまでやるとこう思いませんか?
「このテンプレートプロジェクトを、別のプロジェクト名でダウンロードしたい」
そういう時は、--name=[プロジェクト名]オプションを使うことで好きなプロジェクト名で作成できます。
このオプションに関しては、sbt newコマンドが内部的に使用しているGiter8のヘルプに書かれています。

Giter8 - 使用方法

以下のコマンドを実行すると、任意のディレクトリ直下にplay-sampleのプロジェクト名で2.6.xのテンプレートプロジェクトをダウンロードできます。

sbt new playframework/play-java-seed.g8 --branch 2.6.x --name=play-sample

Gradleを使用したPlay Frameworkプロジェクトの起動

build.gradleの設定

無事にプロジェクトを作成できたら、プロジェクトをIDEで開いてみましょう。
今回はIDEに関しての話は省略しますが、Android以外のJava開発でよく使われるのはecipseIntelliJ IDEAですね。
プロジェクトを開いて確認すると、プロジェクトの直下にbuild.gradleというファイルがあります。
このファイルは、Gradleでプロジェクトをビルドするための設定ファイルです。
ダウンロードしてきた時点ではGradle 5ベースの設定になっていますので、これをGradle Play Pluginに対応するために修正していきます。
設定変更の参考にするのは、Gradle Play Plugin公式の「1.3. Applying the plugin」、「3.1. Adding dependencies」、「4.1. Targeting a Play version」、「4.2. Configuring routes style」の4項目です。

1.3. Applying the plugin

Gradleに読み込むプラグインの設定です。
ダウンロードしてきた時点では、以下のような記述になっています。

build.gradle
plugins {
    id 'play'
    id 'idea'
}

id: 'play'となっている項目が、Gradle 5まで使われていたプラグインを読み込む設定です。
これを以下のようにして、Gradle Play Pluginを読み込む形に変更します。

build.gradle
plugins {
    // id 'play'
    id 'org.gradle.playframework' version '0.9'
    id 'idea'
}

3.1. Adding dependencies

プロジェクトのビルド時に使用する依存ライブラリの設定です。
ダウンロードしてきた時点では、以下のような設定になっています。

build.gradle
dependencies {
    play dependencyFor("com.typesafe.play:play-guice", scalaVersion, playVersion)
    play dependencyFor("com.typesafe.play:play-logback", scalaVersion, playVersion)
    play dependencyFor("com.typesafe.play:filters-helpers", scalaVersion, playVersion)
}

GradleでのPlay対応が無くなり、Gradle Play Pluginに移行したことで依存ライブラリの設定方法が変更されています。
Gradle Play Plugin公式の解説を参考にして、2.6.25に対応したライブラリを読み込むように変更します。

build.gradle
dependencies {
//    play dependencyFor("com.typesafe.play:play-guice", scalaVersion, playVersion)
//    play dependencyFor("com.typesafe.play:play-logback", scalaVersion, playVersion)
//    play dependencyFor("com.typesafe.play:filters-helpers", scalaVersion, playVersion)
    implementation "commons-lang:commons-lang:2.6"
    implementation "com.typesafe.play:play-guice_2.12:2.6.25"
    implementation "ch.qos.logback:logback-classic:1.2.3"
    testImplementation "org.scalatestplus.play:scalatestplus-play_2.12:3.1.2"
}

今回は2.6.25で動かすため、com.typesafe.play:play-guiceのライブラリバージョンを、Gradle Play Plugin公式で提示された2.6.15ではなく、2.6.25に変更しています。

4.1. Targeting a Play version

ビルド時にターゲットとするPlay Framework、Java, Scalaのバージョンの設定です。
ダウンロードしてきた時点では、以下のような設定になっています。

build.gradle
def playVersion = "2.6.22"
def scalaVersion = System.getProperty("scala.binary.version", /* default = */ "2.12")

...

model {
    components {
        play {
            platform play: playVersion, scala: scalaVersion, java: '1.8'
            injectedRoutesGenerator = true

            sources {
                twirlTemplates {
                    defaultImports = TwirlImports.JAVA
                }
            }
        }
    }
}

Gradle Play Pluginに移行したことでフォーマットが変更されているので、Gradle Play Plugin公式の記載に従って変更します。
また、今回は使用するPlay Frameworkのバージョンを2.6.25としますので、playVersionの記述も変更します。

build.gradle
def playVersion = "2.6.25"
def scalaVersion = System.getProperty("scala.binary.version", /* default = */ "2.12")

...

play {
    platform {
        playVersion=playVersion
        scalaVersion=scalaVersion
        javaVersion=JavaVersion.VERSION_13
    }
}

javaVersionパラメータの設定は、ビルドに使用するJavaのバージョンに合わせて変更します。

2019/12時点ではbrew cask install javaの実行時にバージョンを指定しなければ、Java 13がインストールされます。
ですので、バージョンの情報をGradleで定義されたJavaVersion.VERSION_13で指定します。
他のバージョンの定義情報についてはGradle公式リファレンスの以下ページに記載されています。

JavaVersion (Gradle API 6.0.1)

4.2. Configuring routes style

Play FrameworkでURLとControllerを関連付けるのに使用するroutesの形式をStaticRoutesGeneratorとするか、InjectedRoutesGeneratorとするかの設定です。
Play Frameworkの2.4以降ではInjectedRoutesGeneratorがデフォルトの設定になりますので、以下のように設定を追加します。

build.gradle
play {
    platform {
        playVersion=playVersion
        scalaVersion=scalaVersion
        javaVersion=JavaVersion.VERSION_13
    }
    injectedRoutesGenerator = true
}

開発用サーバーで起動する

ターミナルに戻って、以下のコマンドを実行します。

gradle runPlay

ビルドに成功し、開発用サーバーが起動すると、以下のような表示になります。

BUILD SUCCESSFUL in 1s
7 actionable tasks: 1 executed, 6 up-to-date

Waiting for changes to input files of tasks... (ctrl-d to exit)
<=============> 100% EXECUTING [1m 49s]
> IDLE

この表示になったら、http://127.0.0.1:9000へブラウザでアクセスします。
こんな画面が表示されていれば、起動成功です。

スクリーンショット 2019-12-16 18.25.11.png

6
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
6