Cloud WorkStations で Spring Boot の開発環境を作ってみた

# はじめに

こんにちは、京セラコミュニケーションシステム 福留（@kccs_kazuo_fukudome）です。

先日、GCP の新機能 Cloud WorkStations が発表されました。
参考：https://cloud.google.com/blog/ja/products/application-development/introducing-cloud-workstations

Cloud WorkStations は、Google Cloud Platform で開発環境を提供してくれるサービスとなります。Cloud WorkStations を利用するメリットとしては、発表記事などにあるように、インターネットが繋がる環境であれば、どこからでも開発環境にアクセスすることが可能なこと。また、開発環環境の設定を統一したり、開発環境の複製が容易にできること。ローカル PC を買い換えても開発環境を作り直さずにすむことなどがあります。

一方、Cloud WorkStations の画面操作は、ブラウザを通して行います。ネットワークスピードが遅くなると、打ったコードが画面に表示されず、もどかしく思ってしまうことになりそうです。しかし、最近のインターネットの回線スピードだと、ほぼ問題ないかと思います。

今回は、この Cloud WorkStations で Spring Boot (Gradle) の開発環境を作ってみましたので、紹介します。

:::note info
本記事は 2022 年 12 月ごろに作成しております。
Google Cloud の機能を利用した場合は、利用料が発生します。
:::

## この記事の対象者

- Cloud WorkStations を触ってみたい人
- 開発環境の提供や運用に困っている人
- Java の開発環境を簡単につくりたい人

## ワークステーションの作成

Cloud WorkStations は、Google Compute Engine (GCE)が元になるサービスとなります。そのため、Cloud WorkStations の利用料も GCE の金額で課金されるようです。
Cloud WorkStations を始めるには、"クラスタ"と呼ばれる、ネットワークの設定、"構成"と呼ばれる、マシンタイプ、ディスク容量、IDE の設定を作成する必要があります。これらの設定に関しては、デフォルトで作成し、IDE もデフォルトの"Base Editor (Code OSS)"を利用しました。
![image1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2852633/33599a3e-69d5-bc41-128b-16270b55470c.png)
ここから、ワークステーションを作成し起動します。すごく簡単に開発環境ができました。
![image2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2852633/5fd41b9c-5897-e652-5a85-72d006dd43c4.png)
![image3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2852633/50d78620-808d-2478-9f9b-d2b1896a75e1.png)

## "Base Editor (Code OSS)"の初期設定と開発パッケージのインストール

ワークステーションを起動し、ステータスの"LAUNCH"というところをクリックすると、ブラウザの別タブか、別ウィンドウでワークステーションへの接続が開始されます。ワークステーションを開始すると、最初に"Base Editor(Code OSS)"の初期設定があるので、ここはお好みで設定してください。この設定は、いつでも変更できます。
![image4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2852633/df4a478e-8c51-8850-2491-aab7e8b6d822.png)

続いて、Spring Boot (Gradle) の開発に必要な次のパッケージインストールします。

- Extension Pack for Java
- Spring Boot Extension Pack
- Gradle Tasks

![image5.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2852633/6278aa76-3bf8-a271-484e-a4d50763ae1d.png)
![image6.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2852633/ee9759fb-a2f0-9770-16a9-ba317fe8e205.png)
![image7.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2852633/31658e4b-7501-99d0-0aa1-a632945b52a4.png)

## Spring Boot (Gradle) プロジェクトの作成

Spring Boot (Gradle) のプロジェクトを作成します。"Command Palette"を表示し、"Spring init"と入力すれば、プロジェクト作成のコマンド"Spring inializr: Create a Gradle Project..."が表示されますので、これを選択します。

![image8.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2852633/e8c939ff-ce1f-2250-c045-35d2d89e112a.png)
![image9.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2852633/cb5742b3-090a-ed58-6ae4-ce24f96bfee0.png)

Spring Boot プロジェクトの初期設定の入力を求められます。
ここでの設定は、開発するバージョンや環境にあわせて設定してください。

- Spring Boot のバージョン
  ![image10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2852633/ddfe4c21-d857-df0b-5663-3bc911d81e42.png)
- 開発言語
  ![image11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2852633/2a9b1b97-39cf-eeeb-3234-03b205d347b3.png)
- グループ ID
  ![image12.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2852633/6d4ef6e9-6000-d4c4-e6a8-bf15d3deb482.png)
- アーティファクト名
  ![image1-13.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2852633/066f9be6-8533-ba47-5067-98d506e60860.png)
- パッケージタイプ
  ![image14.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2852633/704fc534-9a52-e65f-16c1-3e059478cdfa.png)
- 開発言語のバージョン
  ![image15.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2852633/0df566b1-43e0-82b0-a590-e52a5d8cb261.png)
- デフォルトライブラリ
  ![image16.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2852633/cbc9354f-7f21-6e06-b405-451fbec074d8.png)
- 保存先フォルダー
  ![image17.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2852633/6884a213-ca87-0571-cb4d-dbb67de77738.png)

入力が終わると、右下に初期設定完了のメッセージと保存先フォルダーへの移動を促すダィアログが、表示されます。"Open"を押して、保存先フォルダーに移動します。
![image18.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2852633/e1d8459d-5249-c8be-c327-1dc90e7034b4.png)

保存先フォルダーへ移動すると、Gradle によるコンパイルが始まりますが、以下のエラーが発生しました。

"Could not resolve all files for configuration ':classpath'."
"Could not resolve org.springframework.boot:spring-boot-gradle-plugin:3.0.0."

![image19.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2852633/cd3d005c-af33-7727-1769-300fe37c486a.png)

Spring Boot のライブラリが解決できないという内容でしたが、調べてみても原因が解らなかったです。そこで、Gradle の設定を変更し、Spring Boot のライブラリを"3.0.0"系 から "2.7.0"系へ変更すると、エラーが解消されました。

```build.gradle
plugins {
	id 'java'
	id 'org.springframework.boot' version '2.7.5'
	id 'io.spring.dependency-management' version '1.1.0'
	id 'org.graalvm.buildtools.native' version '0.9.18'
}

group = 'jp.co.kccs'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = '17'

configurations {
	compileOnly {
		extendsFrom annotationProcessor
	}
}

repositories {
	mavenCentral()
}

dependencies {
	implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
	implementation 'org.springframework.boot:spring-boot-starter-thymeleaf'
	implementation 'org.springframework.boot:spring-boot-starter-web'
	compileOnly 'org.projectlombok:lombok'
	developmentOnly 'org.springframework.boot:spring-boot-devtools'
	runtimeOnly 'com.h2database:h2'
	annotationProcessor 'org.springframework.boot:spring-boot-configuration-processor'
	annotationProcessor 'org.projectlombok:lombok'
	testImplementation 'org.springframework.boot:spring-boot-starter-test'
}
```

![image20.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2852633/96012cbe-42c9-5f39-ce67-d75817404adb.png)

## Hello World を表示してみた

続いて、次のような Hello World 用のコントロールクラスを作成し、GRADLE TASKS から、Spring Boot アプリケーションを起動してみました。

```HelloWorldController.java
package jp.co.kccs.testapp;

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

@RestController
@CrossOrigin
public class HelloWorldController {

	@GetMapping("/")
	@ResponseBody
	public String response1() throws Exception {
		return "Hello World!! From Google Cloud WorkStations Dev";
	}
}

```

![image21.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2852633/e3658e68-49ab-c332-8b37-4ed5eb08b1e6.png)

Spring Boot アプリケーションの起動に成功しました。

起動した Spring Boot アプリケーションを確認するには、ブラウザをもう 1 つ立ち上げます。そして URL の入力欄に次のようにランチャーで見ているブラウザの URL の先頭の数字を Spring Boot アプリケーションの起動ポート(今回は、8080)に変更し、後ろのパラメーターを削るとアクセスができます。
![image22.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2852633/27b11d90-7cd6-042e-808c-f1295874196e.png)

無事、Hello World が表示されました。
![image23.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2852633/b8d74920-3c86-036c-340b-50da3590cd66.png)

## まとめ

今回は、"Extension Pack for Java"等の IDE の追加パッケージや Spring Boot の初期設定を手動で行いました。しかし、Cloud WorkStations の"構成"で初期実行コマンドを入力できる箇所があります。そこを利用すれば、IDE の追加パッケージや、Spring Boot などの初期設定も自動でインストールもできて、開発環境の構築がさらに楽になりそうです。機会があれば、そちらの設定方法についても、今後ブログに出来ればと考えています。