VSCodeで作るJava開発環境＆Spring Bootアプリケーション入門

皆さんこんにちは。
**Java Advent Calendar 2020（Qiita）24日目**の記事を書かせていただきます。

## はじめに
Javaでの開発が長いのですが、案件で使うエディタと言えば、eclipse（またはSTS）かIntelliJ IDEAが多かった私。InteliJに慣れてしまうと、ライセンス払ってでも**InteliJ一択**！だったんですが、ふと触ってみた**Visual Studio Code**がいい感じ！だったんです。本記事では、**Visual Studio CodeでJavaの開発環境**を構築していきたいと思います。

また、今回はJavaの開発で使われることが多い「**Spring MVC, Spring Boot**」（フレームワーク）で作る簡易アプリケーションも合わせて作ってみたいと思います。

## 想定開発環境
**OS**: Windows10
**Visual Studio Code**: 1.51.1（2020年12月） 
※ VSCode, JDKのインストールは既に済んでいる前提
JDKのインストールについては、以前記事を書いているので、そちらをご参照ください!
[Amazon Corretto11 インストール](https://qiita.com/takumi_links/items/8f7793b0dd7032be7de8)

## 手順（3ステップ）
1. Java Extension Packインストール
2. Javaを動かしてみよう！
3. Spring Bootアプリケーションを作ってみよう！

### 手順1: Java Extension Packインストール
- Visual Studio Codeを起動し、拡張機能：Java Extension Pack をインストールします。
- **Java Extension Pack**  
https://marketplace.visualstudio.com/items?itemName=vscjava.vscode-java-pack

その他、よく使いそうな他の拡張機能もインストールしておきましょう。

- **Maven for Java**  
https://marketplace.visualstudio.com/items?itemName=vscjava.vscode-maven
- **Spring Boot Extension Pack**  
https://marketplace.visualstudio.com/items?itemName=Pivotal.vscode-boot-dev-pack

### 手順2: Javaを動かしてみよう！
- Visual Studio Codeで「コマンドパレット」（Ctrl + Shift + p）を表示、[**Java: Create Java Project**] コマンドを実行してJavaプロジェクトを作成する。

```
>Java: Create Java Project
```

```
No build tools
```

※ 作成するJavaプロジェクトの名前を入力→プロジェクトの作成完了

- 作成されるJavaプロジェクトのファイルとディレクトリ構成

```
helloworld
├── lib
└── src
    └── App.java
```

デフォルトで作成される「App.java」をコンパイルし、生成されたクラスファイルを実行 →　
"Hello, World!"が表示される。

```
$ javac App.java
$ java App
Hello, World!
```


### 手順3: Spring Bootアプリケーションを作ってみよう！
手順2で「Spring Boot Extension Pack」を入れたので、Spring Bootアプリケーションを作ってみます。

#### プロジェクトの作成
- Visual Studio Codeで「**コマンドパレット**」（Ctrl + Shift + p）を表示、Spring bootのプロジェクトを作成します。

#### コマンドパレットでの操作
1.「Spring Initializr: Generate a Maven Project」を選択
2. 「Specify Spring Boot version」 Spring Bootのバージョンを選択します。今回は特に指定がないので、2020/12時点の最新（2.4.0）を選択
3. 「Specify project language」使用する言語を選択。今回はJavaを選択
4. 「Input Group Id」パッケージ名を入力。
```例：com.example```
5. 「Input Artifact Id」プロジェクト名を入力。
```例：demo```
6. 「Specify packaging type」パッケージタイプ：今回はwarにします。（jarでもOK）
7. 「Specify Java type」使用するJavaのバージョンが求められるので、使用するJavaのバージョンを選択。今回はJava14を使用。
8. 「Search for dependencies」Mavenプロジェクトなので、依存関係を選択があります。今回は、「Webアプリを作る」「画面を表示させる」という目的があるので、以下2つを選択します。
```Spring Web / Thymeleaf
```
ここまでやると、プロジェクトの保存先を聞かれます。プロジェクトの保存場所を選択してください。

- 作成されるディレクトリは以下のような構成です。
  - **DemoApplication.java**, **ServletInitializer.java**がデフォルトで実装されています。

```
|― src
 |   |― main
 |   |    |― java
 |   |    |    |― com
 |   |    |        |― example
 |   |    |             |― demo(プロジェクト名)
 |   |    |                      |― DemoApplication.java（デフォルトで作成される）
 |   |    |                      |― ServletInitializer.java（デフォルトで作成される）
 |   |    |― resources
 |   |           |― static/ (静的ファイル)
 |   |           |― templates/ (テンプレートファイル)
 |   |           |― application.properties (環境独自の設定ファイル)
 |   |― test
 |       |― java
 |            |― com
 |                |― example
 |                      |― demo(プロジェクト名)
 |                               |― DemoApplicationTests.java
 |― .gitignore
 |― HELP.md
 |― mvnw
 |― mvnw.cmd
 |― pom.xml (Mavenの設定ファイル)
```

#### アプリケーションの作成
- \demo\src\main\java\com\example\demo\controller ディレクトリ配下にControllerクラスを作成します。（SampleController.java）


 ```java
 package com.example.demo.controller;

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

@Controller
public class SampleController {
    @RequestMapping("/sample")
    public String sample() {
        return "sample";
    }
}

 ```

\demo\src\main\templates内にsample.htmlを作成します。（sample.html）

```html
<!DOCTYPE html>
<html>

<head>
    <meta charset="utf-8">
    <title>Sample</title>
</head>

<body>
    <h1>Hello World!</h1>
</body>

</html>
```

- Spring bootアプリケーションの実行
VSCode左下の「**SPRING-BOOT DASHBOARD**」を選択し、[start] or [debug] を選択  
※ Spring Bootに内包されたTomcatが起動し、実装したアプリがコンパイルされる。

#### 表示確認
- ブラウザにて表示確認。"Hello World!"と表示されるはずです。  
http://localhost:8080/sample

## 終わりに
拡張機能が充実していて、想像以上に使いやすかったです！InteliJのライセンス更新をせずにVSCodeを使い続けようか悩んでいる所です・・・。今後はより実践的なJavaの記事を上げていけるように努力していきます。

最終日は@tkxlabさんです！

## 参考
> Spring BootをVSCodeで「Hello World」を表示させてみた
https://tech-lab.sios.jp/archives/19941