Play Framework 2.5 (Java) の開発環境をEclipseで構築：Mac編

Macに、Play Framework 2.5 (Java)の開発環境をEclipseで構築します。

# 環境

- macOS 10.12 Sierra
- Play 2.5.10
- JDK 1.8.0
- Eclipse 4.6 Neon

# 事前準備
事前に以下の設定をしておく。

- HomeBrewのインストール
    - 参考：[Homebrew — macOS 用パッケージマネージャー](http://brew.sh/index_ja.html)
- JDK 1.8のインストール
    - 参考：[Mac OS X にJDK 1.8をインストール - Qiita](http://qiita.com/ykt68/items/3432f44e9635581f3621)
- Eclipse 4.6のインストール
    - 参考：[Macでのeclipseのインストールと日本語化 - REIN備忘録](http://rein-lieben.hatenablog.com/entry/2015/08/28/150556)

# Typesafe Activatorのインストール

brewコマンドでTypesafe Activatorをインストールする。

```
$ brew install typesafe-activator
```

インストール後、下記コマンドで正常インストールを確認する。

```
$ activator -help
Usage: activator [options]
...
```

# 新規プロジェクトの作成

activatorを使用してプロジェクトを作成する。

カレントディレクトリにディレクトリが作成されるため、任意のディレクトリに移動した後、`activator new`コマンドを実行する。

```
$ activator new
```

使用するテンプレートの入力が求められるため、```5) play-java```を選択する。

```
Fetching the latest list of templates...

Browse the list of templates: http://lightbend.com/activator/templates
Choose from these featured templates or enter a template name:
  1) minimal-akka-java-seed
  2) minimal-akka-scala-seed
  3) minimal-java
  4) minimal-scala
  5) play-java
  6) play-scala
(hit tab to see a list of all templates)
> 5
```

プロジェクト名の入力が求められるため、任意の名前（例：`HelloWorld`）を入力する。

```
Enter a name for your application (just press enter for 'play-java')
> HelloWorld
```

コマンド終了後、カレントディレクトリにプロジェクトが作成されていることを確認する。

```
$ ls
HelloWorld

$ ls HelloWorld
LICENSE		app		build.sbt	libexec		public
README		bin		conf		project		test
```

# Eclipseへの取り込み設定

プロジェクトをEclipseに取り込めるよう設定する。

`project/plugins.sbt`をテキストエディタで開き、末尾に以下を追加する。

```project/plugins.sbt
addSbtPlugin("com.typesafe.sbteclipse" % "sbteclipse-plugin" % "4.0.0")
```

`build.sbt`をテキストエディタで開き、末尾に以下を追加する。

```build.sbt
EclipseKeys.preTasks := Seq(compile in Compile)
EclipseKeys.projectFlavor := EclipseProjectFlavor.Java
EclipseKeys.createSrc := EclipseCreateSrc.ValueSet(EclipseCreateSrc.ManagedClasses, EclipseCreateSrc.ManagedResources)
```

プロジェクトディレクトリ内でcomplieとeclipseコマンドを実行する。

```
$ cd HelloWorld
$ activator compile
$ activator eclipse
```


# Eclipseへの取り込む

Eclipseを起動し、ファイル＞インポート＞一般＞既定のプロジェクトをワークスペースへ にて作成したプロジェクトを取り込む。
取り込み後、エラーが出ていないことを確認する。

# 実行

1. 実行＞外部ツール＞外部ツールの構成
2. プログラムを選択し、右クリック＞新規
3. 以下のように設定する。
    - 名前：activator run
    - ロケーション：/usr/local/bin/activator
    - 作業ディレクトリ：${project_loc}
    - 引数：run

![スクリーンショット 2016-12-29 14.19.10.png](https://qiita-image-store.s3.amazonaws.com/0/157243/e7847021-07cd-b9c0-7ac0-b876ec5d7417.png)
4. 適用、閉じる
5. パッケージ・エクスプローラーでプロジェクトを選択する。
6. 'activator run'実行する。
7. 起動後、 http://localhost:9000 にアクセスする。



# 実行停止

1. コンソール・ビューにある終了ボタンを押下して終了する。

![スクリーンショット 2016-12-29 14.26.38.png](https://qiita-image-store.s3.amazonaws.com/0/157243/1322b903-47fb-1e78-f065-0a7948833985.png)

# デバッグ実行
## activator 起動

1. 実行＞外部ツール＞外部ツールの構成
2. プログラムを選択し、右クリック＞新規
3. 以下のように設定する。
    - 名前：activator debug
    - ロケーション：/usr/local/bin/activator
    - 作業ディレクトリ：${project_loc}
    - 引数：-jvm-debug 9999 run
4. 適用、閉じる
5. パッケージ・エクスプローラーでプロジェクトを選択する。
6. 'activator debug'を実行する。


## Eclipseのデバッグ起動
1. 実行＞デバッグの構成
2. リモートJavaアプリケーションを選択し、右クリック＞新規
3. 以下のように設定する。
    - プロジェクト：HelloWorld
    - 接続プロパティ：localhost
    - ポート：9999
4. デバッグ
5. 任意箇所（HomeController#indexなど）にブレイクポイントを設定し、デバッグできることを確認する。


# トラブルシューティング

activator run時、以下のエラーが発生する。

```
‘activator runの起動’ に問題が発生しました。変数が空の選択を参照しています: ${project_loc}
```

パッケージ・エクスプローラーでプロジェクトを選択できていないかアクティブでないため。
パッケージ・エクスプローラーでプロジェクトを再選択する。

---

activator run時、以下のように「`[0m`」といったコンソール出力になる。

```
[0m[[0minfo[0m] Loading project definition from /Users/xxx/Desktop/develop/HelloWorld/project[0m
[0m[[0minfo[0m] Set current project to HelloWorld (in build file:/Users/xxx/Desktop/develop/HelloWorld/)[0m

[35m--- (Running the application, auto-reloading is enabled) ---[0m

[[37minfo[0m] p.c.s.NettyServer - Listening for HTTP on /0:0:0:0:0:0:0:0:9000

[32m(Server started, use Ctrl+D to stop and go back to the console...)[0m
```

ANSIエスケープシーケンスが有効になっていないため。
ヘルプ＞Eclipseのマーケットプレース から、「ANSI Escape in Console」というプラグインをインストールする。

---