JAVA

マイクロサービス入門:Spring Boot 3.2 と Java 21 の実装・Docker・Kubernetes ガイド

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

お得なお知らせ

スポンサードリンク
AI時代のキャリア構築

プログラミング学習、今日から動き出す

「何から始めるか」で止まっている人こそ、無料説明会や本で自分に合うルートを30分で確定できます。

Enjoy Tech!|月額制でWeb系に強い▶ (Kindle本)ITエンジニアの転職学|後悔しないキャリア戦略▶

▶ AIコーディング環境なら  実践Claude Code入門(Amazon)が実務で即使える入門書です。Amazonベストセラーにも選ばれていますよ。


スポンサードリンク

1. マイクロサービスとは何か ― 概念と留意点

基本概念

  • 機能単位で独立したプロセス群としてシステムを構築。
  • 各サービスは 自己完結(データベース・ビジネスロジックを持つ)ため、開発チームが言語やフレームワークを選択しやすくなる。

主な利点

項目 具体的効果
スケーラビリティ 高負荷のサービスだけを水平に増やせる。CPU・メモリ使用率が最適化され、インフラコスト削減につながる。
組織独立性 チーム単位でデプロイサイクルが短くなり、アジイル開発が実現しやすい。
技術選択の自由度 言語・ミドルウェアをサービスごとに最適化できる(例:リアルタイム処理は Kotlin、バッチは Scala 等)。

直面しやすい課題

  • ネットワーク遅延・障害
    サービス間呼び出しが増える分、通信エラーやレイテンシが全体性能に影響する。
  • 分散トランザクション
    ACID を保つには Saga パターンや イベント駆動 の設計が必須になる。
  • 運用負荷
    ロギング・モニタリング・構成管理ツールを複数導入し、統一的に可視化する仕組みが必要。

2. Spring Boot 3.2 と Java 21 の概要 ― プロジェクト作成手順

Spring Initializr の設定例(Maven/Java 21)

項目 設定値
Project Maven Project
Language Java
Spring Boot 3.2.x (最新)
Packaging Jar
Java 21
Dependencies Spring Web, Spring Data JPA, Spring Cloud OpenFeign, Spring Boot Actuator
  1. https://start.spring.io にアクセスし上表通りに入力。
  2. Generate → ダウンロードした ZIP を解凍。
  3. ターミナルで ./mvnw spring-boot:run を実行し、起動を確認。

Java 21 の新機能がそのまま利用可能

  • レコードシーリングクラスパターンマッチング for switch が Spring のバインディングや Jackson とも相性良好。
  • Jakarta EE 9+ への移行が完了しており、javax.*jakarta.* に置き換わった API をそのまま使用できる。

3. シンプルな REST API の実装・テスト & Docker コンテナ化

CRUD エンドポイント(最小構成)

JUnit 5 + MockMvc でコントローラ単体テスト

Dockerfile(マルチステージビルド)とサイズの目安

※イメージサイズはベースに使用する distroless/java21 のバージョンや JAR の依存関係によって変動します。実際のビルド結果は「数十 MB 程度」になることが多いですが、正確な数値は docker images で確認してください。

ビルド・起動例

docker‑compose でローカルに複数サービスを一括起動


4. Spring Cloud の主要コンポーネントと Observability 設定

コンポーネント 用途 主な設定例
Service Discovery (Eureka / Consul) サービスの登録・検索 spring.cloud.discovery.enabled=true など
Config Server 外部化されたプロパティ管理 Git リポジトリを指す spring.cloud.config.server.git.uri
LoadBalancer クライアント側負荷分散 @LoadBalanced RestTemplate または OpenFeign と併用
Resilience4j サーキットブレーカー・リトライ application.ymlresilience4j.circuitbreaker.* を定義
Actuator + Micrometer メトリクス収集 & エンドポイント公開 /actuator/prometheus で Prometheus 形式にエクスポート

Actuator と Micrometer の設定例

  • Grafanajvm_memory_used_bytes{area="heap"} 等を可視化すれば、ヒープ使用率や GC の頻度が即座に把握できる。
  • Spring Cloud Sleuth(2024.0 以降)は自動的に traceId を付与し、分散トレースのベースとなる。

5. Dapr と Kubernetes デプロイ ― Helm Chart の基本構造

Spring Boot アプリと Dapr sidecar の連携

参考: 「Spring Bootで始める Dapr 入門」は執筆時点で有効です。

ローカルクラスター(Kind)へのデプロイ手順

Helm Chart の構成要素(簡易例)

  • values.yaml のみを書き換えることで、ステージング・本番環境の差分を GitOps ツール(ArgoCD 等)から管理できる。

6. 実務で活かすベストプラクティス

API バージョニング & エラーハンドリング

  • バージョンをパスに組み込むことで、将来的な互換性破壊が安全になる。
  • @RestControllerAdvice で例外を統一フォーマット(code, message) に変換すると、フロントエンド側の実装コストが削減できる。

統一ロギング戦略

  • JSON 形式で出力し、Elastic Stack(Filebeat → Elasticsearch → Kibana)へ流すと検索・集計が容易になる。
  • Sleuth が自動付与する traceId と組み合わせることで、サービス間トレーシングが一貫して取得できる。

CI/CD パイプライン(GitHub Actions)

  • ポイント
  • ビルドとテストを分離し、失敗した段階でパイプラインが止まるようにする。
  • image.tag に Git SHA を使用すれば、デプロイ履歴がコード変更と1対1で追跡できる。

7. 次のステップ

  1. ローカル環境で実装確認
  2. ./mvnw spring-boot:run/api/v1/users が期待通りに動くかテスト。

  3. コンテナ化・Compose でマルチサービスを体験

  4. データベース、Config Server、ユーザーサービスが連携できることを確認。

  5. Dapr sidecar を追加し State Store / Pub‑Sub のサンプルを実行

  6. dapr run --app-id user-service --components-path ./components でローカルにデプロイ。

  7. Helm Chart と GitHub Actions による自動デプロイ

  8. helm install → CI が成功したら本番クラスターへ自動的にリリースされるフローを構築。

  9. Observability の整備

  10. Prometheus + Grafana ダッシュボードで JVM、HTTP latency、CircuitBreaker の指標を可視化し、アラート設定も行う。

本ガイドは Java 21 / Spring Boot 3.2 をベースに、マイクロサービスの設計・実装・デプロイまでを一貫して体験できるよう構成しています。最新バージョンや外部リンクの有効性は随時チェックし、組織の要件に合わせてカスタマイズしてください。

スポンサードリンク

お得なお知らせ

スポンサードリンク
AI時代のキャリア構築

プログラミング学習、今日から動き出す

「何から始めるか」で止まっている人こそ、無料説明会や本で自分に合うルートを30分で確定できます。

Enjoy Tech!|月額制でWeb系に強い▶ (Kindle本)ITエンジニアの転職学|後悔しないキャリア戦略▶

▶ AIコーディング環境なら  実践Claude Code入門(Amazon)が実務で即使える入門書です。Amazonベストセラーにも選ばれていますよ。


-JAVA