CI/CD
CI/CD とは
CI/CD は、ソフトウェア開発における CI(Continuous Integration: 継続的インテグレーション) と CD(Continuous Delivery / Deployment: 継続的デリバリー / デプロイ) を組み合わせた概念である。コードの変更を頻繁に統合し、ビルド・テスト・デプロイを自動化することで、品質を維持しながら開発スピードを向上させることを目的としている。
手作業でのビルドやテストは時間がかかり、ヒューマンエラーも発生しやすい。CI/CD はこれらの作業を自動化し、開発者がコーディングに集中できる環境を実現する。
なぜ SIer で重要か
SIer のプロジェクトでは、複数の開発者が同時にコードを変更するため、統合時に問題が発生しやすい。CI を導入することで「コードをマージしたらビルドが通らなくなった」「テストが失敗するコードが混入した」といった問題を早期に発見できる。
また、SIer の品質管理では静的解析ツール(FindBugs、SonarQube 等)によるコード品質チェックやカバレッジ計測が求められることが多い。これらを CI パイプラインに組み込むことで、毎回のコミットで自動的に品質チェックが実行され、品質レポートが蓄積される。
基本概念
CI(継続的インテグレーション)
CI は、開発者がコードを変更するたびに、自動でビルドとテストを実行する仕組みである。
CI で自動化される処理:
| 処理 | 説明 |
|---|---|
| コンパイル | ソースコードを実行可能な形式に変換する |
| ユニットテスト | 個々のクラスやメソッドが正しく動作するか検証する |
| 静的解析 | コードのバグやセキュリティリスクを検出する(SonarQube、FindBugs 等) |
| カバレッジ計測 | テストがコード全体のどの程度を網羅しているかを測定する |
CI の流れ:
開発者がコードをコミット → バージョン管理システムが変更を検知
→ ビルドサーバーが自動でビルドを実行
→ ユニットテストを実行
→ 静的解析を実行
→ 結果を通知(成功 / 失敗)
CI の最大の目的は 早期にバグを発見すること である。問題が小さいうちに検出・修正することで、後工程での手戻りコストを大幅に削減できる。
CD(継続的デリバリー / デプロイ)
CD には、継続的デリバリー と 継続的デプロイ の 2 つの意味がある。
| 概念 | 説明 |
|---|---|
| 継続的デリバリー(Continuous Delivery) | テスト済みのコードをいつでもデプロイ可能な状態に保つ。本番環境へのデプロイは 手動承認 を経て実行する |
| 継続的デプロイ(Continuous Deployment) | テスト済みのコードを 自動的に 本番環境まで反映する。人手による承認プロセスがない |
SIer の現場では、セキュリティ・コンプライアンス要件から 継続的デリバリー(手動承認あり)が採用されることが多い。
CI/CD パイプライン
CI と CD を組み合わせた一連の自動化フローを「パイプライン」と呼ぶ。
┌──────┐ ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────┐
│ コミット │→│ ビルド │→│ ユニットテスト │→│ 静的解析 │→│ デプロイ │→│ 承認 │
│ │ │ │ │ │ │ │ │ (開発環境) │ │(本番) │
└──────┘ └──────────┘ └──────────┘ └──────────┘ └──────────┘ └──────┘
← ─────────── CI ───────────→ ← ──── CD ────→
パイプラインのいずれかのステップで失敗すると、後続のステップは実行されず、開発者に通知が送られる。
SIer での使われ方
Jenkins
Jenkins は、SIer の現場で最も広く使われている CI/CD ツールである。2004 年に「Hudson」として開発が始まり、2011 年に Jenkins として独立した。
Jenkins が SIer で好まれる理由:
- 無料(OSS) --- Java 製のオープンソースソフトウェアであり、ライセンス費用がかからない
- 豊富なプラグイン --- 1,800 以上のプラグインが存在し、Maven / Gradle / Git / SonarQube 等あらゆるツールと連携できる
- オンプレミス環境で動作 --- クラウドに接続できないセキュリティ要件の厳しい環境でも、社内サーバーに Jenkins をインストールして運用できる
- 長い実績 --- 20 年近い実績があり、トラブル対応のノウハウが社内に蓄積されている
Jenkinsfile(Pipeline as Code):
近年の Jenkins では、CI/CD パイプラインの定義を Jenkinsfile というファイルにコードとして記述し、バージョン管理する方式が推奨されている。
// Jenkinsfile の例
pipeline {
agent any
stages {
stage('Build') {
steps {
sh 'mvn compile'
}
}
stage('Test') {
steps {
sh 'mvn test'
}
}
stage('Static Analysis') {
steps {
sh 'mvn sonar:sonar'
}
}
}
}
その他の CI/CD ツール
Jenkins 以外にも、以下の CI/CD ツールが SIer の現場で使われるケースがある。
| ツール | 特徴 |
|---|---|
| GitLab CI/CD | GitLab と統合された CI/CD。.gitlab-ci.yml で定義する |
| GitHub Actions | GitHub と統合された CI/CD。クラウド環境で手軽に利用可能 |
| Azure DevOps | Microsoft のDevOps プラットフォーム。Azure 環境との親和性が高い |
SIer における CI/CD の実態
Web 系企業と比較すると、SIer の CI/CD 導入には以下のような特徴がある。
- CI の主な活用はビルド + 静的解析の自動化 --- ウォーターフォール開発では、テスト工程が独立しているため、CI で実行されるのはコンパイルとユニットテスト、静的解析が中心となる
- 本番デプロイは手動承認 + 手順書ベースが一般的 --- 金融系・官公庁系の案件では、セキュリティ審査やコンプライアンス要件があり、自動デプロイが許可されないことが多い。リリース手順書に基づいて承認者の確認を経てデプロイする
- 導入が遅れている現場も多い --- 特にレガシーシステムの保守案件では、CI/CD が未導入のまま手動ビルド・手動デプロイで運用されている現場も存在する
しかし、DevOps の考え方の浸透やクラウド移行の進展により、SIer でも CI/CD の導入が加速している傾向にある。
まとめ
- CI は、コード変更のたびに自動でビルド・テスト・静的解析を実行し、早期にバグを発見する仕組みである
- CD は、テスト済みコードをデプロイ可能な状態に保つ(デリバリー)または自動デプロイ(デプロイ)する仕組みである
- Jenkins は SIer で最も広く使われている CI/CD ツールで、無料・オンプレ対応・豊富なプラグインが強みである
- SIer の現場では、ビルド + 静的解析の自動化が CI の主な活用方法であり、本番デプロイは手動承認が一般的である
- CI/CD の導入は開発効率と品質の向上に直結するため、今後ますます重要性が高まる