Javaでアプリケーション開発をしていると、次のような経験はないでしょうか。
- ローカルでは動いたのに、他の人の環境では動かない
- 修正したら別の機能が壊れた
- リリース直前にテスト漏れが発覚した
こうした問題の多くは、「ビルドやテストが人の手に依存している」ことが原因です。
JUnitで単体テストを書いていても、それを毎回手動で実行しているだけでは不十分な場合があります。
Maven / Gradleでビルドできても、実行を忘れれば意味がありません。
そこで登場するのが CI/CD です。
CI/CDとは?
ここでは、CI/CDの基本概念と用語の意味を説明します。
CI(継続的インテグレーション)とは?
CIは Continuous Integration(継続的インテグレーション) の略です。
簡単に言うと、コードを変更するたびに、自動でビルドとテストを実行する仕組みです。
例えば、次の流れを想像してください。
- 開発者がコードを修正する
- Gitにpushする
- 自動でビルドが実行される
- 自動でテストが実行される
- 問題があれば即座に検知される
これがCIです。
ポイントは「人が実行しなくても自動で回る」という点です。
JUnitで書いたテストも、Maven / Gradleで定義したビルドも、
CIと組み合わせることで初めて「常に実行される状態」になります。
CD(継続的デリバリー / デプロイ)とは?
CDは2つの意味で使われます。
- Continuous Delivery(継続的デリバリー)
- Continuous Deployment(継続的デプロイ)
両者の違いは次の通りです。
Continuous Delivery
本番環境に出せる状態まで自動化する(最終承認は人)
Continuous Deployment
本番環境への反映まで完全自動化する
つまり、CIが「品質チェックの自動化」だとすれば、CDは「リリース工程の自動化」です。
CI/CDがない開発で起きる問題
CI/CDがない場合、開発は以下のようになりがちです。
- テストを実行し忘れる
- 古いコードをマージしてしまう
- 本番直前に不具合が見つかる
- 「誰の変更が原因かわからない」状態になる
特にチーム開発では、変更が頻繁に発生します。
CIがあれば、コードが統合されるたびに自動で検証が走るため、問題を早い段階で発見できます。
これは単なる便利機能ではなく、開発の安全装置 です。
CI/CDは難しそうに見えますが、本質は次の3つです。
- ビルドを自動化する
- テストを自動化する
- リリースを安全にする
CIの仕組み

ここでは、CIがどのように動いているのかを説明します。
コードをpushしたら何が起きるのか
CIは、基本的に Gitと連携 して動きます。
典型的な流れは次の通りです。
- 開発者がコードを修正する
- GitHubなどのリポジトリにpushする
- CIツールがpushを検知する
- サーバー上でビルドを実行する
- テストを自動実行する
- 結果を通知する
重要なのは、ローカル環境ではなく、別のクリーンな環境で実行されるという点です。
これにより、以下のような問題を排除することができます。
- 自分のPCだけで動くコード
- ローカルにしか存在しない依存関係
- 偶然通ってしまったテスト
実務では「テストが通らないとマージできない」という運用にしているチームも多くあります。
ビルドとテストの自動実行
CIの中心は、ビルド / テストの自動実行です。
例えばMavenを使っている場合、CIサーバーは次のようなコマンドを実行します。
mvn clean packageこのコマンドの中では、コンパイル、テスト実行、jarファイル生成が順番に実行されます。
Gradleであれば、gradle buildが同様の役割を果たします。
Maven / Gradleとの関係
CIは単体ではビルドやテストを実行できません。
実際にビルドやテストを実行するのは、MavenやGradleです。
役割分担は次の通りです。
- Maven / Gradle
→ ビルドやテストを実行するツール - CIツール(例:GitHub Actions)
→ それを自動で実行する仕組み
つまり、CIは「指揮者」、Maven / Gradleは「演奏者」のような関係です。
あなたがすでにMaven / Gradleを使えているなら、CIの導入はそこまで難しくありません。
JavaでCIを実装してみる(GitHub Actions × Maven)
ここでは、Java × MavenプロジェクトにCIを導入する方法を説明します。
GitHub Actionsとは
GitHub Actionsは、GitHubに標準で組み込まれているCI/CD機能です。
リポジトリに設定ファイルを追加するだけで、
- push時にビルド
- テストの自動実行
- 条件付きデプロイ
などを実現できます。
公式サイトはこちらです。
GitHub Actions(公式)
https://docs.github.com/actions
GitHub Actionsの利用料金
GitHub Actionsは無料で利用できますが、制限があります。
GitHubの料金体系はプランによって異なります。
Freeプランの場合(2025年時点の公式情報)
- パブリックリポジトリ:無制限で利用可能
- プライベートリポジトリ:月2,000分まで無料
詳細は公式料金ページを参照してください。
GitHub Pricing
https://github.com/pricing
個人学習や小規模プロジェクトであれば、無料枠で十分利用できます。
workflowファイルの作成
GitHub Actionsは、リポジトリ内に以下のディレクトリを作成することで動作します。
.github/workflows
その中にYAMLファイル.github/workflows/ci.ymlを作成します。
このファイルに「何を自動実行するか」を記述します。
Mavenビルドを自動化する最小例
以下は、mainブランチにpushされたときに
Mavenでビルドとテストを実行する最小構成です。
name: Java CI
# 実行タイミング
on:
push:
branches: [ "main" ]
pull_request:
branches: [ "main" ]
jobs:
build:
runs-on: ubuntu-latest
steps:
# リポジトリのコードを取得
- name: Checkout source
uses: actions/checkout@v4
# Java 17 をセットアップ
- name: Set up JDK 17
uses: actions/setup-java@v4
with:
distribution: 'temurin'
java-version: '17'
# Mavenでビルドとテストを実行
- name: Build with Maven
run: mvn clean packageこの設定で行われる処理
このworkflowでは、次の処理が自動で実行されます。
- mainブランチにpush
- GitHubがジョブを開始
- Ubuntu環境を用意
- Java 17をインストール
mvn clean packageを実行- JUnitテストが自動実行される
テストが失敗すると、ビルドも失敗します。
テスト失敗時の挙動
JUnitテストが失敗した場合、
・GitHub上で赤い×が表示される
・Pull Requestに失敗表示が出る
・マージを制限できる
これにより、壊れたコードがmainブランチに入ることを防げます。
CDの考え方を理解する

ここでは、CDの基本的な考え方と、実際に何が自動化されるのかを説明します。
本番環境へ自動反映とは
CDを導入すると、ビルドで生成された成果物(jarなど)をサーバーへ自動で配置できます。
例えば、次のような流れです。
- mainブランチにマージされる
- CIが成功する
- jarファイルが生成される
- サーバーへ自動転送される
- アプリケーションが再起動される
これが自動で行われる状態が「自動デプロイ」です。
ただし、企業開発ではいきなり本番へ完全自動反映するとは限りません。
一般的には、以下のような段階的な運用が多く採用されています。
- ステージング環境へ自動反映
- 人が動作確認
- 承認後に本番へ反映
金融系や基幹システムでは、人の承認を必須にする運用もあります。
なぜ重要なのか
CDの本質は「リリース作業の再現性を高めること」です。
手動デプロイでは、以下のような問題が発生する可能性があります。
- 手順の抜け漏れ
- ファイルの配置ミス
- 環境差異による不具合
CDを導入すれば、同じ手順が毎回自動で実行されます。
その結果、リリース作業が安定し、作業時間の短縮や属人化の防止につながります。
CDは高度な技術に見えますが、本質は「手動作業の自動化」です。
まずはCIを安定させ、その延長としてCDを理解する、という順番で問題ありません。
まとめ
CI/CDは難しい技術というよりも、「ビルドとテスト、リリース作業を自動化する仕組み」です。
本記事で押さえたポイントは次の通りです。
CIは、コードがpushされるたびにビルドとテストを自動実行する仕組みです。
CDは、ビルド成果物を環境へ自動反映する仕組みです。
手作業によるミスを減らし、リリースの再現性を高めます。
GitHub Actionsを使えば、特別なサーバーを用意しなくても、JavaプロジェクトにCIを導入できます。
やっていることは「コマンドの自動実行」に過ぎません。
重要なのは、CI/CDそのものを覚えることではなく、品質を保つ仕組みを作るという発想を持つことです。
- JUnitでテストを書く
- Mavenでビルドする
- そしてCIでそれを自動化する
この流れができれば、あなたの開発は一段階上のレベルに進みます。
まずは小さなプロジェクトでCIを動かしてみてください。
動いた瞬間、CI/CDは「難しいもの」から「当たり前の仕組み」に変わります。


コメント