SpringBootでWebアプリケーション開発を始めてみる

## 概要

- SpringBootで簡易的なWebアプリをつくってみる
- この記事では、まずはHello World的なものを
- **開発未経験の人でも気軽に始められる**

## そもそもSpringBootって何？

- Java開発におけるフレームワークの1つ
- 必要な初期設定が少なく、使い始めやすいことが特徴

## 開発環境

|環境|サービス/バージョン|
|---|---|
|OS|Mac|
|言語|Java8|
|IDE(統合開発環境)|IntelliJ IDEA|
|フレームワーク|SpringBoot 2.2.1|

- 開発環境には必ずJavaのインストールが必要
 - https://eng-entrance.com/java-install-jdk-mac
 - Windowsの人も適宜読み替えれば、上記方法でインストール可能
- IDEはなんでもOK（Eclipseとか）

## 雛形作成

### Spring Initializrを利用する

- SpringBootの雛形アプリケーションを作成することができるWebサービス
- ビルドツール(Maven/Gradle)や言語(Java/Kotlin/Groovy)を選択することが可能
- https://start.spring.io/

### 手順

以下を指定する

- ビルドツール
 - どちらもよく利用されているのでどちらでも良いが、今回はGradleにする
- 言語
- SpringBootのバージョン
- プロジェクト名
 - なんでも良い。今回は`spring-study`とする
- 利用ライブラリ
 - `Spring Web`（MVCアプリケーションを簡単に構築できる）を追加する
 - 後からでも追加可能

![01-initializr.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/396521/c5c80665-5342-99d4-3a4f-577311283af7.png)

- Generateボタンを押下すると、雛形アプリがzipでダウンロードできる

## 雛形アプリを確認してみる

<img width="1083" alt="02-app.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/396521/6550862f-c897-2e7f-2bff-20f9ce04a258.png">

- `SpringStudyApplication.java`や`application.properties`といったファイルがデフォルトで作成されている
- `SpringStudyApplicationTests.java`は不要なので削除する

## Hello Worldをやってみる

- 雛形のままだと動かないので、まずはHello World
- http://localhost:8080/hello にアクセスすると、Hello World!と表示されるようにする

### 手順

- リクエストを受け付けて、文字列を返却するクラスをつくる

#### HelloRestController.java

- `com.examle.springstudy`に`HelloRestController.java`を作成する

```com.examle.springstudy.HelloRestController.java
package com.example.springstudy;

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

@RestController // ①
public class HelloRestController {
    @GetMapping("/hello") // ②
    public String hello() {
        return "Hello World!";
    }
}
```

- ２つのアノテーションがポイント(`@XXX`)
- ①：リクエストを受け付け、レスポンスを返却するコントローラであることを示す
- ②：リクエストURLとロジックを紐づける

### 動作確認

- 起点となるクラス(SpringStudyApplication)を選択して、実行(`⌃+⌥+R`)する

<img width="1440" alt="02-exec.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/396521/69889fb0-fc78-aadb-9ea1-e0c4d1f70371.png">

- 起動すると以下のような内容がコンソールに出力される

```
11:46:44: Executing task 'bootRun'...

> Task :compileJava
> Task :processResources
> Task :classes

> Task :bootRun

  .   ____          _            __ _ _
 /\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
 \\/  ___)| |_)| | | | | || (_| |  ) ) ) )
  '  |____| .__|_| |_|_| |_\__, | / / / /
 =========|_|==============|___/=/_/_/_/
 :: Spring Boot ::        (v2.2.1.RELEASE)

2019-12-01 11:46:59.590  INFO 43520 --- [           main] c.e.springstudy.SpringStudyApplication   : Starting SpringStudyApplication on MacBookPro with PID 43520 (/Users/tanibuchi/Desktop/spring-study/spring-study/build/classes/java/main started by tanibuchi.kosuke in /Users/tanibuchi/Desktop/spring-study/spring-study)
2019-12-01 11:46:59.595  INFO 43520 --- [           main] c.e.springstudy.SpringStudyApplication   : No active profile set, falling back to default profiles: default
2019-12-01 11:47:00.598  INFO 43520 --- [           main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat initialized with port(s): 8080 (http)
2019-12-01 11:47:00.612  INFO 43520 --- [           main] o.apache.catalina.core.StandardService   : Starting service [Tomcat]
2019-12-01 11:47:00.612  INFO 43520 --- [           main] org.apache.catalina.core.StandardEngine  : Starting Servlet engine: [Apache Tomcat/9.0.27]
2019-12-01 11:47:00.680  INFO 43520 --- [           main] o.a.c.c.C.[Tomcat].[localhost].[/]       : Initializing Spring embedded WebApplicationContext
2019-12-01 11:47:00.680  INFO 43520 --- [           main] o.s.web.context.ContextLoader            : Root WebApplicationContext: initialization completed in 1037 ms
2019-12-01 11:47:00.915  INFO 43520 --- [           main] o.s.s.concurrent.ThreadPoolTaskExecutor  : Initializing ExecutorService 'applicationTaskExecutor'
2019-12-01 11:47:01.089  INFO 43520 --- [           main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat started on port(s): 8080 (http) with context path ''
2019-12-01 11:47:01.098  INFO 43520 --- [           main] c.e.springstudy.SpringStudyApplication   : Started SpringStudyApplication in 2.169 seconds (JVM running for 3.005)
```

- 最後に`Started`が表示されていれば正常に起動できている
- http://localhost:8080/hello にアクセスすると、以下の画面が表示される

<img width="405" alt="03-helloworld.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/396521/c945c42e-7356-dfeb-5a8a-2f13af783a9d.png">

## 最後に

- こんな感じでSpringBootを使ったアプリ開発は気軽に始めることができる
- 今回は概要レベルでの記載なので、次回もう少し丁寧に解説します