CI/CDとは?変更を安全に届ける仕組みを例え話で解説
ねえテツ、バイト先の子が「うちの会社シーアイ・シーディー入れたんだよね」って言っててさ。あたし「いいじゃーん」って返しちゃったんだけど、一個もわかってないんだけど!(・_・)?
あー、CI/CDな。アルファベット4文字はビビるっしょ⤴ でもやってること自体は、めちゃくちゃ地味なわけ
CDって、あの音楽の?
それはディスクの方(´∀`) こっちのCDは Continuous Delivery。Cが「継続的に」で、要はちょっとずつ、止めずにやり続けるって話なわけ。まず堅い言い方だけ先に見とくか
CI/CDとは
CI/CDとは、プログラムの変更を小さいうちにこまめに全体へ合流させ、そのたびに自動で組み立て(ビルド)と動作確認(テスト)を行い、問題がなければいつでも利用者に届けられる状態を保つ、という開発の進め方と、それを支える仕組みのことです。
前半のCIは Continuous Integration(継続的インテグレーション)、後半のCDは Continuous Delivery(継続的デリバリー)または Continuous Deployment(継続的デプロイメント)の略です。目的は、不具合を小さいうちに見つけることと、届ける作業を安全に繰り返せるようにすることの2つです。
クラスの文集づくりで考えるとわかりやすい
CI/CDってのはさぁ→クラスの文集を作るときの、原稿の集め方の話なわけ☆彡
文集て。卒業のときにみんなで一枚ずつ書くやつ?
それそれ。で、締切の日に全員ぶんドサッと集めたらどうなる? 名前が入ってない、枠から文字がはみ出てる、同じページ番号を2人が書いてる。文集係、その日に泣くっしょm9(^Д^)
うわ、想像つく。それ絶対もめるやつじゃん
だから、書けたやつから1枚ずつ出させる。出てきたそばから毎回おんなじチェックして、通った原稿は印刷用の束にその場で綴じてく。いつ「刷って」って言われても刷れる状態をキープしとくってコトなわけ
毎回おなじチェックを、出たその場でやる
その「毎回おんなじチェック」って、具体的になに見てんの?
チェック表が壁に貼ってあんの。①名前が入ってるか ②文字が枠に収まってるか ③そのページ番号、もう誰かが使ってないか。この3つを、原稿が1枚出てくるたびに上から順にやる。気分で増やしたり飛ばしたりしない、そこが大事なわけ
でも、それ毎回やんの面倒くさくない?
逆だわ。まとめてやる方がキツいの。昨日書いた原稿を「ここ直して」って返されたら、すぐ直せるっしょ? でも2か月ぶん溜めてから100枚まとめて返されたら、どれがどれだかもう分かんねーし、直すのに何日かかんだよって話
たしかに。1枚だけなら書き直しも一瞬じゃん
な。で、チェック通った原稿は、その場で束の正しいページに差し込む。だから明日いきなり「今日中に配って」って言われても、束を印刷機に持ってけば終わり。ここまでがデリバリー。さらに、綴じた瞬間に勝手に印刷機が回って配られるとこまで自動でやるのがデプロイメントな
あ゛ー! つまり、締切にドサッと集めて事故るのをやめて、書けたそばから1枚ずつ出して、毎回おんなじチェックを通して、通ったやつはいつでも刷れる形に綴じとくってコトね! 直すのは早いし、配れって言われてもすぐ出せるじゃん(☆∀☆)
CDには2つの意味がある
CI/CDのCDには、次の2つの意味があります。どちらを指すかは会社や文脈によって変わり、はっきり区別せずに使われることも多い言葉です。
- 継続的デリバリー(Continuous Delivery):いつでも届けられる状態まで自動で準備しておき、実際に届けるかどうかは人が判断する
- 継続的デプロイメント(Continuous Deployment):チェックを通ったら、届けるところまで自動で行う
文集の例えで言えば、束にきれいに綴じ終わって印刷機の前まで運んである状態が継続的デリバリー、綴じた瞬間に印刷機が回り出すのが継続的デプロイメントです。
この例えが当てはまらないところ
「こまめに出して、そのたびに決まったチェックを通す」という流れは同じですが、文集のチェックが人の目で一度きり行われるのに対し、CI/CDでは決められた検査を機械が何度でも同じ手順で自動的に繰り返す点が違います。また、文集は刷り上がれば終わりですが、ソフトウェアは使われ続けるかぎり、この流れが何度も回り続けます。
