- HOME >
- Jamstack用語集 >
- CI/CD
CI/CD
シーアイ/シーディー
CI/CD を分かりやすく
CI/CD、これってご存知ですか?CIはContinuous Integration(継続的インテグレーション)、CDはContinuous Delivery(継続的デリバリー)またはContinuous Deployment(継続的デプロイメント)の略です。難しそうな名前ですよね、でもここで一緒に見ていきましょう!
CI/CDは開発プロセスを自動化し、効率化するための方法論です。CIでは、コードの変更が頻繁にメインブランチに統合され、自動的にテストされます。これにより、バグを早期に発見し、解決することができます。
一方、CDでは、テストをパスしたコードが自動的に本番環境にデプロイ(または配布)されます。これにより、新機能のリリースやバグの修正を素早く、かつ確実に行うことができます。
なるほど、と思うかもしれませんが、もう少し具体的な例え話を用いてみましょう。
CI/CDをレストランの厨房に例えてみましょう。CIはシェフたち(開発者)がそれぞれの料理(コード)を作っていて、その都度、味見(テスト)を行い、最終的な料理(プロダクト)に適合するか確認するプロセスと考えることができます。これにより、まずい料理(バグ)が出てくるのを防ぐことができますね。
一方、CDは料理が完成したらすぐにホールスタッフ(本番環境)に渡して、お客様(ユーザー)に提供するプロセスです。お客様は新しい料理を早く試すことができ、レストランは素早くフィードバックを得ることができます。
というわけで、CI/CDは開発の世界でのスムーズな厨房作業のようなものなんです。これにより、チームは効率的に高品質なコードを提供することができ、ユーザーは新しい機能を早く手に入れることができます。
Next.js、Jamstack、TypeScriptといったツールと組み合わせてCI/CDを使うと、よりスピーディかつ安定した開発が可能になります。これって結構すごいことだと思いませんか?ここまで大丈夫ですか?
まとめます。CI/CDは「Continuous Integration(継続的インテグレーション)」と「Continuous Deployment(継続的デプロイメント)」の頭文字を取った言葉で、ソフトウェア開発の効率化を目指した一連のプラクティスです。
継続的インテグレーションは、開発者が頻繁にコードを共有リポジトリに統合するプロセスです。各統合はビルドされ、自動テストが行われることで、問題が早期に検出され、迅速な修正が可能になります。ちょっとしたツールのように見えますが、これが大きなバグの発生を防ぎ、大幅な効率化を生むのです。
継続的デプロイメントは、その名の通り、変更を自動的に本番環境にデプロイするプロセスです。手動でのデプロイ作業が必要なく、リリースが自動化されるため、新機能の提供やバグ修正の速度が向上します。
これらのプロセスは、手間と時間を削減し、開発者が本来の開発作業に集中できるようにします。そんな役立つツールであるCI/CDは、チーズフォンデュのように滑らかな開発フローを作る鍵となります。
CI/CD の歴史的変遷
CI/CDの概念は、2000年代初頭にエクストリームプログラミング(XP)というアジャイルソフトウェア開発手法と共に生まれました。XPの開発者たちは、問題を早期に検出して修正するために、定期的にコードを統合する必要性を認識していました。
しかし、その手法が一般化し、より広く適用されるようになったのは、クラウドコンピューティングの登場とともにです。クラウドサービスの普及により、開発者はリモートで作業を行い、統合やデプロイメントを自動化するための新たなツールとサービスが提供されました。
現在では、CI/CDはDevOps文化の一部として、多くの企業やプロジェクトで採用されています。GitHub ActionsやJenkinsなどのツールが使われ、開発フローの効率化に貢献しています。
CI/CD と Jamstack の関係
CI/CDとJamstackは、一見無関係に見えますが、実は密接な関係があります。JamstackはJavaScript、API、Markupの略で、静的サイト生成(SSG)に基づく近代的なウェブ開発アーキテクチャです。
Jamstackのアーキテクチャでは、ビルド時に全てのページが生成され、配信されます。そして、それらのページはプリレンダリングされたHTMLとして提供され、その後クライアントサイドでJavaScriptが実行されます。
このビルドプロセスは、ソースコードの変更があるたびに実行されます。つまり、開発者が変更をプッシュすれば、自動的に新しいビルドが開始され、変更が本番環境にデプロイされます。このビルドとデプロイの自動化が、まさにCI/CDの概念と合致するのです。
CI/CD を使うメリット
早期の問題検出と修正
自動テストにより、問題が早期に検出され、迅速に修正することが可能になります。
自動化による効率化
コードの統合やデプロイメントの自動化により、手間と時間を削減し、開発者が本来の開発作業に集中できるようになります。
高速なリリース
手動でのデプロイ作業が必要なく、リリースが自動化されるため、新機能の提供やバグ修正の速度が向上します。
CI/CD を実装
GitHub Actionsを使用して、簡単なCI/CDパイプラインを設定する例を紹介します。以下は、Node.jsのアプリケーションのビルドとテストを自動化するための設定ファイル(.github/workflows/main.yml)です。
name: Node.js CI
on: [push]
jobs:
build:
runs-on: ubuntu-latest
strategy:
matrix:
node-version: [12.x]
steps:
- uses: actions/checkout@v2
- name: Use Node.js ${{ matrix.node-version }}
uses: actions/setup-node@v1
with:
node-version: ${{ matrix.node-version }}
- run: npm ci
- run: npm run build --if-present
- run: npm
test
この設定により、コードがpushされるたびに、指定されたNode.jsバージョンでビルドとテストが実行されます。
CI/CD を学ぶ
タイトル | 説明 |
---|---|
GitHub Actions 公式ドキュメント | GitHub Actionsを用いたCI/CDのセットアップに関する詳細な情報を提供しています。 |
Jenkins 公式ドキュメント | JenkinsはオープンソースのCI/CDツールで、公式ドキュメントはその設定や使用方法を詳しく説明しています。 |
Travis CI 公式ドキュメント | Travis CIはCI/CDツールの一つで、その使用方法や設定方法について詳細に解説されています。 |
CircleCI 公式ドキュメント | CircleCIもCI/CDツールの一つで、こちらもその使用方法や設定方法を詳細に解説しています。 |