Featured image of post sbtでPlayFramework2.7のプロジェクトを作る方法【Java】

sbtでPlayFramework2.7のプロジェクトを作る方法【Java】

sbtを使ってPlayFramework2.7のプロジェクトをJavaで作成する方法。Homebrewでのsbtのインストール、sbt newでのプロジェクト作成(ScalaとJavaの場合)、実行、生成されるディレクトリ構造、JUnitテストの実行まで♪

1116文字

PlayFrameworkプロジェクトを生成しよう

とある案件で、PlayFrameworkプロジェクトを作成する必要が出てきました。

筆者的にはSpringBoot信者なので、PlayFrameworkについては知見が無かったので良い機会なので良い勉強になればと実際に行なった作業をまとめてみようと思います。

The High Velocity Web Framework For Java and ScalaPlay Framework - Build Modern & Scalable Web Apps with Java and Scala

作り方

Homebrewでsbtのインストール

まずはhomebrewからsbtをインストールしましょう。

sbtとはビルドツールの一つで、Gradleと同じ立場のツールと言えます。

基本的にPlayFrameworkでは、sbtを使ってビルドや実行を行う事になります。

brew install sbt
==> Installing sbt
==> Downloading https://github.com/sbt/sbt/releases/download/v1.3.8/sbt-1.3.8.tgz
==> Downloading from https://github-production-release-asset-2e65be.s3.amazonaws.com/279553/5f99d580-46ba-11ea-9a43-f963361b7978?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AKIAIWNJYAX4CSVEH53A%2F20200221%2Fus-east-1%2Fs3%2Faws4_req
######################################################################## 100.0%
==> Caveats
You can use $SBT_OPTS to pass additional JVM options to sbt.
Project specific options should be placed in .sbtopts in the root of your project.
Global settings should be placed in /usr/local/etc/sbtopts
==> Summary
🍺  /usr/local/Cellar/sbt/1.3.8_1: 801 files, 61MB, built in 2 minutes 51 seconds

プロジェクトの作成

Scalaの場合

[adsense-responsive]

sbt new playframework/play-scala-seed.g8

Javaの場合

sbt new playframework/play-java-seed.g8

今回はJavaで作成する要望なのでこちらで作業を進めていきます。

実行ログ
[info] Fetched artifacts of
[info] Set current project to withgradle (in build file:/Users/blogenist/work/play/)
[info] Set current project to withgradle (in build file:/Users/blogenist/work/play/)
[info] downloading https://repo1.maven.org/maven2/org/scala-sbt/sbt-giter8-resolver/sbt-giter8-resolver_2.12/0.11.0/sbt-giter8-resolver_2.12-0.11.0.jar ...
[info] downloading https://repo1.maven.org/maven2/com/github/scopt/scopt_2.12/3.7.0/scopt_2.12-3.7.0.jar ...
[info] downloading https://repo1.maven.org/maven2/org/foundweekends/giter8/giter8_2.12/0.11.0/giter8_2.12-0.11.0.jar ...
[info] downloading https://repo1.maven.org/maven2/org/apache/commons/commons-compress/1.6/commons-compress-1.6.jar ...
[info] downloading https://repo1.maven.org/maven2/org/tukaani/xz/1.4/xz-1.4.jar ...
[info] 	[SUCCESSFUL ] com.github.scopt#scopt_2.12;3.7.0!scopt_2.12.jar (603ms)
[info] 	[SUCCESSFUL ] org.scala-sbt.sbt-giter8-resolver#sbt-giter8-resolver_2.12;0.11.0!sbt-giter8-resolver_2.12.jar (718ms)
[info] 	[SUCCESSFUL ] org.foundweekends.giter8#giter8_2.12;0.11.0!giter8_2.12.jar (972ms)
[info] 	[SUCCESSFUL ] org.tukaani#xz;1.4!xz.jar (1072ms)
[info] 	[SUCCESSFUL ] org.apache.commons#commons-compress;1.6!commons-compress.jar (1312ms)

This template generates a Play Java project

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

Template applied in /Users/blogenist/work/play/./java-sample

実行

これでプロジェクトのベース作成は完了です!

試しにsbt runコマンドを実行してみてください。

sbt run
-- (Running the application, auto-reloading is enabled) ---

[info] p.c.s.AkkaHttpServer - Listening for HTTP on /0:0:0:0:0:0:0:0:9000

(Server started, use Enter to stop and go back to the console...)

すると、上記のログが出力されhttp://localhost:9000/ にアクセスすると画面が表示されます。

とても簡単ですね!

生成ディレクトリ構造

ディレクトリ構成はこのような形になりました。

tree -L 3
.
├── app
│   ├── controllers
│   │   └── HomeController.java
│   └── views
│       ├── index.scala.html
│       └── main.scala.html
├── build.sbt
├── conf
│   ├── application.conf
│   ├── logback.xml
│   └── routes
├── logs
│   └── application.log
├── project
│   ├── build.properties
│   ├── plugins.sbt
│   ├── project
│   │   └── target
│   └── target
│       ├── config-classes
│       ├── scala-2.12
│       └── streams
├── public
│   ├── images
│   │   └── favicon.png
│   ├── javascripts
│   │   └── main.js
│   └── stylesheets
│       └── main.css
├── target
│   ├── scala-2.13
│   │   ├── classes
│   │   ├── routes
│   │   ├── twirl
│   │   └── update
│   ├── streams
│   │   ├── _global
│   │   ├── compile
│   │   ├── runtime
│   │   └── web-assets
│   └── web
│       ├── classes
│       └── public
└── test
    └── controllers
        └── HomeControllerTest.java

32 directories, 14 files

JUnitテストの実行方法

sbtコマンドでPlayFrameworkプロジェクトを作成すると、JUnitを用いたテストクラスのサンプルも自動生成されます。

controllers.HomeControllerTest.java
package controllers;

import org.junit.Test;
import play.Application;
import play.inject.guice.GuiceApplicationBuilder;
import play.mvc.Http;
import play.mvc.Result;
import play.test.WithApplication;

import static org.junit.Assert.assertEquals;
import static play.mvc.Http.Status.OK;
import static play.test.Helpers.GET;
import static play.test.Helpers.route;

public class HomeControllerTest extends WithApplication {

    @Override
    protected Application provideApplication() {
        return new GuiceApplicationBuilder().build();
    }

    @Test
    public void testIndex() {
        Http.RequestBuilder request = new Http.RequestBuilder()
                .method(GET)
                .uri("/");

        Result result = route(app, request);
        assertEquals(OK, result.status());
    }

}

sbt testで実行出来ます。

sbt test
[info] Loading global plugins from /Users/blogenist/.sbt/1.0/plugins
[info] Loading settings for project java-sample-build from plugins.sbt ...
[info] Loading project definition from /Users/blogenist/sample/java-sample/project
[info] Loading settings for project root from build.sbt ...
[info] Set current project to java-sample (in build file:/Users/blogenist/sample/java-sample/)
[info] Compiling 1 Java source to /Users/blogenist/sample/java-sample/target/scala-2.13/test-classes ...
[info] Passed: Total 1, Failed 0, Errors 0, Passed 1
[success] Total time: 4 s, completed 2020/02/21 20:55:43

終わりに

以上のようにわずか数分でPlayFramework2.7の環境が整いました。

Springに勝るとも劣らないJavaフレームワークなので、気になる方は勉強してみてはいかがでしょうか♪