Spring Initializrでアプリケーションのひな型を作成する

# 概要

[Spring Initializr] (https://start.spring.io/)を利用してSpring Bootアプリケーションのひな型を作成する方法のメモです。
開発ツールにはPleiades All in One Eclipseを使用します。

**環境**

* Windows 10 Professional 1903
* Pleiades All in One Eclipse 2018-09
* Spring Boot 2.1.6

# 作成手順

[Spring Initializr] (https://start.spring.io/)にアクセスします。図のようなページが表示されると思います。(2019/08現在)
![01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/22772/fd84a0b4-c7a6-31c1-89bb-fcc1f94f4295.png)

`Dependencies`で使用する機能を追加します。追加するのは以下の3つです。

**Spring Web Starter**

![02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/22772/4a4560de-eed1-8bde-e388-a4e271227491.png)

**Spring Boot Actuator**

![03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/22772/8b594312-1eca-76bd-0b64-b57932db17d5.png)

**Thymeleaf**

![10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/22772/3947a6d8-26f9-b1d3-5a02-d3e893b9da2b.png)

最後に緑色の`Generate the project`ボタンをクリックすると、demo.zipというファイルのダウンロードが始まります。
![04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/22772/05ef8b8b-82f1-5804-351e-8cb1dc2c186f.png)

ダウンロードしたdemo.zipを展開し、作成されたdemoディレクトリをEclipseのワークスペース内へコピーします。
この記事では以下の場所へコピーしたという前提で説明を進めます。

```
C:\dev\eclipse_workspace\demo
```

# Mavenでビルドする

コマンドプロンプトを起動し、カレントディレクトリをdemoディレクトリに変更します。

```
> cd C:\dev\eclipse_workspace\demo
```

次のコマンドでJAVA_HOME環境変数がセットされているか確認します。

```
> echo %JAVA_HOME%
```

コマンドの実行結果が何も表示されなかった場合セットされていません。
この場合、以下のコマンドでセットします。\<JAVAのインストールディレクトリ\>にはJAVAのインストールディレクトリをフルパスで指定します。

```
set JAVA_HOME=<JAVAのインストールディレクトリ>
```

例えば、以下のようになります。

```
set JAVA_HOME=C:\openjdk\jdk-11.0.2
```

次のコマンドでビルドを行います。ログが大量に出力されますが最後の方に"BUILD SUCCESS"というメッセージが出力されていればビルドは成功です。

```
mvnw clean install

// ... 省略 ...


[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  01:04 min
[INFO] Finished at: 2019-08-05T21:05:58+09:00
[INFO] ------------------------------------------------------------------------
```

# Spring Bootアプリケーションの起動

次のコマンドでアプリケーションを起動します。起動されるとログのなかに"Started DemoApplication in x.xxx seconds"のようなメッセージが出力されます。

```
> mvnw spring-boot:run

// ... 省略 ...

INFO 7276 --- [           main] com.example.demo.DemoApplication         : Started DemoApplication in 5.188 seconds (JVM running for 11.517)
```

アプリケーションが起動したらブラウザで次のアドレスにアクセスします。

http://localhost:8080/actuator

下記の情報がブラウザに表示されれば成功です。（環境によっては整形されずに表示されることがありますが問題ありません。）

```json
{
    "_links": {
        "self": {
            "href": "http://localhost:8080/actuator",
            "templated": false
        },
        "health": {
            "href": "http://localhost:8080/actuator/health",
            "templated": false
        },
        "health-component": {
            "href": "http://localhost:8080/actuator/health/{component}",
            "templated": true
        },
        "health-component-instance": {
            "href": "http://localhost:8080/actuator/health/{component}/{instance}",
            "templated": true
        },
        "info": {
            "href": "http://localhost:8080/actuator/info",
            "templated": false
        }
    }
}
```

アプリケーションの起動が確認できたら、コマンドプロンプト上で<kbd>Ctrl + C</kbd>を押し、以下のメッセージに`y`を入力して終了します。

```
バッチ ジョブを終了しますか (Y/N)? y
```

# ひな型をEclipseに取り込む

Eclipseを起動しJava EEパースペクティブを開きます。
まだ開いていない場合は、メニューバー → `ウィンドウ` → `パースペクティブ` → `パースペクティブを開く` → `その他` → `Java EE`を選択。
![09.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/22772/673227f2-dee9-b888-64d5-0564adf659c1.png)

プロジェクト・エクスプローラー上で右クリック → `インポート` → `インポート...` → `Maven` → `既存 Maven プロジェクト` → `次へ`ボタンをクリック。
![05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/22772/f70f9974-85dc-4286-c40b-d3ad1c7b6304.png)

ルート・ディレクトリーにdemoディレクトリを指定します。
![06.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/22772/8957d9be-ed56-af67-285f-c8c9dee8253c.png)

図はプロジェクトを取り込んだ直後の状態です。pom.xmlに赤いエラーマークが付いているのでpom.xmlを編集します。
![07.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/22772/22899e67-2428-5b29-8c26-71d6aaa7d1d7.png)

編集する箇所は`properties`要素です。

```text
<properties>
	<java.version>1.8</java.version>
</properties>
```

下記のように1行追加します。

```text
<properties>
	<java.version>1.8</java.version>
	<maven-jar-plugin.version>3.1.1</maven-jar-plugin.version>
</properties>
```

赤いエラーマークが消えたら、プロジェクト名を右クリック → `Maven` → `プロジェクトの更新`を実行します。

# Spring Bootアプリケーションの起動

EclipseからSpring Bootアプリケーションを実行します。
図のようにDemoApplicationクラスファイルを開き、mainメソッドを右クリック → `実行` → `Spring Boot アプリケーション`を実行します。
![08.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/22772/9ddf0d4c-50ba-8d57-841d-592473f2a249.png)

アプリケーションが起動するとEclipseのコンソールにアプリケーションの起動ログが出力されます。
ログのなかに"Started DemoApplication in x.xxx seconds"というメッセージが出力されていれば起動済みです。

先ほどと同じようにブラウザで次のアドレスにアクセスします。

http://localhost:8080/actuator

ブラウザに結果が表示されれば成功です。コンソールの赤い四角いマークをクリックしてアプリケーションを停止させます。

# コントローラの追加

このひな型にシンプルなコントローラを追加してみます。

controllerパッケージを追加します。
![11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/22772/02c5e060-2e1c-ae59-f4af-bc98e758263c.png)

controllerパッケージにIndexControllerクラスを追加します。
![12.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/22772/312a4ae4-14e9-f0cb-3e3f-10ef62f39e57.png)

コントローラのソースコードは以下の通りです。
![13.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/22772/a2d28b75-3c9b-da22-a7e4-1b7406b0430b.png)

```java
package com.example.demo.controller;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;

@Controller
public class IndexController {

	@GetMapping(value = {"/", ""})
	public String index(Model model) {
		model.addAttribute("message", "ハローワールド!");
		return "index";
	}

}
```

# テンプレートの追加

`src/main/resources/templates`にindex.htmlファイルを作成します。
![14.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/22772/42a9f34b-214d-e5d9-4a9c-d0429d16908f.png)

```html
<!DOCTYPE html>
<html lang="ja" xmlns:th="http://www.thymeleaf.org">
<head>
  <meta charset="UTF-8">
  <meta name="viewport"content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
  <meta http-equiv="X-UA-Compatible" content="ie=edge">
  <title>index</title>
</head>
<body>
  <div id="app">
    <h1>index</h1>
    <p th:text="${message}">Hello World!</p>
  </div>
</body>
</html>
```

アプリケーションを起動し http://localhost:8080/ にアクセスします。
ブラウザに「ハローワールド!」というメッセージが表示されれば成功です。