Spring Bootに挑戦する

# はじめに

　「もう、アプリにしていいよね」

　ということで、今までコンソール上でしか実行できなかったオセロプログラムを、Webアプリケーションにレベルアップさせることに挑戦していきます。今回は、Spring Frameworkの中でも簡単にWebアプリケーションが構築できると言われているSpring Bootを用いて、サンプルレベルのプロジェクトを作成します。

　なお、技術的な解説はほとんどなく、実際に行った作業の手順を備忘録的に記載しています。様々な書籍やWebサイトを参考にしましたが、~~黒魔術~~ブラックボックス感がはんぱないため、Git関連と同様に「動けば良いや」の方針で進めて参ります。

# EclipseでSpring Bootプロジェクトを新規作成する

　Spring Bootプロジェクトを作成するには様々な方法があるようですが、私はこれまでEclipseで開発を行ってきたので、EclipseにSTS（Spring Tool Suite）を追加インストールする方法をとることにします。

### STS (Spring Tool Suite) をEclipseにインストール、設定するまでの流れ

1. Eclipse（今回はOxygen.3a）のメニューバーから、ヘルプ → Eclipseマーケットプレースと進む。
2. 検索欄にSTSと入力して検索をクリック。
3. 検索結果からSpring Tools（今回は3.9.5）を選ぶ。
4. 「インストール」を押す → 「確認」を押す → 「使用条件の条項に同意します」を選んで「完了」を押す。
5. インストールが開始される。途中で何かを受け入れるかどうか聞かれるので、受け入れておく。（衝動的にボタンをクリックしてしまったので、どんな内容だったか分かりません………）
6. インストール後、Eclipseの再起動を促されるので、再起動すると、概要の画面が出てくるので、ワークベンチをクリック。
7. メニューバーからウィンドウ → パースペクティブ → パースペクティブを開く → その他と進む。
8. Springを選んでから、開くをクリック。

### Springプロジェクトを新規作成するまでの流れ

1. パースペクティブでSpringを選ぶ。
2. メニューバーからファイル→新規→Springスターター・プロジェクトと進む。
3. プロジェクト名にMyOthelloApp、型にGradle (Buildship 2.x)、Javaバージョンに8、グループ名にcom.myothello、説明にMyOthello project、パッケージ名にcom.myothelloを入力して、次へをクリック。
4. Webを選んで、次へをクリック。
5. 完了をクリック。

### ソースコードの確認

src/main/javaフォルダ → com.example.demoフォルダにMyOthelloAppApplication.javaが作成されています。

<details><summary>MyOthelloAppApplication.java（クリックすると開きます）</summary><div>

```java
package com.myothello;

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

@SpringBootApplication
public class MyOthelloAppApplication {

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

}
```
</div></details>

MyOthelloAppApplicationクラスの上にある@で始まる行は__アノテーション__といい、アプリ内における様々な役割を明示するものです。上記のSpringBootApplicationは、Spring Bootで起動するアプリケーションであることを意味します。

　試しに実行してみます。MyOthelloAppの名前の上で右クリックし、SpringBootアプリケーションとして実行すると、コンソール上に以下のメッセージ（抜粋）が出ました。

```
***************************
APPLICATION FAILED TO START
***************************

Description:

The Tomcat connector configured to listen on port 8080 failed to start. 
The port may already be in use or the connector may be misconfigured.
```

　Tomcatがすでに8080番のポートを使っちゃっているからうんぬんかんぬん、ということなので、Google大先生にお伺いをしてみます。この8080番を使用しているプロセスを強制終了させると良い、と書いてあるページ（[ここ](https://stackoverflow.com/questions/43026358/spring-boot-application-in-eclipse-the-tomcat-connector-configured-to-listen-on)）を見つけたので、ここを参考にしてみます。コマンドプロンプトから

```
netstat -ao | find "8080"
```

と入力します。すると、8080番を使用しているPIDが探索され、今回は10572が出てきましたので、次に

```
Taskill /PID 10572 /F
```

と入力します。すると、強制終了されましたと言われるので、もう一度実行してみると、今度はAPPLICATION FAILED TO STARTと言われなくなりました。この状態でブラウザに「localhost:8080」と入力してアクセスすると、

![HelloOthello_Whitelabel.png](https://qiita-image-store.s3.amazonaws.com/0/305248/d4f1c606-21d7-66b7-dea9-349506e3454a.png)

と表示されました。まだページの内容（Controller）を決めていないので、404エラーは当然と言えます。今はこれでＯＫです。

# とりあえず「Hello othello」

　Webアプリにおける「Hallo world」、もとい「Hello othello」を表示してみます。

　Spring BootにおけるWebアプリは、MVCアーキテクチャにより設計されます。MはModel（アプリケーションで利用するデータ）、VはView（画面の表示）、CはController（処理の制御）の略です。まずは、Controllerを作成します。

### MyOthelloAppControllerクラスの作成

　MyOthelloAppApplication.javaと同じディレクトリに、MyOthelloAppController.javaを作成します。その際、「継承された抽象メソッド」にチェックを入れておきます。次に、MyOthelloAppControllerクラス内に「Hello othello」と表示するコードを書きます。

<details><summary>MyOthelloAppControllerクラス（クリックすると開きます）</summary><div>

```java
package com.myothello;

import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class MyOthelloAppController {
	@RequestMapping("/")
	public String hello() {
		return "Hello othello";
	}
}
```
</div></details>

　もう一度実行し、8080番にアクセスすると……

![HelloOthello.png](https://qiita-image-store.s3.amazonaws.com/0/305248/a0f4b924-f344-96d9-3450-22abb00a3b96.png)

　やったぜ。

# 今後の課題

　ということで、Web上で動くオセロプログラム、もといオセロアプリを開発する準備が整いました（多分）。これまでコンソール用に作成してきた様々なクラスを流用し、まずはControllerを主に実装して参ります。

　ここまでお読みいただき、ありがとうございました！