JAVA

Spring Boot 3.2 と JDK 21で始めるマイクロサービス構築ガイド

ⓘ本ページはプロモーションが含まれています

もっとスキルを活かしたいエンジニアへ

スポンサードリンク
働き方から選べる

無料で使えて良質な案件の情報収集ができるサービス

エンジニアの世界では、「いつでも動ける状態を作っておけ」とよく言われます。
技術やポートフォリオがあっても、自分に合う案件情報を日常的に見れていないと、いざ動こうと思った時に比較や判断が難しくなってしまいます。
普段から案件情報が集まる環境を作っておくと、良い案件が出た時にすぐ動きやすくなりますよ。
筆者自身も、メガベンチャー勤務時代に年収1,500万円を超えた経験があります。振り返ると、技術だけでなく「どんな案件や働き方があるか」を日頃から見ていたことが、キャリアの選択肢を広げるきっかけになりました。
このブログを読んでくれた方に感謝を込めて、実際に使っている情報収集サービスを紹介します。

フルリモート・週3日・高単価、どんな条件も妥協したくないなら

フリーランスボードに無料会員登録する

利用者10万人以上。業界最大規模45万件の案件。AIマッチ機能や無料の相場情報が人気。

年収800万円以上のキャリアアップ・ハイクラス正社員を視野に入れているなら

Beyond Careerに無料相談する

内定獲得率90%以上。紹介先企業とは役員クラスのコネクションがある安心と信頼できるエージェント。


スポンサードリンク

前提条件と開発環境の準備

Spring Boot 3.2 と JDK 21 でマイクロサービス基盤を構築するにあたっては、使用するツールのバージョンが相互に対応していることが最重要です。このセクションでは、2026 年時点で「最新安定版」とみなされている主要ツールと、そのインストール手順・環境変数設定方法をまとめます。

ツール一覧(公式ドキュメント参照)

ツール 推奨バージョン 主な利用目的
JDK 21 (LTS) 言語機能・パフォーマンス向上
ビルドツール Maven 3.x / Gradle 8.x(いずれも最新安定版) 依存管理・ビルド自動化
IDE Spring Tool Suite 4、IntelliJ IDEA Ultimate (2023‑12) コード補完・デバッグ支援
Docker Engine 最新安定リリース(公式サイトの docker version で確認) コンテナイメージ作成・実行
Git 最新安定版 ソース管理 & CI/CD パイプライン

注: バージョンは頻繁に更新されるため、インストール直前に公式サイトで最新情報を確認してください。

インストール手順(OS 共通)

  1. JDK 21
  2. OpenJDK または Oracle JDK を公式サイトからダウンロードし、/usr/local/java/jdk-21 へ展開。
  3. JAVA_HOMEPATH に以下を追記(~/.bashrc~/.zshrc):

    bash
    export JAVA_HOME=/usr/local/java/jdk-21
    export PATH=$JAVA_HOME/bin:$PATH

  4. Maven / Gradle

  5. macOS では brew install maven gradle、Linux/Windows は公式 zip を展開し同様に PATH に追加。

  6. IDE のセットアップ

  7. Spring Tool Suite 4 のインストーラを実行し、Spring Boot 用プラグインが有効か確認。IntelliJ を使用する場合は「Spring」プラグインを有効化してください。

  8. Docker Desktop / Engine

  9. Docker Hub から最新版のインストーラ(Windows/macOS)または公式リポジトリ(Linux)で apt/yum 経由で導入。デーモン起動を確認したら、docker version コマンドでバージョンが表示されることをチェックします。

  10. Git

  11. 公式インストーラまたはパッケージマネージャで導入し、以下の基本設定を行います。

    bash
    git config --global user.name "Your Name"
    git config --global user.email you@example.com

動作確認コマンド例


プロジェクト作成とパッケージ設計

本章では、Spring Initializr を用いたプロジェクトの雛形生成から、クリーンアーキテクチャに基づくディレクトリ構造までを解説します。適切なパッケージ分割は保守性・テスト容易性の向上につながります。

Spring Initializr の使い方

  1. https://start.spring.io にアクセスし、以下の項目を設定します。
  2. Project: Maven (または Gradle)
  3. Language: Java
  4. Spring Boot: 3.2.x(最新リリース)
  5. Group / Artifact: com.example / orderservice
  6. Packaging: Jar
  7. Java: 21

  8. 必要な依存関係は次の通りです。

text
Spring Web
Spring Data JPA
Spring Boot Actuator
Spring Cloud Discovery (LoadBalancer)
Lombok(開発時のみ)
spring-boot-devtools(任意)

  1. 「Generate」ボタンで ZIP を取得し、IDE にインポートします。

ポイント: spring-cloud-starter-netflix-eureka は非推奨です。代わりに spring-cloud-starter-loadbalancerspring-cloud-starter-consul-discovery(または Kubernetes‑native の spring-cloud-kubernetes-discovery) を選択してください。

推奨パッケージ構造

以下は「ドメイン駆動設計(DDD)に基づく」典型的なレイアウトです。各層がフレームワークへの依存を最小化するよう意図しています。

主要設計上の留意点

  • エンティティは immutable に近い形で実装し、状態変更は Service 層のメソッドで行う。
  • DTO は Java 21 の record を活用してボイラープレートを削減する。
  • リポジトリはインタフェースだけ定義し、実装は infrastructure.persistence に置くことでテスト時に簡単にモックできる。

コア実装:REST API とセキュリティ

この章では、エンドポイントの設計例と共通的なエラーハンドリング、さらにステートレス認証として JWT を利用する方法を示します。統一された実装パターンはチーム全体でコードレビューや保守を容易にします。

コントローラ・サービス層の基本実装例

統一エラーハンドリング

@RestControllerAdvice によって例外ごとに HTTP ステータスと JSON ボディを統一します。

JWT 認証の実装フロー

  1. 認証エンドポイント (/auth/login) でユーザー情報を検証し、io.jsonwebtoken.Jwts によりトークンを生成。
  2. フィルタ JwtAuthenticationFilter がリクエストヘッダーからトークンを抽出し、SecurityContextHolder に認可情報を設定。

SecurityConfig でフィルタチェーンに登録し、 /auth/**swagger-ui/** は除外します。

OpenAPI(Swagger)自動生成

Spring Doc のスターターパッケージを pom.xml に追加すれば、ビルド時に API ドキュメントが自動的に公開されます。

/swagger-ui.html にアクセスすると、上記コントローラのメタ情報が即座に可視化されます。


設定とコンテナ化:Config Server、Docker、サービスディスカバリ

このセクションでは、外部設定管理(Spring Cloud Config Server)と、マイクロサービス間の名前解決・ロードバランシングに Spring Cloud Discovery を組み合わせた構成を紹介します。Docker と docker‑compose によるローカル環境再現手順も併せて示します。

Spring Cloud Discovery の選択肢(Eureka からの脱却)

実装 主な利用シーン メリット
Spring Cloud LoadBalancer + Consul オンプレミス・クラウド横断的に使用 軽量、Health Check が標準装備
Spring Cloud Kubernetes Discovery 完全に K8s 上で完結させたい場合 K8s の Service と連携し、外部サーバ不要
Apache Zookeeper(オプション) 高可用性が必須なレガシー環境 強固な分散ロック機能

推奨: 開発・検証フェーズは spring-cloud-starter-consul-discovery、本番は Kubernetes が前提であれば spring-cloud-kubernetes-discovery を選択してください。

DiscoveryConfig のサンプル(Consul)

Config Server の基本設定

application.yml に外部設定サーバの URL を記載し、プロファイルごとの設定ファイルをリポジトリで管理します。

Config Server 自体は公式 Docker イメージ springcloud/configserver の最新版を使用し、native プロファイルでローカルリポジトリを参照させます。

Dockerfile と docker‑compose(ローカルスタック)

以下はマイクロサービス本体と支援コンテナの構成例です。Dockerfile はビルド段階とランタイム段階に分離し、イメージサイズを最小化します。

環境プロファイルの管理ポイント

  • application-dev.ymlapplication-prod.ymlconfig-repo に格納し、機密情報は Spring Cloud Config の暗号化機能(encrypt.key)で保護。
  • Docker Compose では SPRING_PROFILES_ACTIVE=dev を明示的に指定し、本番環境は Kubernetes の ConfigMap/Secret と併用して切り替える設計とします。

テスト・CI/CD・Observability(可観測性)

高品質なマイクロサービスを継続的にリリースするためのテスト戦略、GitHub Actions を活用したパイプライン、そして実運用で欠かせないメトリクスとログ収集について解説します。

単体テストと統合テストのベストプラクティス

  • JUnit 5 + Mockito でビジネスロジックを純粋に検証。
  • Testcontainers を利用して実際の MySQL コンテナ上でリポジトリ層の統合テストを実行し、本番環境と同等の動作確認を行う。

GitHub Actions による CI/CD パイプライン

以下は「コードのビルド → Docker イメージ作成 → GCR (または GHCR) へプッシュ → Kubernetes デプロイ」を自動化した例です。

ポイント: k8s ディレクトリに配置するマニフェストは、imagePullPolicy: IfNotPresent とし、ロールバック用に revisionHistoryLimit を設定しておくと安全です。

Observability:メトリクス・トレーシング・ログ

  1. Actuator + Micrometer
    yaml
    management:
    endpoints:
    web:
    exposure:
    include: health,info,prometheus
    metrics:
    export:
    prometheus:
    enabled: true

    /actuator/prometheus が Prometheus にスクレイプされ、Grafana で可視化できます。

  2. 分散トレーシング
    OpenTelemetry の Spring Boot スターターパッケージを追加し、Jaeger または Zipkin へスパンを送信します。

  3. ロギングの統一
    logback-spring.xml で JSON フォーマット(例: net.logstash.logback.encoder.LoggingEventCompositeJsonEncoder)に切り替えると、ELK/EFK スタックへの取り込みが容易です。

ログ出力のベストプラクティス

  • プレースホルダー (log.info("Order {} created", id)) を必ず使用し、文字列結合コストを削減。
  • 構造化ログorderId, userId といったキー情報を明示的に出力し、検索性と集計精度を向上させる。

まとめ

本稿では、Spring Boot 3.2 / JDK 21 環境下でマイクロサービス基盤を構築するための全体像を示しました。主要ポイントは次の通りです。

項目 推奨アプローチ
開発環境 最新 LTS の JDK 21 と公式ドキュメントで確認できるビルドツール最新版
サービスディスカバリ Eureka ではなく Spring Cloud LoadBalancer + Consul、または Kubernetes‑native の Discovery を採用
設定管理 Spring Cloud Config Server(Git リポジトリ)+プロファイルで環境差分を一元化
コンテナ化 多段 Dockerfile と docker‑compose でローカルスタックを再現
テスト・CI/CD Testcontainers + GitHub Actions による自動ビルド・デプロイパイプライン
Observability Actuator + Micrometer + OpenTelemetry、構造化ログによるフルスタック可観測性

これらを組み合わせて実装すれば、スケーラブルかつ保守しやすいマイクロサービスアーキテクチャが手に入ります。ぜひ本ガイドをプロジェクトのテンプレートとして活用し、継続的な改善サイクルへとつなげてください。

スポンサードリンク

もっとスキルを活かしたいエンジニアへ

スポンサードリンク
働き方から選べる

無料で使えて良質な案件の情報収集ができるサービス

エンジニアの世界では、「いつでも動ける状態を作っておけ」とよく言われます。
技術やポートフォリオがあっても、自分に合う案件情報を日常的に見れていないと、いざ動こうと思った時に比較や判断が難しくなってしまいます。
普段から案件情報が集まる環境を作っておくと、良い案件が出た時にすぐ動きやすくなりますよ。
筆者自身も、メガベンチャー勤務時代に年収1,500万円を超えた経験があります。振り返ると、技術だけでなく「どんな案件や働き方があるか」を日頃から見ていたことが、キャリアの選択肢を広げるきっかけになりました。
このブログを読んでくれた方に感謝を込めて、実際に使っている情報収集サービスを紹介します。

フルリモート・週3日・高単価、どんな条件も妥協したくないなら

フリーランスボードに無料会員登録する

利用者10万人以上。業界最大規模45万件の案件。AIマッチ機能や無料の相場情報が人気。

年収800万円以上のキャリアアップ・ハイクラス正社員を視野に入れているなら

Beyond Careerに無料相談する

内定獲得率90%以上。紹介先企業とは役員クラスのコネクションがある安心と信頼できるエージェント。


-JAVA