JAVA

Spring Boot 3 と Java 17 の基本構成・Docker 化・マルチクラウド CI/CD 入門

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

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

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

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

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

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

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

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

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

Beyond Careerに無料相談する

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


スポンサードリンク

Spring Boot の基本構成とビルド設定

Spring Boot をローカルで手軽に始めるには、プロジェクトのディレクトリ構造とビルドツールの選択が最初のハードルです。このセクションでは Java 17 以上・Spring Boot 3.x を前提に、Maven と Gradle の最小構成を示しながら「どちらでも同等に開発できる」ことを結論とします。

Maven の最小構成 (pom.xml)

以下は Spring Boot 3.2 系の BOM(Bill‑of‑Materials)を取り込み、Web と Actuator を使用するだけのシンプルな pom.xml です。

Gradle Kotlin DSL の最小構成 (build.gradle.kts)

Gradle を選択した場合の設定例です。Kotlin DSL で記述しているため、IDE 補完が効きやすくなります。

まとめ

  • 結論:Maven・Gradle のどちらでも java.version=17 と Spring Boot 3.x の BOM を取り入れれば、最新機能と長期サポートがすぐに利用できます。
  • 理由:Spring Boot 3 は Jakarta EE 9 に対応し、Java 17 が最低要件となっているためです。
  • 実践例:上記の pom.xmlbuild.gradle.kts をそのままプロジェクトに貼り付ければ、ローカルで mvn spring-boot:run または ./gradlew bootRun が動作します。

プロファイル別設定と Docker コンテナ化

環境ごとの設定差分を安全かつ可搬性の高い形で管理する方法として、application.ymlapplication-{profile}.yml の組み合わせが標準です。この章ではプロファイル構成の概要と、マルチステージ Dockerfile による軽量イメージ作成手順を解説します。

プロファイル別設定 (application.yml, application-dev.yml, application-prod.yml)

Spring Boot は起動時に spring.profiles.active で指定されたプロファイルの設定をマージします。以下は「共通」「開発」「本番」の3層構成例です。

ポイント

  • 結論:共通項目は application.yml に、環境固有の項目だけをプロファイル別ファイルに分離すれば、コード変更なしでデプロイ先が切り替わります。
  • 理由:Spring の設定階層は「上書き」方式なので、差分だけを書けば済むため保守コストが大幅に低減します。

Dockerfile(マルチステージビルド)

Docker 化の目的は「ローカルと本番で同一環境を再現しつつ、イメージサイズをできるだけ小さくする」ことです。2026 年時点で推奨されているベースイメージは eclipse-temurin:17-jdk-alpine です(公式 Docker Hub のタグサイズは約 84 MB)【1】。以下に Maven ビルドと実行ステージを分離した Dockerfile を示します。

ローカルでのビルドと起動手順

  1. イメージビルド
    bash
    docker build -t demo-app:latest .
  2. 開発プロファイルでコンテナ起動
    bash
    docker run -d --name demo-dev \
    -p 8080:8080 \
    -e SPRING_PROFILES_ACTIVE=dev \
    -e DEV_DB_PASSWORD=secret123 \
    demo-app:latest
  3. ヘルスチェック(ブラウザまたは curl
    bash
    curl http://localhost:8080/actuator/health

サイズとコストの根拠

  • イメージサイズdocker images demo-app の結果は約 85 MB。Alpine ベースの JDK イメージはフル JDK(≈ 300 MB)に比べて約 3 倍軽量です【1】。
  • クラウド実行コスト:同一イメージを AWS Fargate、Azure Container Apps、GCP Cloud Run の最小構成で動かした場合の月額概算は以下の通り(2026 年 4 月時点の公開料金)【2】【3】【4】。
  • AWS Fargate:vCPU 0.25、メモリ 0.5 GiB のタスクで約 $8 /月
  • Azure Container Apps:0.25 vCPU・0.5 GiB メモリで約 $9 /月
  • GCP Cloud Run:CPU 0.125 vCPU、メモリ 0.5 GiB の場合、実行秒数に応じて $7–$10 /月

このように、軽量イメージはインフラ費用の削減にも直結します。


主要クラウドサービス比較とデプロイ選定ポイント

Spring Boot アプリを本番環境へ展開する際、AWS Elastic Beanstalk・Azure App Service・GCP Cloud Run の3つが初心者でも扱いやすい代表的な PaaS/Serverless です。ここではそれぞれの特徴と、選定時に注目すべきポイントを整理します。

サービス比較表(2026 年版)

項目 AWS Elastic Beanstalk Azure App Service GCP Cloud Run
デプロイ形態 PaaS(Java アプリ自動スケーリング) PaaS(コンテナ+コード直接デプロイ) 完全マネージド コンテナ実行 (Knative)
スケール方式 Auto Scaling Group + ELB(リクエスト単位ではなくインスタンス単位) インスタンスベースの水平スケール リクエスト数に応じた自動拡張・縮小
初期設定のハードル eb init と YAML だけで完了 ポータルまたは CLI (az webapp up) が直感的 gcloud run deploy の一行コマンド
CI/CD 連携 CodePipeline、GitHub Actions に標準対応【5】 GitHub Actions, Azure DevOps が公式統合【6】 Cloud Build + GitHub Actions が主流【7】
シークレット管理 AWS Secrets Manager + IAM ロール Azure Key Vault + Managed Identity GCP Secret Manager + Service Account
最小構成の月額(概算) t3.micro → 約 $8【2】 B1 標準プラン → 約 $9【3】 0.125 vCPU・0.5 GiB → 約 $7–$10【4】
デプロイ速度の目安 数分程度 1‑2 分 秒単位で即時起動

選定指針

  • 結論
  • 「設定がシンプルで無料枠からすぐに試したい」→ Elastic Beanstalk
  • 「Azure エコシステム(Azure AD、Key Vault)と統合したい」→ App Service
  • 「従量課金かつサーバーレスでトラフィック変動が激しい」→ Cloud Run

  • 理由:各サービスは無料枠があり、最小構成でも本番に近い自動スケールを体感できる点が共通しています。

Heroku との違いと選定基準(補足)

Heroku は「Git push だけでデプロイ」できる手軽さが魅力ですが、2026 年現在では以下の点で大手クラウドに劣ります。

項目 Heroku AWS / Azure / GCP
スケール粒度 Dyno 単位(最低 512 MB) メモリ・CPU を細かく指定可能
リージョン選択肢 主に米国・欧州、国内は限定的 国内リージョンが多数
コスト 同等スペックで月額 $25 前後【8】 最小構成で $7‑$10 前後
  • 結論:学習やプロトタイプには適していますが、本格運用・コンプライアンス要件を満たすには AWS/Azure/GCP が推奨されます。

GitHub Actions を使った CI/CD パイプライン構築例

自動化の中心になる GitHub Actions は、コードビルド・Docker イメージ作成・マルチクラウドデプロイまでを 1 つのワークフローで完結させられます。この章では実際に利用できる deploy.yml の全体像と、各ステップのポイントを解説します。

ワークフローファイル全体 (.github/workflows/deploy.yml)

以下は「プルリクエストでテスト → main ブランチへマージ時に本番デプロイ」までを自動化した例です。コメントで各ジョブの目的を簡潔に説明しています。

ステップ別解説

ステップ 目的 主なポイント
Checkout ソース取得 actions/checkout@v4 がデフォルトでリポジトリ全体を取得
JDK 設定 & キャッシュ ビルド時間短縮 setup-javacache: maven で依存ライブラリを再利用
Maven Build コンパイル+ユニットテスト -B(バッチモード)でログが CI に最適化
Docker ビルド マルチステージ Dockerfile の活用 ビルドキャッシュは自動的にレイヤー単位で再利用
レジストリ認証 安全なプッシュ GitHub Container Registry なら GITHUB_TOKEN がデフォルトで有効
クラウド認証 IAM 権限付与 各プロバイダーのシークレットを使用し、最小権限で操作
デプロイコマンド 本番環境への自動反映 eb deploy / az webapp config container set / gcloud run deploy をそれぞれ実行

この構成により「コードがプッシュされるたびに最新テスト済みイメージが 3 カ所のクラウドへ自動配備」されます。

ベストプラクティスまとめ

  • 結論:ビルド・テスト・Docker 化・マルチクラウドデプロイを同一パイプラインに統合すれば、手作業はほぼ不要です。
  • 理由:GitHub Actions がシークレット管理・キャッシュ機能を標準装備しているため、環境ごとの差分が最小化します。
  • 具体例build-test が成功したら必ず docker-build-push が走り、main ブランチにマージされた瞬間に 3 つのデプロイジョブが並行実行されます。

本番運用のベストプラクティスとトラブルシューティング

本番環境で安定稼働させるためには シークレット管理・モニタリング・リソース制限 の3点を徹底する必要があります。以下に具体的な設定手順と、よくあるエラーへの対処法をチェックリスト形式でまとめました。

クラウドネイティブシークレット管理(AWS Secrets Manager / Azure Key Vault / GCP Secret Manager)

機密情報はコードベースに埋め込まず、各クラウドのシークレットサービスから取得します。Spring Boot は spring-cloud-aws-secrets-manager-configazure-spring-boot-starter-keyvault-secrets などのスタータで簡単に連携できます。

設定手順

  1. シークレット作成
  2. AWS:aws secretsmanager create-secret --name /demo-app/prod --secret-string '{"dbUser":"prod_user","dbPassword":"..."}'【9】
  3. Azure:Azure Portal → Key Vault → シークレットを追加。
  4. GCP:gcloud secrets create demo-app-prod --data-file=./secret.json【10】

  5. IAM / RBAC の最小権限付与

  6. Elastic Beanstalk の EC2 インスタンス、App Service の Managed Identity、Cloud Run の Service Account にシークレット取得権限だけを付与。

  7. Spring 側で有効化(上記 YAML を application-prod.yml に追加)

まとめ

  • 結論:クラウド側のシークレットサービスに機密情報を一元管理し、アプリは環境変数または Spring のプロパティとして参照すれば安全です。
  • 理由:コードリポジトリに平文が残らず、ロールベースのアクセス制御で最小権限を徹底できるからです。

Actuator と各クラウドモニタリングサービスの連携(Micrometer)

Spring Boot Actuator が提供するメトリクスは Micrometer 経由で CloudWatch、Application Insights、Stackdriver にエクスポートできます。以下に設定例を示します。

CloudWatch(AWS)

Maven 依存

Application Insights(Azure)

Maven 依存

Stackdriver(GCP)

Maven 依存

まとめ

  • 結論:Actuator + Micrometer の組み合わせで、クラウドごとの標準モニタリングにシームレスにデータを送れます。
  • 理由:Micrometer が抽象化レイヤーとなり、プロバイダー固有の API 呼び出しコードを書かなくても済むからです。

よくあるエラーと対処チェックリスト

エラー 主な原因 確認手順 推奨対策
ポート衝突 コンテナが 8080 以外でリッスン、またはホスト側で同一ポート使用中 docker ps のポートマッピング確認 → netstat -tlnp でローカルポートを確認 application.ymlserver.port: 8080 を明示し、Dockerfile の EXPOSE 8080 と合わせる
メモリ不足 (OOM) コンテナのデフォルトヒープが過大/クラウド側のメモリ上限が低い Cloud Run コンソール → 「最大インスタンスメモリ」確認
kubectl top pod(EKS/AKS)で実測値を見る
Dockerfile の JAVA_OPTS="-Xmx512m" でヒープ上限を設定し、クラウド側は最低 1 GiB に拡張
起動失敗 (MissingPropertyException) 必須プロパティが未定義(例:DB URL) 起動ログの Caused by: java.lang.IllegalStateException を検索 環境変数・シークレットマネージャーに正しいキーを設定し、SPRING_PROFILES_ACTIVE=prod が有効か確認
Docker プル失敗 レジストリ認証トークン期限切れまたは名前ミスマッチ 手動で docker pull <image> を試す
GitHub Actions のログで authentication failed を検索
シークレットの GITHUB_TOKEN または各クラウドレジストリ用シークレットを再発行し、ワークフローに正しく設定
ヘルスチェック失敗(Cloud Run) /actuator/health が 200 以外を返す curl https://<service>.run.app/actuator/health 実行 Actuator の management.health.defaults.enabled=true を有効にし、外部依存(DB 等)の接続情報が正しいか確認

トラブルシューティングの流れ

  1. ログ取得 → CloudWatch Logs / Azure Monitor / GCP Logging でコンテナ標準出力を確認。
  2. リソースモニタリング → Micrometer が送るメトリクスで CPU・ヒープ使用率を把握。
  3. 設定再現 → ローカルの docker run で同一環境変数を付与し、問題が再現するかテスト。

まとめ

  • 結論:本番障害は「設定ミス」や「リソース不足」が圧倒的に多く、ログとメトリクスの可視化で早期検知できます。
  • 理由:コンテナ化された Spring Boot は外部から見えるポート・環境変数が唯一のインターフェイスになるため、これらが不整合だと即座に起動失敗します。

次のアクション:サンプルリポジトリで実践しよう

ここまで解説した Spring Boot 初心者向けデプロイ手順 をすべて網羅したサンプルリポジトリが公開されています。以下の流れでハンズオンを行い、ローカルビルド・Docker 化・GitHub Actions によるマルチクラウド自動デプロイを体感してください。

  1. リポジトリをフォークhttps://github.com/example/spring-boot-demo
  2. ローカルでビルド./mvnw spring-boot:run または ./gradlew bootRun が起動すれば OK。
  3. Docker イメージを作成 → 前述の Dockerfile で docker build -t demo-app . を実行し、サイズが約 85 MB と確認。
  4. GitHub Actions のシークレット設定 → AWS/Azure/GCP の認証情報と GHCR トークンをリポジトリ Settings > Secrets に登録。
  5. main ブランチへマージ → ワークフローが走り、3 つのクラウドに自動デプロイされることを確認。

実際に手を動かすことで、設定ミスやトラブルシューティングの感覚が身につきます。ぜひこの機会に「コードを書くだけで本番環境へリリースできる」フルスタック開発体験を完成させましょう。


参考文献・出典

  1. Eclipse Temurin Docker Hubeclipse-temurin:17-jdk-alpine のイメージサイズは 84 MB(2026‑04‑01)【Docker Hub, eclipse/temurin】
  2. AWS Fargate Pricing – vCPU 0.25、Memory 0.5 GiB の月額料金 ≈ $8(2026‑05‑15)【AWS公式】
  3. Azure Container Apps Pricing – 0.25 vCPU・0.5 GiB メモリで約 $9/月(2026‑05‑12)【Microsoft Azure 公式】
  4. Google Cloud Run Pricing – CPU 0.125 vCPU、Memory 0.5 GiB の従量課金は月額 $7–$10(2026‑04‑30)【GCP 料金表】
  5. AWS CodePipeline と GitHub Actions 連携ガイド【AWS公式ドキュメント】
  6. Azure DevOps & GitHub Actions 統合ベストプラクティス【Microsoft Docs】
  7. Google Cloud Build + GitHub Actions 連携事例【Google Cloud Docs】
  8. Heroku Pricing (2026) – Hobby Dyno $25/月、Standard-1X $50/月【Heroku 公式】
  9. AWS Secrets Manager API リファレンスcreate-secret)【AWS SDK Documentation】
  10. GCP Secret Manager Quickstart【Google Cloud Docs】

スポンサードリンク

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

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

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

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

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

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

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

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

Beyond Careerに無料相談する

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


-JAVA