【初心者向け】CI/CDとGitについて 役割を徹底比較!
はじめに
ソフトウェア開発の世界に足を踏み入れると、「Git」と「CI/CDのジョブ」という言葉をよく耳にします。どちらも開発を効率化するための重要なツールですが、初学者の私は上司から聞いたとき、何が何なのかわかりませんでした。
この記事では、バージョン管理システムの「Git」と、CI/CDにおける「ジョブ」の役割を比較し、両者がどのように連携して現代の開発プロセスを支えているのかを分かりやすく解説します。
Gitとは?コードの歴史を記録する「バージョン管理システム」
Gitの主な役割は、ソースコードの変更履歴を管理することです。誰が、いつ、どのファイルのどこを変更したのかをすべて記録してくれます。
Gitの主な役割
- 変更履歴の記録: ファイルの変更内容を「コミット」という単位で記録します。
- ブランチによる並行開発: 「ブランチ」を作成することで、メインのコード(master/mainブランチ)に影響を与えずに新機能の開発やバグ修正を試すことができます。
- チームでの共同作業: 複数の開発者が同じソースコードを編集し、その変更を「マージ」することで、安全に統合できます。
一言でいうと、Gitはソースコードとその歴史を管理するための「台帳」や「設計図の保管庫」のようなものです。
CI/CDの「ジョブ」とは?コードに対して処理を自動実行する「タスク」
一方、CI/CDにおける「ジョブ」は、特定のタスクを自動で実行するための処理単位geです。CI/CDは「継続的インテグレーション/継続的デリバリー」の略で、開発プロセスを自動化する仕組みそのものを指します。ジョブは、その仕組みの中で動く個々のタスクです。
ジョブの主な役割
- ビルド: ソースコードを実行可能な形式に変換します。
- テスト: コードが正しく動作するかを自動でテストします。
- デプロイ: テストを通過したコードを、本番環境やステージング環境へ自動で反映させます。
ジョブは、**ソースコードに対して何らかの「作業」を行う「ロボット」**のようなものとイメージすると分かりやすいでしょう。
Gitとジョブの関係性:連携して開発を自動化する
では、Gitとジョブはどのように連携するのでしょうか?その関係は**「きっかけ」と「実行」**で表せます。
開発者がGitにソースコードをプッシュする(きっかけ)と、それをCI/CDツールが検知して、あらかじめ定義されたジョブ(ビルド、テストなど)を自動で実行する(実行)。
これが基本的な連携の流れです。
例えば、GitHub Actionsを使ったCI/CDのワークフローでは、以下のように定義します。
name: CI Pipeline
# 1. きっかけ (トリガー)
# mainブランチにpushされたらワークフローを開始
on:
push:
branches: [ main ]
# 2. 実行 (ジョブ)
jobs:
# 「build-and-test」という名前のジョブを定義
build-and-test:
# ジョブを実行する環境
runs-on: ubuntu-latest
# ジョブの具体的な手順 (ステップ)
steps:
# ① Gitリポジトリからコードをチェックアウト
- name: Checkout code
uses: actions/checkout@v3
# ② Node.js環境をセットアップ
- name: Set up Node.js
uses: actions/setup-node@v3
with:
node-version: '18'
# ③ 依存パッケージをインストール
- name: Install dependencies
run: npm install
# ④ ビルドを実行
- name: Build project
run: npm run build
# ⑤ テストを実行
- name: Run tests
run: npm test
この例では、git push
がきっかけとなり、build-and-test
というジョブが実行されています。ジョブの中では、Gitリポジトリからコードを取得し(actions/checkout
)、ビルドやテストといった一連の作業を自動で行っています。
まとめ:役割の違いを理解しよう
GitとCI/CDのジョブの違いをまとめると、以下のようになります。
項目 | Git | CI/CDのジョブ |
---|---|---|
役割 | ソースコードの状態(歴史)を管理する | コードに対する作業(処理)を自動化する |
目的 | バージョン管理、共同開発の円滑化 | ビルド、テスト、デプロイの自動化 |
主体 | 開発者(手動でコマンド実行) | CI/CDツール(Gitへの操作をきっかけに自動実行) |
例えるなら | コードの「歴史家」「設計図の保管庫」 | 自動化された「働き者」「ロボット」 |
Gitはコードの「静的な管理」、ジョブはコードに対する「動的な処理」と捉えると、明確になるでしょう。
この2つは、現代のソフトウェア開発において、品質を担保しながら迅速にリリースを行うために欠かせない両輪です。それぞれの役割を正しく理解し、効果的に連携させることで、開発プロセスはより洗練されたものになりますね。
Discussion