PlayFrameworkを触ってみる

# 今日の目標
Play Flameworkを触ってみる

# 使ったもの
* [TypeSafe Activator 1.3.7](https://www.typesafe.com/activator/download)
* Windows 8.1

# 参考
* [Play-Documentation](https://www.playframework.com/documentation/ja/2.3.x/Home)

# Play Frameworkとは
> Play Framework（プレイ・フレームワーク）は、ScalaとJava言語で書かれたオープンソースのWebアプリケーションフレームワークである。Model View Controller (MVC) アーキテクチャを採用しており、設定より規約やホットリローディング、エラーのブラウザ上への表示といった方針により、開発者の生産性を上げることを目的としている。

初版は2007年。最近まであまり聞いたことがなかったので新しいものなのかな、と思ってましたが、意外と古かったことに驚き。

# ではスタート
## 準備
まず、TypeSafe Activatorが必要だということなので、zipを落として任意の場所に展開しましょ
う（使ったもの参照）。

展開したActivatorがあるディレクトリを環境変数に設定します。

```
PATH=【Activatorを展開した場所（activator.bat等があるフォルダを指定する）】
```

## テンプレートでアプリケーションを作成する

まずはコマンドプロンプトでテンプレートを使ってアプリケーションを作成します。
```> activator new my-first-app play-java```
![play4.png](https://qiita-image-store.s3.amazonaws.com/0/97937/b593fa0f-b8d0-54a8-6eeb-037e17a472b3.png)

次に、作ったフォルダ内に移ってActivatorのUIを起動してみます。UIからでなくてもアプリケーションの起動等はできるようですが、せっかくUIあるので使ってみようかと。
```> cd my-first-app```
```> activator ui```
![play5.png](https://qiita-image-store.s3.amazonaws.com/0/97937/58de6a34-a526-2e2b-54f3-12e043501b5e.png)

Listeningが表示され、8888ポートで受け付けますよーと出てます。案内の通り、`localhost:8888`にアクセスします。
![play6.png](https://qiita-image-store.s3.amazonaws.com/0/97937/be053b9d-570c-4602-9770-ff4e0de114f8.png)

きたきた～！
灰色のスペースにRunと書かれているボタンっぽいのが見えると思います。これを押すと、アプリケーションが起動します。
![play6_1.png](https://qiita-image-store.s3.amazonaws.com/0/97937/5424da0e-82d6-ce90-454f-8cc9b47fd5fc.png)

そして`http://localhost:9000`のボタンをポチリと押すと、アプリケーションがブラウザに表示される、と！
![play7.png](https://qiita-image-store.s3.amazonaws.com/0/97937/54b7591c-9324-b3e6-263a-aad05a4a30ad.png)

![play8.png](https://qiita-image-store.s3.amazonaws.com/0/97937/2a5996d9-13a6-9bf8-c054-e30fb5fe6f03.png)

表示された！

## Eclipseプロジェクトに変換する
Eclipseを主に使っているので、Eclipseプロジェクトに作成したアプリケーションを変換してみたいと思います。
まずは、Activatorの左メニューから`Code`を選択します。すると、右側に`Browse your app’s code`というのが出てきてますね。その下に、ボタンが2つ並んでおり、`Create Eclipse project`と`Create IntelliJ project`があります。Eclipseを使う場合は、もちろん`Create Eclipse project`を選択します。
![play9.png](https://qiita-image-store.s3.amazonaws.com/0/97937/9a289cf7-3414-5802-90ff-55aaa248e4cd.png)

するとBuild tasksがたくさん走り、最後が`Successfully created Eclipse～`と出たら完了です。フォルダの中を見てみると、`.project`等おなじみのファイルが作られていますね。
![play12.png](https://qiita-image-store.s3.amazonaws.com/0/97937/f7d0f9a0-a5eb-21bf-35bf-10f5146e5f7a.png)

![play15.png](https://qiita-image-store.s3.amazonaws.com/0/97937/70d3a463-74ea-b3a6-fe0b-eb05786df775.png)

Eclipseを開いて、`ファイル->インポート->既存プロジェクトをワークスペースへ`を選択します。
![play13.png](https://qiita-image-store.s3.amazonaws.com/0/97937/e83da79b-4a22-c18e-4575-3c918ea51b9f.png)

ルートディレクトリを指定して、完了！
![play14.png](https://qiita-image-store.s3.amazonaws.com/0/97937/c4475f79-e969-16a1-5c42-b5346b81374c.png)

## 少し修正してみる
本当に気持ち程度Eclipseで修正します。
okの中を変えただけです。
![play17.png](https://qiita-image-store.s3.amazonaws.com/0/97937/8ae3e0da-1a2a-5c43-5ed6-e5ac550e8681.png)

>アクションは play.mvc.Result 型の値を返し、これはクライアントへ送信される HTTP レスポンスを表しています。上記の例では、ok は コンテントタイプ text/plain のレスポンスボディを含む、ステータス 200 OK のレスポンスを生成します。（[Playframeworkガイド](https://www.playframework.com/documentation/ja/2.3.x/JavaActions)）

okの意味は200 okの意味なんですね。ほかにもFotFoundとかinternalServerErrorとか、Webアプリでたまに見かけるエラーのレスポンスが設定できるみたいです。

ちなみにファイルの内容が変わるとActivatorのコンパイルが走ります。（嫌な人はActivatorのBuildメニューにある`Compile on file change`をoffにしてください）
![play18.png](https://qiita-image-store.s3.amazonaws.com/0/97937/6b2ddff7-ca1d-2c67-6e6e-85732d672422.png)

結果。ただ単にテキストが返ってきてるだけですね。
![play19.png](https://qiita-image-store.s3.amazonaws.com/0/97937/c7c1da1b-1ba0-83c3-8b38-192aca994fea.png)


こんな感じでした。
エラーにつまずくと、何が起きているのかがわからないので不便。中で何を使っているのか、何してるのかくらいは知っておいたほうが良さそうだなあ、と思いました。（でもActivatorの中とか把握できそうにないから困る）

Playframeworkはガイドが充実してますね。日本語ガイドあるのは幸せ。
そして、いろいろ動かしているとメモリ4GBの私のPCさんだと結構辛いな…と思った本日でした。Eclipseが固まる固まる…。Playframeworkはメモリとの戦いだった。


## 本日のエラー
最初、テンプレートでアプリケーション新規作成する手順をUIでやっていたのですが、うまくいかなかったので晒しときます。

アプリの新規作成（activator new）をせずに、`> activator ui`を実行。
テンプレートから`Hello Play Framework(Java Only)`を選択。
![play1.png](https://qiita-image-store.s3.amazonaws.com/0/97937/ec09db62-8cbf-e78d-3eba-67cc575bc7fd.png)

作成場所を選択して、完了ボタンをポチリ。しばらく待っていると…
![play_error1.png](https://qiita-image-store.s3.amazonaws.com/0/97937/b58e787e-9efb-8296-32d7-4908e550af07.png)

`Failed to load sbt configuration`と出てます。
左メニューから`Build`を選択してログを見てみると、Build.sbtでなぜかエラーが出てます。
![play_error2.png](https://qiita-image-store.s3.amazonaws.com/0/97937/54da5945-7cca-79bb-50a2-2d3517276802.png)

この原因がわからないまま。とりあえずコマンドプロンプト上でアプリケーションを作成し、それをUIで管理するという方法に切り替えました。