Java:Spring Bootをdevcontainerで構築する

SpringBootの環境をdevcontainerで作成するJAVA21

ども!今回は、JavaのSpring Bootをdevcontainerで開発するための環境構築を行いました。Javaバージョンとしては21を想定しています。Javaの環境構築は苦い思い出がありますが、今回もしっかり沼にはまってしまいました。Spring Bootはスタートアップだけなので、ひとまず環境構築の身を対象にしています。

終わりに向かいます

どもども!全身の筋肉痛から順調に回復している龍ちゃんです。二日ほどスノボをしてきたので、体のいたるところがバッキバキですね。アドレナリンが出ているときは、全く気にならないのが人間の不思議ですね。

さて!今回も環境構築系のお話になります。タイトルの通りですが、「JavaのSpring Bootをdevcontainerで構築する」ことを進めていきます。Javaの場合だと、バージョン情報が重要になるので、以下にバージョン情報を出しておきます。

対象 バージョン情報
Java 21
Spring Boot 3.2.2
Docker Java Base Image eclipse-temurin:21-jdk-alpine

それでは、始めていきます。

Java:Spring Bootでのdevcontainerを構築する

手順としては、以下になります。

  • spring initializrでアプリケーションをゲットする
  • docker-compose.ymlを構築する
  • devcontainerを設定する
  • hello worldを追加する

今回は、Spring Boot公式が出しているサービスを使って環境を作成します。ディレクトリ構造としては、以下になる想定です。

.
├── .devcontainer               # devcontainer設定ファイル
│   └── devcontainer.json
├── Dockerfile                  # プロダクションビルド用
├── docker-compose.yml          # devcontainer用docker-compose file
├── backend                     # spring-bootプロジェクト
└── README.md

それでは、始めていきましょう。

spring initializrでSpring Bootのアプリケーションを作成する

まずは、Spring Bootのアプリケーションを取得しましょう。spring initializrを使うことで、CLIを使うこともなく設定することができます。また、依存関係も追加することができます。

SpringInitializrの画面

今回のアプリケーション名は「backend」で作成しています。依存関係として、Spring Boot Dev ToolsSpring Webを追加で選択しています。

基本的に飛ばしても問題ありません。もし、権限回りmvnwの権限回りのエラーが起きた場合は、以下のコマンドを実行してください。

sudo chmod +x backend/mvnw

docker-compose.ymlを構築する

ここは好みですが、backendのファイル内にtargetディレクトリを作成します。Dockerコマンドで自動生成した場合では、rootユーザーで作成されて削除が大変な場合があります。

mkdir backend/target

docker-compose.ymlは、ローカルのdevcontainerを起動するためのファイルとして用意します。

version: "3.7"
services:
  spring:
    image: eclipse-temurin:21-jdk-alpine
    tty: true
    volumes:
      - ./backend:/app/
      - target:/app/target
    ports:
      - 8080:8080

volumes:
  target:

ビルド結果として保存されるtargetvolumesとしてバインドすることで、ビルド結果をコンテナ内に収めています。

devcontainerを設定する

devcontainer用の設定ファイルを用意します。

{
  "dockerComposeFile": ["../docker-compose.yml"],
  "service": "spring",
  "workspaceFolder": "/app",
  "forwardPorts": [8080],
  "customizations": {
    "vscode": {
      "extensions": [
        "vscjava.vscode-java-pack",
        "vmware.vscode-boot-dev-pack",
        "vscjava.vscode-spring-initializr"
      ]
    }
  },
  "remoteUser": "root"
}

起動ファイルを指定して、ワークスペースをappにしています。拡張機能周りは、開発に必要そうなものを入れています。この辺は、素人なので別途参照してください。

起動しようや!!!

ここまでくれば、devcontainerを起動することができます。

Remoteの機能が詰め込まれたHubを開く

出てきた検索で「Reopen in Container」をクリックしましょう。

Reopen in Containerを指定して開く

Visual Studio Codeが再起動します。

起動が完了したら、右側の実行ボタンを押してみましょう。起動後、http://localhost:8080にアクセスしてみましょう。以下の画面が出力されたら成功です。SpringBootエラー画面

おまけ:hello worldを追加する

エラーページがトップに表示されるのは、気分的には微妙ですよね。というわけで、簡単にHello Worldを挿入して、Spring Bootの自動再起動を確認しましょう。起動したまま、ソースコードを変更してください。

package com.example.backend;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@SpringBootApplication
@RestController
public class BackendApplication {

	public static void main(String[] args) {
		SpringApplication.run(BackendApplication.class, args);
	}

	@GetMapping("/")
	public String requestMethodName() {
		return new String("Hello world!!!!!!!");
	}
	
}

Spring Bootが自動で立ち上がりなおせば、成功です。

初めから来ました

はい!終わりました。環境構築周りをずっとやっていたのですが、nodeとは違ってコマンドがまずわからないので苦労しました。次は、こちらで作成した内容をGitHub ActionsでAzure Web Appsにデプロイする作業をブログにまとめていきたいと思います。

これまでの環境構築周りを一覧にまとめておきます。

React+devcontainer環境構築

nest.js+devcontainer環境

python+devcontainer環境

ではまた~

 

ご覧いただきありがとうございます! この投稿はお役に立ちましたか?

役に立った 役に立たなかった

0人がこの投稿は役に立ったと言っています。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です