Spring Boot解説第2回 (IDEの構築とHello World)

## はじめに
はじめまして！
株式会社情創 技術開発局の@TEBASAKIです！
@YAKINIKUと共に情創開発ブログの担当となりました。

情創開発ブログ第二回ということで、今回は開発環境のうち、
IDEの構築について解説していきます。

宜しくお願いします！

## Javaの導入
何はともあれまずはJavaをインストールします。
[Javaのダウンロードページ](https://java.com/ja/download/ "無料Javaソフトウェアをダウンロード")から最新版をダウンロードして、
インストーラーを起動し、インストールを行います。

## IDEの導入
続いてIDE(統合開発環境)の導入です。
IDEは**Pleiades**を使用します。
[Pleiadesのダウンロードページ](https://mergedoc.osdn.jp/ "Pleiades - 統合開発環境 Eclipse 日本語化プラグイン")から使用するバージョンのファイルをダウンロードします。
今回は第一回で述べた通り、pleiades-e4.5-java-jre_20151002を使用します。

![image](https://qiita-image-store.s3.amazonaws.com/0/116031/a92a4f2e-d56b-b500-1306-a276c995c895.png)

64bitのFull Editionをダウンロードします。

![image](https://qiita-image-store.s3.amazonaws.com/0/116031/29860a7b-6636-1107-8c0d-8d7a5c584245.png)

ダウンロードしたフォルダを開いてeclipse.exeを起動すれば完了です。

## プラグインの導入
Pleiadesにプラグインを導入していきます。
ヘルプ→Eclipseマーケットプレースからプラグインを検索します。
### Spring Tool Suite(STS)
Springの開発環境です。Spring-Bootもこれで開発していきます。
「STS」で検索するとすぐに見つかります。

![image](https://qiita-image-store.s3.amazonaws.com/0/116031/f5ca9448-6b60-f1f9-7950-5672161cdfa2.png)

### Gradle
Java環境におけるビルドシステムです。ビルドの手順をカスタマイズできるため便利です。
「Gradle」で検索してインストールします。

![image](https://qiita-image-store.s3.amazonaws.com/0/116031/f0c3356c-ca45-376b-bf8c-e468ad06ef28.png)

### MyBatipse
JavaオブジェクトとSQLを紐付けるフレームワークMybatisのためのプラグインです。
「Mybatipse」で検索してインストールします。

![image](https://qiita-image-store.s3.amazonaws.com/0/116031/7e152752-1f76-ddf4-3aba-7a37c16c2048.png)

### Lombok
Lombokは冗長なコードを簡潔にしてくれるプラグインです。
Lombokはマーケットプレースにはないので、[ダウンロードページ](https://projectlombok.org/ "Project Lombok")から入手します。
jarファイルをダブルクリックで起動し、インストール先のIDEとしてeclipse.exeを選択します。


eclipseを再起動してプラグインの設定は終わりです。
最後に確認もかねて、恒例のHello Worldを表示してみましょう。

## Hello World
### プロジェクトの作成
まずはプロジェクトを作成します。
ファイル→新規→その他をクリックし、Gradle→Gradleプロジェクトで作成します。
このときGradleフォルダが2つありますが、アイコンが**黄緑色**のほうを選択します。これは濃緑ではGradleのバージョンが2.2.1に固定されてしまい、なおかつディストリビューションにラッパーを選択することができないためです。

![image](https://qiita-image-store.s3.amazonaws.com/0/116031/a0777173-8cde-d0cb-ff4a-eb11c5395603.png)

プロジェクト名はHelloWorldにし、その他の設定はデフォルトのまま次へ進みます。
GradleディストリビューションはGradleラッパーを選択します。ラッパーを選択することで、設定ファイルによってGradleのバージョンを変更することができ、プロジェクトごとに変更することも簡単だからです。

![image](https://qiita-image-store.s3.amazonaws.com/0/116031/bd215af3-a9b9-72a8-f6f5-654d04196471.png)

あとは完了を押してプロジェクトを作成します。
その後プロジェクトを選択し、右クリック→構成→Gradleプロジェクトへ変換を選択します。
操作が完了した時点でプロジェクトのアイコンの右上に濃緑色の「G」が表示されていればOKです。

プロジェクトを作成し終えたらビルドの設定に移ります。

### ビルドの設定
プロジェクトのsrcフォルダにある**build.gradle**にビルドの記述をします。
元の記述は無視して以下のように書き換えます。

```groovy:build.gradle
/*
 * This build file was auto generated by running the Gradle 'init' task
 * by 'Karasawa' at '16/03/09 9:08' with Gradle 2.6
 *
 * This generated file contains a sample Java project to get you started.
 * For more details take a look at the Java Quickstart chapter in the Gradle
 * user guide available at https://docs.gradle.org/2.6/userguide/tutorial_java_projects.html
 */

// Apply the java plugin to add support for Java

buildscript {
    ext {
        springBootVersion = '1.3.1.RELEASE'
    }
    repositories {
        mavenCentral()
    }
    dependencies {
classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}")

    }
}
apply plugin: 'java'
apply plugin: 'eclipse'
apply plugin: 'spring-boot'

// In this section you declare the dependencies for your production and test code
dependencies {
    // The production code uses the SLF4J logging API at compile time
    compile 'org.slf4j:slf4j-api:1.7.12'
compile("org.springframework.boot:spring-boot-starter-web:${springBootVersion}")
    // Declare the dependency for your favourite test framework you want to use in your tests.
    // TestNG is also supported by the Gradle Test task. Just change the
    // testCompile dependency to testCompile 'org.testng:testng:6.8.1' and add
    // 'test.useTestNG()' to your build script.
    testCompile 'junit:junit:4.12'
}

import org.gradle.plugins.ide.eclipse.model.SourceFolder
eclipse {
    // .project の設定
    project {
        natures 'org.springframework.ide.eclipse.core.springnature'
        natures 'org.springsource.ide.eclipse.gradle.core.nature'
        natures 'org.eclipse.jdt.core.javanature'
        buildCommand 'org.springframework.ide.eclipse.core.springbuilder'
        buildCommand 'org.eclipse.jdt.core.javabuilder'
    }
} 
```

Gradleのバージョンを変更する場合は、この次のリフレッシュを行う前に変更します。
(プロジェクトフォルダ)→gradle→wrapper→gradle-wrapper.propertiesを開き、以下のx.xの部分に任意のバージョンを記述します。

```properties:gradle-wrapper.properties
distributionUrl=https\://services.gradle.org/distributions/gradle-x.x-bin.zip
```

変更を保存したらプロジェクトを右クリック→Gradle→すべてリフレッシュをします。
※以降は、build.gradleを変更するたびにリフレッシュを行う必要があります。

続いてクラスの作成に移ります。

### エントリポイントの作成
src/main/java下にパッケージ階層を作成し、そこにエントリポイント**Apllication.java**を作成します。
ついでにデフォルトで作成されているLibrary.javaはsrc/main/test階層のものも含めて削除してしまいます。
Application.javaの内容は以下の通りです。

```java:Application.java
package demo;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class Application {
	public static void main(String[] args) {
		SpringApplication.run(Application.class, args);
	}
}
```

### コントローラの作成
次は実際にHelloWorldを表示させる部分の作成です。
Application.javaと同じ階層にコントローラクラスである**HelloWorldController.java**を作成します。
内容は以下の通りです。

```java:HelloWorldController.java
package demo;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

@Controller
public class HelloWorldController
{
    @RequestMapping("/")
    @ResponseBody
    public String home() {
        return "Hello World!";
    }
}
```

ここまで作成したら実行してみましょう！

### Hello World!
実行前に念のためGradleプロジェクトのリフレッシュを行います。
リフレッシュが完了したら、右クリック→Gradle→タスク・クイック・ランチャーを起動し、タスク欄に「bootRun」と記述してEnterで実行します。
![image](https://qiita-image-store.s3.amazonaws.com/0/116031/2da617d4-de4e-7a9f-8fde-f82bd150cea4.png)


コンソール出力にアプリケーション名とStarted Applicationが表示されれば無事実行できたことになります。

では、ブラウザで 「http://localhost:8080/」 にアクセスしてみましょう。
「Hello World!」が表示されていれば成功です。

![image](https://qiita-image-store.s3.amazonaws.com/0/116031/6e07f416-e86d-2c6f-9788-90a7f6d73b10.png)


## おわりに
いかがでしたか？
私はここまで理解するのに2秒近くかかりました。(汗
ソースコードの内容の解説は次回以降に行います。

今回はここまでです。
また次回以降にお会いしましょう！