[InProgress] VS Code の Remote Container で Spring Boot ( gradle x Java ) の開発環境を構築する手順を整理する
やりたいこと(優先度順)
- Visual Studio Code の Remote Container を使用して Spring Boot の Application を作成する
-
Remote Container
を使用することで HostOS を汚さず環境構築する - Spring Boot で アプリケーションを実装する
- gradle を使う
- kotlinを使う
Step
-
VS Code の基本構成を準備する
- Docker で試す
- docker-compose で試す
-
コンテナを準備する
- application server
- db server
-
Spring Boot の初期プロジェクトを作成する
- java x maven
- java x gradle
-
kotlin x maven※未着手 -
kotlin x gradle※失敗する
-
アプリケーションの基本的な設定
- DB接続設定
- PHP/Laravel のように migrationツール で migrate できるようにする
課題
- 次の構成で実現しようとしたら実現出来なかった。
- 構成
- Visual Studio Code
- Remote Container
- Spring Boot ( gradle x kotlin )
- 発生したエラー
- 構成
中間成果物
参考
VS Code Remote - Containers を Docker Compose で使うのだー! - Mitsuyuki.Shiiba
これを参考にしながら構築する
起動しないなぁと思っていたら、 VS Code の Configuration の設定が VirtualBox で構築した Docker へ接続するようになってた。設定が Global 過ぎたので、より狭い範囲で設定しておくべきだった。
VS Code のコマンドパレットから作成すると以下の構成になる。
tree -a
.
└── .devcontainer
└── devcontainer.json
└── Dockerfile
{
"build": {
"dockerfile": "Dockerfile",
},
}
これを、今後を見越して以下の感じにする。
tree -a
.
├── .devcontainer
│ └── devcontainer.json
└── docker
└── Dockerfile
{
"build": {
"dockerfile": "../docker/Dockerfile",
},
}
お試しで構築しようとしている コンテナ のベースイメージのバージョンは以下。
- openjdk: 15
- alpin: 3.12
pull コマンド
docker pull openjdk:15-jdk-alpine
掲載ページ。
Alpine Linux の基本
devcontainer.json のレファレンス
docker-compose up したコンテナを起動させ続ける方法 - Qiita
docker-compse.yml の中で tty: true
を試したけど駄目だったので、 command を使った方法で実現した。
curl https://start.spring.io/starter.zip -d language=kotlin -d dependencies=web,mustache,jpa,h2,devtools -d packageName=com.example.blog -d name=Blog -o blog.zip -d type=gradle-project
Tutorial | Building web applications with Spring Boot and Kotlin
pom だと Spring Boot Dashboard が Side Menu で出てくるけど、 gradle だと出てこないのはなんでなん
pom だと Spring Boot Dashboard が Side Menu で出てくるけど、 gradle だと出てこないのはなんでなん
起動タイミングの問題だった。
gradle
でも対象コードまで行って Run すれば Side Menu が出てきた。
いまのところのベース構成
$ tree -a
.
├── .devcontainer
│ └── devcontainer.json
└── docker
├── docker-compose.yml
├── mysql-confd
│ └── default_authentication.cnf
└── openjdk
└── Dockerfile
{
"name": "My Java/Kotlin Application",
"dockerComposeFile": "../docker/docker-compose.yml",
"service": "openjdk",
"workspaceFolder": "/workspace",
"settings": {
},
"extensions": [
// Language: Java / Kotlin
"vscjava.vscode-java-pack",
"redhat.java",
"vscjava.vscode-java-debug",
// Spring Boot
"vscjava.vscode-spring-initializr",
"pivotal.vscode-spring-boot",
"pivotal.vscode-boot-dev-pack",
"vscjava.vscode-spring-boot-dashboard"
],
}
version: '3'
services:
openjdk:
build: ./openjdk
ports:
- "8080:8080"
command: /bin/sh -c "while :; do sleep 10; done"
volumes:
- ..:/workspace:cached
mysql:
image: mysql:5.7
container_name: "dc-db-mysql"
restart: always
environment:
MYSQL_DATABASE: mysqldb
MYSQL_ROOT_PASSWORD: mysqldb
ports:
- 13306:3306
volumes:
- ./mysql-confd:/etc/mysql/conf.d
ARG JDK_VERSION="15"
ARG ALPIN_VERSION="3.12"
FROM openjdk:${JDK_VERSION}-jdk-alpine${ALPIN_VERSION}
RUN apk update \
&& apk add git curl maven make mysql-client
[mysqld]
default_authentication_plugin= mysql_native_password
あとは、 vscode-spring-initializr
で適当に Spring Boot プロジェクトを新規作成する。
ちょっとリッチな Spring Boot Application を作成する Tutorial 。
Tutorial | Building REST services with Spring
これがやりたいことの基本をほぼすべて押さえていた。
TODO: Spring Boot に Migration Tool を導入する
Unresolved reference
エラーが発生
[Unsolved] Kotlin で構築しようとしたときに [Solved] 予期せぬ Thymeleaf のエラーが発生する
※エラーログはメモし忘れた。
VS Code に gabrielbb.vscode-lombok
の拡張機能を導入することでエラーが解決。
以下の記事関連だった。
VS Code で Java を書くときに Lombok が無くてエラーが出たとき - だだだだだだいありー
Spring Boot 2 入門: 基礎から実演まで で Lombok を使った Entity を作成した際に warning を放置してたのが駄目だった。
↑の拡張機能を導入することで warning も解消された。
Memo: Spring Boot の関連ライブラリ
Memo: Spring Boot の基本設定
Spring Boot の起動方法の変更
SpringBoot でポートを変更する - Qiita
UseCase
- Docker Container 上で複数の Spring Boot Applicaiton を起動させたい時に、起動Port が重複させないように設定する
Spring Boot Application を実装するための IDE
- InteliJ IDEA
- Spring Tool Suite
- Eclipse + Spring Tools 4 for Eclipse
- Visual Studio Code + Spring Tools 4 for Visual Studio Code
- Theia + Spring Tools 4 for Theia