IDEA(Com)+SpringBoot+MavenでHello Worldなwebアプリを書いてみる

# 経緯
- SpringBoot+MavenでのHelloWorldをIntelliJ IDEAのUltimateエディションで[書いてみた](https://qiita.com/12345/items/96dad7d473c6ec000b81)のと同じことを、Communityエディションで書くとどうなるかやってみた。

# 感想
- Ultimateほどはサクッとは書けなかった。
- Ultimateの場合、`Spring Initializr`によって、
    - 依存関係をリストから選べる
    - pom.xmlの必要な設定を自動的に書いてくれる
    - 実行/デバッグの設定を自動的に作ってくれる
    - アプリケーションクラスを自動的に作ってくれる
- ちなみに`Spring Initializr`は[Webサイト](https://start.spring.io/)からも利用できるので、これとCommunityを組み合わせてUltimateに近い作り方が[できなくもない](https://qiita.com/12345/items/c2b6d9d3bf3df0152c4e)。

# 環境
- Windows10 Home
- IntelliJ IDEA Community 2017.2.4
- JDK1.8

あと、使用したSpringBootのバージョンは、この時点でのCURRENT GAの1.5.7

# 手順
##IDEAを起動する

![image.png](https://qiita-image-store.s3.amazonaws.com/0/181011/8acb5995-ae80-e983-1fcc-217238700654.png)

##新規プロジェクトの作成
- すでに何らかのプロジェクトが開いていたら、`File` - `New` - `Project`...
- プロジェクトが開いていない状態だったら、`Create New Project`をクリック
- `New Project`の画面が開く

![image.png](https://qiita-image-store.s3.amazonaws.com/0/181011/b45daec8-5ecb-291a-85a4-675cc5934833.png)

- 左のリストから`Maven`をクリック
- `Project SDK`はPCに入っているJDKを適当に選択
- `Next`をクリック

![image.png](https://qiita-image-store.s3.amazonaws.com/0/181011/1abfafe5-6706-0aeb-e943-2c0903fba2f6.png)

- `GroupId`と`ArtifactId`を適当に入力
- `Next`をクリック

![image.png](https://qiita-image-store.s3.amazonaws.com/0/181011/3a379872-2d17-ca7d-b331-cc54214c35c0.png)

- `Project name`と`Project location`を適当に設定
- `Finish`をクリック
- プロジェクトが作成される

![image.png](https://qiita-image-store.s3.amazonaws.com/0/181011/f11e5521-cca4-c568-3aeb-fe1f94020eee.png)

- 画面右下に`Maven projects need to be imported`と表示されていたら、`Enable Auto-Import`をクリックしておくと、pom.xmlを書き換える都度、必要な依存関係を自動的にインポートしてくれる。

## pom.xmlの記述
pom.xmlが画面に表示されているので、ここにspring-boot-starterの親要素の指定、依存関係の指定(`spring-boot-starter-web`と`spring-boot-starter-thymeleaf`を追加)、およびビルド時にMavenでspring-bootを利用できるようにするためのプラグインの指定を追記する。

```xml
<parent>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-parent</artifactId>
  <version>1.5.7.RELEASE</version>
</parent>

<dependencies>
  <dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
  </dependency>
  <dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-thymeleaf</artifactId>
  </dependency>
</dependencies>

<build>
  <plugins>
    <plugin>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-maven-plugin</artifactId>
    </plugin>
  </plugins>
</build>
```

![image.png](https://qiita-image-store.s3.amazonaws.com/0/181011/a64575ba-74d5-7c72-c9fc-736b92dffd5a.png)

## アプリケーションクラスの作成
- 画面左のProjectビューの`demo`プロジェクトのツリーを開き、`src` - `main` - `java` を右クリックし、`New` - `Java Class`を選択
- `Name`に`com.example.demo.DemoApplication`と入力し、`OK`をクリック
- クラス宣言の上に`@SpringBootApplication`アノテーションを付加
- main()メソッドを記述する

```java
public static void main(String[] args) {
  SpringApplication.run(DemoApplication.class, args);
}
```

![image.png](https://qiita-image-store.s3.amazonaws.com/0/181011/357eb8a8-26b2-95fd-c3b7-5f7d905566b7.png)

## コントローラの作成
- `demo`プロジェクトのツリーの`com.example.demo`パッケージを右クリックし、`New` - `Java Class`を選択
- `Name`に`controller.HelloController`と入力し、`OK`をクリック
- クラス宣言の上に`@Controller`アノテーションを追加
- クラスの中に`getHello()`メソッドを追加

```java:
    @GetMapping
    public String getHello() {
        return "hello";
    }
```

![image.png](https://qiita-image-store.s3.amazonaws.com/0/181011/00bd57eb-d571-3ad6-2f58-82f112e7a1f7.png)

## テンプレートの作成
- `demo`プロジェクトツリーの `src` - `main` - `resources`フォルダを右クリックし、`New` - `HTML File`を選択
- `Name`に`templates/hello`と入力し、`OK`をクリック
- `<body>`タグに`Hello World!`と書く
- あと、`<meta>`タグがこのままだと実行時にthymeleafのエラー（タグが閉じてないよ！エラー）になるので、末尾を`/>`に書き換える

![image.png](https://qiita-image-store.s3.amazonaws.com/0/181011/252ebcd2-9a10-6382-77e7-15c3d4742f1d.png)

## アプリケーションの起動
- `DemoApplication`アプリケーションクラスを右クリックし、`Run DemoApplication.main()`を選択
- アプリケーションが起動され、コンソールログがつらつらと表示され始める

![image.png](https://qiita-image-store.s3.amazonaws.com/0/181011/0cb32fe6-ce8a-3e1f-a805-26efac606895.png)

- そのうち`Tomcat started on ...`と表示され、内部のTomcatが起動されたことがわかる
- 最後に`Started DemoApplication in ...`と表示されれば起動完了

## 動作確認
- ブラウザから、`localhost:8080`にアクセスする

![image.png](https://qiita-image-store.s3.amazonaws.com/0/181011/4b455275-bd2c-9a27-b0c7-367c6faee71f.png)

- できた。