【Spring boot】Spring boot プロジェクトの作り方 (Java)

今度、業務でJavaのWeb-APIを使用するという話があったので、その予習のために調べた内容を記載しておきます。
今回、実際に作成したソースコードはgithubに上げておきました。
https://github.com/NagaJun1/sample_project_name

#開発環境
Javaでweb開発をするならEclipseを使用するかと思いますが、今回はVisual Studio Code を使用します。
（新しくEclipseを入れるのが手間だったので…）
最終的にはEclipseを使用することになるかと思いますが、今回はSpring bootの基本的な部分だけ分かればよいので、Eclipseは使用しません。
Spring Tool のプロジェクトを作成する場合には、Spring Tool Suite（STS）を使用する必要があります。
Visual Studio Code にSpring Tool Suite（STS）を追加したい場合は、「拡張機能」で、「Spring Boot Extension Pack」をインストールすれば、使用することができます。
（Visual Studio Codeで Javaを初めて使用する場合は、Java のExtension Pack もインストールしておいたほうが良いかと思います。）

「Spring Boot Extension Pack」のインストール後に、「Javaの~バージョンのダウンロード」や、「Red Hatのダウンロード」などのウィンドウが開くかと思いますが、一通り必要になるため、自身のPCにまだ無い場合は、ダウンロードしておいてください。

#プロジェクト作成
Visual Studio Codeで Spring boot のプロジェクトを作成するには、コマンドパレットを開き（「表示」->「コマンドパレット」で開けます）、`Spring Initializr: Generate a Maven Project`を入力します。
入力後にEnterを押すと、「Springのバージョン」「使用する言語」「パッケージ名」「プロジェクト名」の設定に移るため、それを設定します。
（デフォルトのままで良い場合は、そのままEnterを押しても大丈夫です。）
次に、依存関係を聞かれるため、「Spring Web」と「Thymeleaf」を選択します。
（これは、参考にしたサイトに書かれていた内容をそのまま設定したので、後で調べておきます。）
最後に、プロジェクトの保存先が聞かれるので、それを指定したら、プロジェクトが作成されます。

#コーディング
上記の作業が済んでいる場合は、プロジェクトが作成できているかと思うので、次にWebページとJavaのコードを実装していきます。
デフォルト状態で存在しているのは、`\src\main\java\com\example\demo\DemoApplication.java`だけかと思います。
（デフォルトの状態の、パッケージ名=`com.example`、プロジェクト名=`demo`を想定しています。）
`DemoApplication.java`はコード内に`main()`メソッドがあることから察しが付くかと思いますが、処理の開始位置を指しています。
この状態では、ブラウザ上に表示するページがないので、`.html`ファイルを作成します。
作成した`.html`ファイルは`\src\main\resources\templates\`下に格納します。
例として、私が作成した`.html`ファイルを下記に記載しておきます。

```html:page1.html
<!DOCTYPE html>
<html>
    <header>
        <meta charset="UTF-8">
        <title>page1</title>
    </header>
    <body>
        <h1>page1</h1>
    </body>
</html>
```

次に、ページが紐づく`.java`ソースを作成します。
新規に作成するJavaソースは、`DemoApplication.java`と同じく、`\src\main\java\com\example\demo\`下に格納します。
例としては、下記のようなコードです。

```java:ChildPage.java
package com.example.demo;

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

@Controller
public class ChildPage{

    // page1.html に対応する内容
    @RequestMapping("/page1")
    public String page1(){
        return "page1";
    }
}
```

（ファイル名とクラス名は適当に考えただけなので、気にしないでください。）
今回作成したページファイルが`page1.html`であることから察しが付くかと思いますが、`@Controller`を設定したクラス内に`@RequestMapping()`を設定したメソッドを実装することで、webページとJavaのコードを紐付けます。
`@RequestMapping`の`()`には、`\src\main\resources\templates\`に対しての html ファイルの相対パスを設定します。
実装したメソッドの戻り値には、html ファイル名を設定します。
これにより、コードの実装は完了です。

#デバッグ（実行）
ソースコードの方は設定できたので、実際に立ち上げてみます。
実行方法は簡単で、Visual Studio Codeの「実行とデバッグ」の「デバッグ」を押下することで実行できます。
![debug_execute.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/762492/3a062f3a-06d3-94de-457b-c51b0eff4667.png)
このとき、環境構築がうまくいっている場合は、Red Hat が立ち上がります。
（うまくいかない場合は、Red Hatの取り込みに失敗しているかと思われるので、取り込み作業を見直してください。）
また、Visual Studio Code でデバッグを実行する場合、`\.vscode\launch.json`が必要となりますが、今回の場合、実行時に自動で作成されるかと思います。
立ち上げに成功した場合は、http://localhost:8080/page1 （page1.htmlで作成した場合）を開いて、ページが開かれるかを確認します。
下記のようなページが開かれるのであれば、成功です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/762492/f8152b80-b1af-9e84-5c16-e0536cfb3f5e.png)

#終わりに
今回は Spring boot の初歩的な部分について書いていきました。
今回の内容は、`localhost`経由で html のページを表示しただけなので、xamppなどでサーバーを立てて htmlのページを表示するのと大差ありません。
Spring の本領は、Javaのソースを経由した処理を行うときにこそ発揮されるかと思うので、次に Spring の記事を書くときは、Javaでの処理をメインに書こうと思います。