【Java環境構築】VSCode の Spring Boot Extension Pack でできること

[【Java環境構築】Windows+Scoop+VSCode で開発環境を構築する](https://qiita.com/nimzo6689/items/72898eb9dc3896a41269) の続編的な記事です。
VSCode で Spring Boot の開発をする際、どういった機能が利用できるのか整理しました。

また、サンプルプロジェクトとして、Spring の公式サンプルである [Spring PetClinic](https://github.com/spring-projects/spring-petclinic) を使っています。

VSCode 公式の解説ページはこちら。

https://code.visualstudio.com/docs/java/java-spring-boot

# Spring Boot Extension Pack のインストール

まず初めに、VSCode の拡張機能である Spring Boot Extension Pack をインストールします。
Spring Boot Extension Pack は、[STS4](https://spring.io/tools) の VSCode 向けの実装です。

https://marketplace.visualstudio.com/items?itemName=vmware.vscode-boot-dev-pack

:::note info
STS について補足すると、 STS4 は異なる開発環境向けに提供される Spring 開発ツール群の総称で、VSCode のほかに Eclipse や Theia などのツール向けの拡張機能を提供しています。
以前は、 STS3 というのがあり、これは Eclipse IDE に特化した Spring 開発ツールとなっていました。
:::

この拡張パックには以下の拡張機能が含まれています。

**Spring Initializr**

[Spring Initializr](https://start.spring.io/) の VSCode 版。
Spring Boot プロジェクトのひな型を生成できます。
内部で上の Web サイトと同じ環境にデプロイされている API を使っています。

**Spring Boot Tools**

Spring 固有のナビゲーションや補完入力、実行時情報の表示などの機能を提供しています。

**Spring Boot Dashboard**

VSCode のサイドバーに表示される Spring 用のダッシュボード機能を提供しています。
主に、アプリの起動、停止、デバッグ、ブラウザでの表示などができます。

# Spring Initializr

Spring Initializr を使用することで、新規プロジェクトの作成が簡単になります。

https://marketplace.visualstudio.com/items?itemName=vscjava.vscode-spring-initializr

Web 版でも SpringBoot のひな型は生成できますが、拡張機能を使うと ZIP の解凍が不要になったり、解凍後のディレクトリを１クリックで開けたりするので便利です。

## 基本的な使い方

1. コマンドパレット（Ctrl+Shift+P）を開き、「Spring Initializr」を検索
2. 「Create a Maven Project」を選択（または、Create a Gradle Project）
3. 以下の項目を設定：
   - Spring Boot バージョンの指定
   - プロジェクトの言語の指定（Java, Kotlin, Groovy）
   - Group Id（組織の識別子）の入力
   - Artifact Id（プロジェクト名）の入力
   - パッケージング方式の指定（Jar, War）
   - Java バージョンの指定
   - 依存ライブラリの選択（チュートリアル系の記事だと Spring Web だけ選択されているイメージ）
4. フォルダを選択
   → `~/repos/spring-demo` を選択した場合、`~/repos/spring-demo/${Artifact Id}` でフォルダが作成され、そこに `pom.xml` や `src` などの資材が生成される
5. 「新しく作成したプロジェクトをワークスペースとして開く」、みたいなメッセージが右下に表示されるので、 OK でワークスペースが切り替えられる

以下、作成後のイメージ。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/114728/e7b4ba16-a9c4-a535-0f1c-145d2ab63933.png)

## pom.xml での依存関係を追加

プロジェクトの作成後、`pom.xml` ファイルで依存関係を追加したい場合は、プロジェクト作成時と同じように、コマンドパレットで依存ライブラリが選択できます。

「Add Spring Boot Starters ...」にマウスオーバーすると開けます。または、右クリックして、「Add Starters ...」でも可。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/114728/df6eab48-ee18-0703-788d-5be35bdcb6ae.png)

# Spring Boot Tools

SpringBoot 特有のコード間の移動や補完入力はこちらの拡張機能が提供しています。

https://marketplace.visualstudio.com/items?itemName=vmware.vscode-spring-boot

ここからは Spring Petclinic のコードを使って操作感を確認していきます。

```bash
git clone --depth=1 https://github.com/spring-projects/spring-petclinic.git
code spring-petclinic
```

VSCode で上でクローンした spring-petclinic フォルダを開いて、下のステータスバーで Java Ready と表示されるまで待ちます。

「Build Tool Conflicts ...」と表示された場合、Maven もしくは Gradle のどちらかを選択します。（記事では Maven を選択）

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/114728/ba1a7858-bf36-5f6d-809c-66bc27d17ace.png)

## ソースコードのナビゲーション

@GetMapping など SpringBoot 特有のアノテーションが付いている箇所は、「Go to Symbol in Workspace（Ctrl+T or Cmd+T）」でコマンドパレットから移動できます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/114728/f3acfd85-6243-58b6-6e29-c87a524ede31.png)

利用できる検索方法は以下です。

|検索コマンド|説明|
| --- | --- |
|@/ | 定義された全てのリクエストマッピングを表示|
|@+ | 定義された全てのBeanを表示します|
|@> | 全ての関数を表示|
|@ | コード内の全てのSpringアノテーションを表示|

これ以外にも `@SELECT` とかすれば、`@Query` で SELECT が書かれている箇所を抽出したりできました。

## 実行中のアプリケーションの管理

実行中の Spring アプリケーションのプロセスを参照し、どの Beans が実行時に生成されているのかや、どういうふうに依存性が注入されているかを確認できます。

Spring PetClinic だと、作りが単純でそういった確認をしたいというケースがなかったので、公式ページに貼ってあったスクショをそのまま転載します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/114728/16f1bdd3-9e68-a9a2-c4e9-228e31631bd8.png)

また、こちらの機能を利用するには `spring-boot-starter-actuator` が依存ライブラリに入っている必要があります。Spring PetClinic の場合は `pom.xml` に既に入っていたので大丈夫でした。

## 静的解析をして警告を表示

例えば、以下のように `@Autowired` をつけなくても自動で依存性が解決されるような実装をした場合、警告を出してくれます。また、マウスオーバーすると警告内容の詳細が表示できます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/114728/91046fe9-c641-0cfe-d1ce-da9f107f6d48.png)

SonarQube などを使う場合、Java 特有の問題は指摘してくれますが、Spring 特有の問題はスルーだったりするので、これはありがたいです。

## コード補完機能

`@Value` で参照したいプロパティのキー名などは、補完入力で書けます。
候補は `application.{properties,yml}` や `application-*.{properties,yml}` から取ってきているようでした。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/114728/227f545f-b9ec-10ef-853d-0f50a81cf464.png)

## プロパティファイルのサポート

`.properties` や `.yml` を書くときに補完入力ができます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/114728/4d9efd94-67af-4a43-9190-86257823990d.png)

# Spring Boot Dashboard

まだ Preview らしいです。

https://marketplace.visualstudio.com/items?itemName=vscjava.vscode-spring-boot-dashboard

## アプリケーション管理

**アプリ起動前にできること**

起動、停止、デバッグ、 BEANS の検索や移動、エンドポイントの一覧表示や移動

**アプリ起動中にできること**

VSCode 上で WebView 表示、外部設定値の表示、Heap Memory の表示（ここだけダッシュボード感がある）

初期設定ではサイドバーに表示されますが、正直見づらいのでパネルに持ってくるのがいいと思います。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/114728/88ac0d33-b75b-93e0-3d5c-187d95e201d4.png)