SpringBootを使った最小Webアプリケーションの起動

#設定環境
・Windows10
・Eclipse Neon(4.6.0)
　STSプラグイン インストール済み
・Java 1.8.0_92

#プロジェクトの作成

ファイル - 新規 - Mavenプロジェクト
![image](https://qiita-image-store.s3.amazonaws.com/0/136774/a4bc8b5b-a02a-e22f-6313-289a31126c27.png)


シンプルなプロジェクトの作成(s)を選択し、｢次へ｣
![image](https://qiita-image-store.s3.amazonaws.com/0/136774/a6505c35-6908-e2bb-d982-6ec46c867099.png)

MavenプロジェクトのグループId、アーティファクトId、バージョン、パッケージングを適当に設定し、｢完了｣
![image](https://qiita-image-store.s3.amazonaws.com/0/136774/9ebeb362-c3d6-1060-1ed3-9da0b89594cd.png)

Mavenにより、プロジェクトが自動更新されるので、しばらく待つ。(右下のステータス情報で進捗確認)
完了後は以下のような構成のプロジェクトが作成される。

![image](https://qiita-image-store.s3.amazonaws.com/0/136774/2d8b8384-5314-d3a2-d86f-f80454fab82b.png)


#pom.xmlファイル編集

pom.xmlに以下の内容を追記する。

・spring-boot-starter-parent
　Spring Bootの基本パッケージ
　Spring Bootの利用宣言と、バージョンを指定

・spring-boot-starter-web
　Spring BootのWeb基本パッケージ

・spring-boot-maven-plugin
　MavenでSpringBootを扱えるようにするためのプラグイン (今回は入れなくても動く)

・java.version
　Javaのバージョン指定

```xml
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
	<modelVersion>4.0.0</modelVersion>
	<groupId>jp.sample.spboot</groupId>
	<artifactId>BootApp</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<packaging>war</packaging>

	<!-- Spring Boot の利用を宣言し、バージョンを指定【追加】 -->
	<parent>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-parent</artifactId>
		<version>1.4.0.RELEASE</version>
	</parent>

	<dependencies>
		<dependency>
			<!-- Spring Boot の Web アプリケーションライブラリの利用を指定【追加】 -->
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-web</artifactId>
		</dependency>
	</dependencies>

	<build>
		<plugins>
			<!-- Spring Boot の ビルド用 Maven プラグイン【追加】 -->
			<plugin>
				<groupId>org.springframework.boot</groupId>
				<artifactId>spring-boot-maven-plugin</artifactId>
			</plugin>
		</plugins>
	</build>
	<properties>
		<!-- Java バージョン指定【追加】 -->
		<java.version>1.8</java.version>
	</properties>

</project>
```

pom.xmlの修正後、プロジェクトを更新。
![image](https://qiita-image-store.s3.amazonaws.com/0/136774/3d7d8faf-25c7-b713-65f7-8ca3f2f66de1.png)


pom.xmlを元に必要なライブラリのダウンロードが行われるので、暫く待機。
ダウンロードが終われば、前準備は完了。
![image](https://qiita-image-store.s3.amazonaws.com/0/136774/1f6c8c95-5fa8-fa32-7fa8-d087a7f35734.png)


#実行クラスを作成

・src/main/javaに新規Controllerクラス(SampleController.java)作成

SampleController.javaを以下のように編集

```java
import java.util.ArrayList;
import java.util.List;

import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;

@RestController                // Webアプリのリクエストを受け付けるクラスであることの指定
@EnableAutoConfiguration       // 様々な設定を自動的に有効化
public class SampleController {

	@RequestMapping("/")       // URLのパスの指定
	@ResponseBody
	public List<String> top(@RequestParam(value = "name", required = false) String name) { // リクエストを受け付けるメソッド
		List<String> list = new ArrayList<String>();
		list.add("SpringBootの最小アプリケーション");
		if (name == "hoge") {
			list.add("(パラメータにhoge指定)");
		} else {
			list.add("(パラメータ指定無し)");
		}
		return list;
	}
}
```

@RestController・・・Rest(API)コントローラであることをSpring Bootに通知
@EnableAutoConfiguration・・・各種設定を自動的に有効にする(面倒な設定は、SpringBoot側にお任せします!!という宣言)
@RequestMapping・・・どこのパスを辿ればこのクラス(メソッド)がリクエストを処理するのかをSprignBootに通知
                       ※※@RequestMapping("/mainApp")とした場合、｢localhost:8080/mainApp｣のURLが対応する
@ResponseBody・・・JSON形式が含まれることをSpringBootに通知 (JSONを返す!!という宣言)
@RequestParam・・・メソッド内で簡単にパラメータを扱うことが可能(詳細わかってないので、保留)


・src/main/javaにmainメソッド(Main.java)作成

```java
import org.springframework.boot.SpringApplication;

public class Main {

	public static void main(String[] args) {
		// Spring Bootによるアプリケーションを起動するための処理
		SpringApplication.run(SampleController.class, args);
	}
}
```

#実行
プロジェクトを選択し右クリック　→　実行　→　SpringBootアプリケーションを選択
![image](https://qiita-image-store.s3.amazonaws.com/0/136774/b24570ed-3c00-bc9a-92d3-8fbe917d4931.png)


コンソールにSpringBootのロゴや、ログが表示される。
最後に、Started Main in 5.247 seconds (JVM running for 6.204)みたいなのが出たら成功。
![image](https://qiita-image-store.s3.amazonaws.com/0/136774/ecc04f9a-e60b-f763-2b1f-fcd50030a325.png)

[http://locahohost:8080](http://locahohost:8080)にアクセスし、以下のような結果が表示されれば成功。
![image](https://qiita-image-store.s3.amazonaws.com/0/136774/5f845e7f-7873-83e3-d1fc-a91c7c70b202.png)


#追記 STSを使用したWebアプリケーション作成

STS(Spring Tool Suite)を使用した方法を追記しておく。

SpringBootの新規プロジェクトを作成
![image](https://qiita-image-store.s3.amazonaws.com/0/136774/cdeb01e7-84f5-7c2a-8f21-dc9167215e70.png)

New Spring Starter Projectが開くので、適当に設定して｢Next｣
![image](https://qiita-image-store.s3.amazonaws.com/0/136774/00612da3-2a3a-611e-3740-7910ea0e4660.png)


Webを選択し、Finish
![image](https://qiita-image-store.s3.amazonaws.com/0/136774/d4f0b490-aa02-311e-68e7-65aa67e63eb2.png)


プロジェクトが作成される。
この時点でpom.xmlには、SpringBootに必要な定義情報が設定済み
![image](https://qiita-image-store.s3.amazonaws.com/0/136774/80dbf89b-04ea-cb4a-2687-b93b9ccf03bb.png)


あとは、Eclipse版で作成した時と同じように、Controllerクラスと、それを呼び出すmainメソッドを用意し、
実行　→　SpringBootアプリケーションで実行すると、同様の結果が得られる。

pom.xmlの設定が不要になるから、こっちのほうが効率的かな。
(なんかよく分からんmvnw、mvnw.cmdとかが作成されるけど。。)

※ちなみにEclipseのSTSプラグインで作成したSpringBootプロジェクトだと実行時に"メインクラスが見つからない"のエラーとなる。。。(Why>)


###参考にしたサイト

Spring Bootで作る簡単WebAPI
http://niwaka.hateblo.jp/entry/2015/03/31/215844

SpringBootをはじめてみるよ (Mavenコマンド編)
http://hiranoon.hatenablog.com/