CI/CD(Continuous Integration/Continuous Delivery)とは日本語で継続的インテグレーション・継続的デリバリーと訳されます。
CI/CDは1つの技術を指すものでなく、ソフトウェアの変更を常にテストして自動で本番環境にリリース可能な状態にしておくソフトウェア開発の手法を意味します。また、CDには継続的デリバリーの外に継続的デプロイメント(Continuous Deployment)という意味もあるため、それぞれ解説を行います。
CI(Continuous Integration)とは
CI(Continuous Integration、以下CI)とは、継続的インテグレーションのことです。
Integrationは統合という意味で、継続的に行うことをCIと呼びます。継続的インテグレーションは開発者のコード変更を中央サーバー(共有リポジトリなど)に定期的にマージし、その度に自動化されたビルドを実行するソフトウェア開発手法です。
CIについては更に詳しく解説されたこちらの記事をご覧ください。
https://envader.plus/article/43
CD(Continuous Delivery)とは
CD(Continuous Delivery、以下CD)とは、継続的デリバリーのことです。
CDは、CIのプロセスを引き継いでビルド段階の後にコードのテストを自動的に行い、テスト環境や本番環境へいつでもデプロイできるように準備します。CDではコード変更のマージから本番環境に対応するためのビルドのデリバリーまで、すべての段階でテストとコードリリースを自動化します。
CD(Continuous Deployment)とは
CDには継続的デリバリーの他に継続的デプロイメントという意味もあります。
継続的デプロイメントは、継続的デリバリーの次のステップであり、すべてのコード変更が自動的に本番環境に導入されるようにする開発手法です。継続的デリバリーでは新しいコード変更を本番環境に移行させる最終的な作業は人間の手で手動で行われます。ですが継続的デプロイメントを導入することで、その最終的な本番環境への移行も自動化されます。継続的デプロイメントによって、顧客が触れる本番環境へシームレスに移行されるため、顧客からのフィードバックも迅速に受け取れるようになります。
CIは開発者がコードを書いている際に実行する自動化プロセスであり、CDはコードが完成した後に必要な処理を実行する自動化プロセスとイメージすると分かりやすいです。
CI/CDの流れ
- 開発したソースコードをGitなどのバージョン管理ツールへコミットします。
- CIにより自動的にエラーがないかなど各種テストが行われます。 これにより仕様どおりの機能が実装されているか、既存のコードに影響がないかといった確認が自動的に行われます。テストが終了した場合リリース用ブランチにマージされます。
- CDによってビルド、テストされたアプリケーションは自動でステージング環境へデリバリー(デプロイ)されすぐに動作確認が行えるようになります。 なお継続的デリバリーでは変更したコードをステージング環境までは自動でデプロイを行いますが、本番環境へのデプロイは行いません。実際の本番環境へのデプロイは人の手により手動で行わないといけません。この本番環境へのデプロイまでもを全て自動で行う事を継続的デプロイメントといいます。
CI/CDの種類
CI/CDにはオンプレミス型とクラウド型の2種類が存在し、オンプレミス型では一般的に拡張性が高く、自分たちで構築や運用をするための管理コストが発生します。一方クラウド型は拡張性が低く、サーバーなどを自前で用意する必要がなく、すぐに使い始めることができるのが大きな魅力となっています。
それぞれの代表的な製品(サービス)は次の通りです。
オンプレミス型
オンプレミス型を選択するメリットは拡張性の高さやビルドするマシン性能を自分たちで調整出来る点です。デメリットはサーバーを自身で用意しないといけなかったりと運用コストが高いことが挙げられます。
サービス名 | 説明 |
---|---|
Jenkins | 川口耕介氏により開発されたフリーオープンソースのCI/CDサービス |
Concourse | Go言語で構成されたパイプラインベースのCI/CDサービス |
Drone | Go言語で構成されたコンテナベースのCI/CDサービス |
クラウド型
クラウド型を選択するメリットはサーバーなどを自身で用意する必要がなく、簡単に始められる点です。デメリットはビルドするマシン性能の調整が行えないことや有料となる点が挙げられます。
サービス名 | 説明 |
---|---|
Travis CI | Travis CI community社によって開発されたGitHub上のソフトウェアのビルドやテストを行うためのSaaS 型のCI/CDサービス |
CircleCI | CircleCI社によって開発されたSaaS型のCI/CDサービス |
AWS | Amazon Web ServicesのCI/CDサービス ただし、AWSの場合は「AWS CodeCommit」「AWS CodeBuild」「AWS CodeDeploy」など機能によっていくつか種類に分かれます。 |
まとめ
CI/CDは開発者がコード変更を定期的に共有リポジトリへマージする事で、その後のビルドやテスト、ステージング環境へのデプロイまでを自動で行なってくれるソフトウェア開発手法です。
従来行っていた蓄積したコード変更を一度にマージする手法では、コンフリクト(コードの競合)が起きやすく、バグが発生した場合も複数の変更点が混在するため原因究明までに膨大な時間や労力が必要でした。CI/CDを導入する事で開発者はマージを行うだけでビルドからテストまでを自動で行なってくれるため、開発者の生産性の向上や製品の品質向上を行う事が出来ます。
若干のデメリットとして、初期環境の整備やテストコード自体は作成する必要があるなどが挙げられます。CI/CDにはオンプレミス型とクラウド型で異なるメリット、デメリットが存在するので、導入の際は両者の違いを理解した上で選択する必要があります。
【番外編】USBも知らなかった私が独学でプログラミングを勉強してGAFAに入社するまでの話
プログラミング塾に半年通えば、一人前になれると思っているあなた。それ、勘違いですよ。「なぜ間違いなの?」「正しい勉強法とは何なの?」ITを学び始める全ての人に知って欲しい。そう思って書きました。是非読んでみてください。
「フリーランスエンジニア」
近年やっと世間に浸透した言葉だ。ひと昔まえ、終身雇用は当たり前で、大企業に就職することは一種のステータスだった。しかし、そんな時代も終わり「優秀な人材は転職する」ことが当たり前の時代となる。フリーランスエンジニアに高価値が付く現在、ネットを見ると「未経験でも年収400万以上」などと書いてある。これに釣られて、多くの人がフリーランスになろうとITの世界に入ってきている。私もその中の1人だ。数年前、USBも知らない状態からITの世界に没入し、そこから約2年間、毎日勉学を行なった。他人の何十倍も努力した。そして、企業研修やIT塾で数多くの受講生の指導経験も得た。そこで私は、伸びるエンジニアとそうでないエンジニアをたくさん見てきた。そして、稼げるエンジニア、稼げないエンジニアを見てきた。
「成功する人とそうでない人の違いは何か?」
私が出した答えは、「量産型エンジニアか否か」である。今のエンジニア市場には、量産型エンジニアが溢れている!!ここでの量産型エンジニアの定義は以下の通りである。
比較的簡単に学習可能なWebフレームワーク(WordPress, Rails)やPython等の知識はあるが、ITの基本概念を理解していないため、単調な作業しかこなすことができないエンジニアのこと。
多くの人がフリーランスエンジニアを目指す時代に中途半端な知識や技術力でこの世界に飛び込むと返って過酷な労働条件で働くことになる。そこで、エンジニアを目指すあなたがどう学習していくべきかを私の経験を交えて書こうと思った。続きはこちらから、、、、
エンベーダー編集部
エンベーダーは、ITスクールRareTECHのインフラ学習教材として誕生しました。 「遊びながらインフラエンジニアへ」をコンセプトに、インフラへの学習ハードルを下げるツールとして運営されています。
関連記事
2020.02.25
完全未経験からエンジニアを目指す爆速勉強法
USBも知らなかった私が独学でプログラミングを勉強してGAFAに入社するまでの話
- キャリア・学習法
- エンジニア
2023.09.30
静的サイトと動的サイトの違いと目的と用途を理解しよう!
ウェブサイトには主に「静的サイト」と「動的サイト」の2つの大きなカテゴリがあります。それぞれの特性や用途を理解し、適切な場面での利用することが、ウェブサイトを成功させる鍵となります。
- プログラミング
2022.12.14
CI(Continuous Integration)継続的インテグレーションを導入するメリット
Integrationは統合という意味で、継続的に統合・結合を行うことをCIと呼びます。
- プログラミング
2023.02.07
【図解あり】ソケット通信の仕組みについてわかりやすく解説!
こちらの記事では、ソケット通信について解説します。
- プログラミング
- ネットワーク