docker放浪記3・dockerでPlayFramework

Masami Koganei
合同会社 Interrupt MEMBER

第三回dockerでPlayFramework

皆さまはJava関係のお仕事をされたことがありますか?

それならばきっと環境構築が面倒くさくて大変という苦労をされたこともあるのではないでしょうか?

PlayFrameworkとは?

Webアプリケーションフレームワークの一つでScalaというプログラミング言語のために使われています。

詳しくはこちらを参照してください。

第三回はこのPlayFrameworkを使用してWebアプリケーションの作成環境を構築して見たいと思います。

  • この辺がキーワードになるので検索してみてください。
    • Java(JDK)
    • scala
    • sbt

VsCodeでフォルダーを開く

今回も例によって適当なフォルダーを作成し、VsCodeのエクスプローラーで開いて見ましょう。

非常にシンプルなつくりなので使用するファイルはdocker-compose.ymlのみになります。特にサブフォルダなど作る必要もないです。

  • 親ディレクトリ
    • docker-compose.yml

docker-compose.yml

以下docker-compose.ymlです。

version: '3'
services:
  app:
    image: hseeberger/scala-sbt:11.0.7_1.3.13_2.12.12
    container_name: sbt
    volumes:
      - .:/root
    ports:
      - "9000:9000"
    expose:
      - "9000"
    tty:
      true

今回は最初にdockerなしでPlayFramework環境を整えてみました。

するとこんなエラーが出てJDK11以下では実行できなかったためimageをhseebergerさんのscala-sbt:11.0.7_1.3.13_2.12.12にして見ました。

java.lang.UnsupportedClassVersionError: 
play/api/PlayException$ExceptionSource has been compiled by a more recent version of the Java Runtime (class file version 55.0), this version of the Java Runtime only recognizes class file versions up to 52.0

これはJDK8ではJDK11のソースはコンパイルできませんよ、ということらしい

環境作り

さてJDK11環境ならdockerを使わずに動作できたので、いよいよdockerを動作させます

docker-compose -p sbt up -d

はい、これですね。VsCodeのターミナルで実行しています。で、見事dockerコンテナが起動したら今度はそのコンテナ内でアプリケーションの雛形を作ります。コンテナ名sbtは何でも良いです

docker exec -it sbt /bin/bash

するとdockerコンテナの中に入るのでプロンプトがこのようになります

root@e8ca801062a1:~#

コンテナから抜ける時はexitですが2回打つとVsCodeのターミナルが閉じてしまうので注意してください。

ここでこのイメージにインストールされているsbtを使ってテンプレートを作成します

sbt new playframework/play-scala-seed.g8 --name=hello

helloという名前のアプリケーションテンプレートを作成します。(名前は何でも良いです)

ここは数分から数十分かかるので気長に待ちましょう。成功するとhelloというディレクトリといくつかのファイルが作られます

ここではテンプレートが読み込めないなどのエラーが出る時がありますがSSHを使って

sbt new https://github.com/playframework/play-scala-seed.g8 --name=hello

のようにして回避できるようです。

さてテンプレートが作成できたら実行しましょう

chmod +x /root/hello
cd hello
sbt run

sbtは時間がかかるので少し待ちましょう

こんなエラーが出る時はhelloの下に作られた/project/plugins.sbtを直して見ましょう

addSbtPlugin("org.playframework" % "sbt-plugin" % "maven(org.playframework, play-exceptions, stable)")

これを

addSbtPlugin("org.playframework" % "sbt-plugin" % "3.0.6")

こんな感じに直すと回避できます。

実行結果

s07

こんな感じでログが流れるのでブサウザで

http://localhost:9000/

にアクセスしましょう

s08

これで/hello以下で作業をすればOKです。