アプリケーション開発において、コードの変更を迅速かつ安全にユーザーに届けるための仕組みが不可欠です。CI/CD (Continuous Integration/Continuous Delivery or Deployment) は、このプロセスを自動化するための開発手法であり、アドバンストエンジニアにとって必須の知識です。この章では、CI/CDの基本概念と、主要なツールである GitHub Actions および GitLab CI の利用について解説します。
1. CI/CDの基本概念
CI/CDは、開発パイプライン全体を自動化し、品質とスピードを両立させることを目指します。
A. CI(Continuous Integration: 継続的インテグレーション)
目的: 開発チームが頻繁にコード変更をメインブランチに統合(マージ)し、そのたびに自動でビルドとテストを実行することで、早期に問題を発見します。
プロセス:
開発者がコードをコミットし、プッシュします。
CIツールが変更を検知し、自動でビルド(コンパイルや依存関係の解決)を実行します。
自動でユニットテストや統合テストを実行し、問題がないか検証します。
ビルドとテストが成功した場合、**成果物(アーティファクト)**を作成します(例: Dockerイメージ)。
B. CD(Continuous Delivery/Deployment: 継続的デリバリー/デプロイメント)
目的: CIによって検証されたコードを、迅速かつ自動で環境にリリースできるようにします。
継続的デリバリー (Continuous Delivery: CD):
テストが完了したアプリケーションを、いつでもリリースできる状態にしておきます。
本番環境へのデプロイは、手動の承認やボタン操作によって行われます。
継続的デプロイメント (Continuous Deployment: CD):
継続的デリバリーに加え、テストに成功したコードを自動で本番環境にデプロイします。
人間の介入なしに、コードが即座にユーザーに届きます。
2. CI/CDパイプラインの構成要素
CI/CDは、通常、以下のような一連の**ステージ(段階)**で構成されます。
ソースステージ (Source): Gitリポジトリへのプッシュなど、変更の発生をトリガーとします。
ビルドステージ (Build): ソースコードから実行可能な成果物(Dockerイメージ、jarファイルなど)を作成します。
テストステージ (Test): ユニットテスト、結合テスト、セキュリティスキャンなどを実行し、品質を検証します。
デリバリー/デプロイステージ (Deploy): 検証済みの成果物を、開発環境、ステージング環境、そして最終的に本番環境へとデプロイします。
3. 主要なCI/CDツールの利用
現代では、GitHubやGitLabといったソースコード管理サービスに統合されたCI/CDツールが主流です。
A. GitHub Actions
特徴: GitHubに完全に統合されたワークフロー自動化プラットフォームです。リポジトリ内に
/.github/workflowsディレクトリを作成し、YAMLファイルでパイプラインを定義します。主要な構成要素:
Workflow(ワークフロー): CI/CDパイプライン全体を定義します。
Event(イベント): ワークフローの実行トリガー(例:
push、pull_request)。Job(ジョブ): 実行環境(Runner)上で実行される一連のステップのまとまりです。並行実行も可能です。
Step(ステップ): ジョブ内で実行される個別のタスク(例: コードのチェックアウト、依存関係のインストール、テスト実行)です。
Action(アクション): GitHubコミュニティや公式が提供する再利用可能なタスクの単位です(例: 特定の言語環境のセットアップ)。
GitHub Actionsのワークフロー定義の例(イメージ):
YAML
name: CI Pipeline on: [push] # pushイベントで実行 jobs: build-and-test: runs-on: ubuntu-latest # 実行環境 steps: - uses: actions/checkout@v4 # コードをチェックアウト - name: Set up Python uses: actions/setup-python@v5 with: python-version: '3.11' - name: Install dependencies run: pip install -r requirements.txt - name: Run tests run: python -m pytest
B. GitLab CI/CD
特徴: GitLabに組み込まれたCI/CD機能です。リポジトリのルートに作成する
.gitlab-ci.ymlファイルでパイプラインを定義します。主要な構成要素:
Pipeline(パイプライン): CI/CDの実行全体を指します。
Stage(ステージ): ジョブを論理的にグループ化する段階です(例:
build,test,deploy)。Job(ジョブ): 特定のステージで実行されるタスクです。
script:セクションに実行したいコマンドを記述します。Runner(ランナー): ジョブを実行するエージェント(実行環境)です。
GitLab CIのパイプライン定義の例(イメージ):
YAML
stages: - build - test build-job: stage: build script: - echo "Building the application..." - ./build-script.sh test-job: stage: test script: - echo "Running tests..." - ./run-tests.sh
CI/CDを導入することで、バックエンドエンジニアは品質管理の手間を減らし、より頻繁に、より自信を持ってコードをリリースできるようになります。