Java:Spring Bootをdevcontainerで構築する

SpringBootの環境をdevcontainerで作成するJAVA21
◆ Live配信スケジュール ◆
サイオステクノロジーでは、Microsoft MVPの武井による「わかりみの深いシリーズ」など、定期的なLive配信を行っています。
⇒ 詳細スケジュールはこちらから
⇒ 見逃してしまった方はYoutubeチャンネルをご覧ください
【5/21開催】Azure OpenAI ServiceによるRAG実装ガイドを公開しました
生成AIを活用したユースケースで最も一番熱いと言われているRAGの実装ガイドを公開しました。そのガイドの紹介をおこなうイベントです!!
https://tech-lab.connpass.com/event/315703/

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

終わりに向かいます

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

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

対象バージョン情報
Java21
Spring Boot3.2.2
Docker Java Base Imageeclipse-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環境

ではまた~

 

アバター画像
About 龍:Ryu 107 Articles
2022年入社で主にフロントエンドの業務でTailwindと遊ぶ日々。お酒とうまいご飯が好きで、運動がちょっと嫌いなエンジニアです。しゃべれるエンジニアを目指しておしゃべりとブログ執筆に注力中(業務もね)//
ご覧いただきありがとうございます! この投稿はお役に立ちましたか?

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

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


ご覧いただきありがとうございます。
ブログの最新情報はSNSでも発信しております。
ぜひTwitterのフォロー&Facebookページにいいねをお願い致します!



>> 雑誌等の執筆依頼を受付しております。
   ご希望の方はお気軽にお問い合わせください!

Be the first to comment

Leave a Reply

Your email address will not be published.


*


質問はこちら 閉じる