CI/CD

班で学級新聞を作るとき、原稿を合わせるたびに校正機が自動で走り、通ったらそのまま掲示板に貼られるのと同じです。

定義 何人かで分担して書いたプログラムのコードを頻繁に一つにまとめ、まとめるたびに用意しておいた検査を機械が自動で走らせるやり方です。検査を通ったコードは、人が手を加えなくても実際のサービスのサーバーまで自動で上がっていきます。前半を継続的インテグレーション(CI)、後半を継続的デプロイ(CD)と呼び、この二つを一本につないだ流れをCI/CDといいます。

締め切り前日に原稿をまとめて合わせると起きること

学級新聞を四人で分担して作るとしましょう。それぞれ家で記事を一本ずつ別々に書きます。お互いがどう書いているかは、締め切りの日になって初めて分かります。

締め切り前日の夜に四人の原稿を初めて合わせてみると、問題が次々に出てきます。同じ出来事を二人が違うふうに書いていますし、見出しの文字の大きさもばらばらです。どこから食い違ったのかをたどるうちに、徹夜になってしまいます。

離れていた時間が長いほど、貼り合わせる作業は難しくなります。そこで、締め切りまで待たずに毎日少しずつ合わせてみようという考えが生まれました。このように頻繁に合わせて食い違いを早く見つけるやり方を、継続的インテグレーションと呼びます。

プログラムを作る現場も事情は似ています。何人もが担当部分を何週間も別々に書いてから一度にまとめると、締め切り前夜の学級新聞と同じことが起こります。だから開発者は一日に何度も、自分の原稿を共用の原稿の束に合わせ込みます。

検査を通った原稿だけが掲示板に貼られます

頻繁に合わせるだけでは、食い違ったところを人が一つずつ目で探さなければなりません。そこで、合わせる瞬間ごとに自動で走る検査機をつけておきます。学級新聞でいえば、原稿を共用フォルダに上げた瞬間に校正機が動き出すようなものです。

プログラムでこの検査機の役目を果たすのが、自動テストです。あらかじめ書いておいた確認項目を、機械が順番になぞっていきます。一か所でも引っかかれば合わせるのを止め、誰のどの行で引っかかったのかをすぐに知らせてくれます。

検査を通れば、その次の段階へ進みます。出来上がった新聞が人の手を経ずに廊下の掲示板まで自動で貼られるように、通ったコードが実際のサービスのサーバーへ上がっていきます。この後半部分を、継続的デプロイと呼びます。

合わせること、検査すること、上げることが一本につながって自動で回っていく、この流れをパイプラインと呼びます。人は原稿を書く仕事に集中し、繰り返される確認と配達は機械に任せるのが要点です。

統合・テスト・ビルド・デプロイの自動パイプライン 継続的統合 継続的デプロイ コード統合 自動テスト ビルド 本番サーバー

もう少し正確に言うと

検査機を通ったからといって、新聞に欠点がないという意味ではありません。校正機は誤字は見つけますが、記事に書かれた日付が正しいかどうかまでは見てくれません。自動テストも、人があらかじめ書いておいた項目しか確認しません。

ですから、検査の一覧を何で埋めるかが、どの道具を使うかよりも大切です。確認項目が手薄なら、パイプラインは間違ったコードもそのまま通してしまいます。速く回る流れは、良い検査があってはじめて役目を果たします。

もう一つ、最後の段階まで機械に任せるかどうかは、チームごとに違います。新聞を掲示板の前まで運んでおくだけにして、貼る瞬間は人が確かめてから決めるやり方もあります。こうして人の承認の段階を残した方式は、継続的デリバリーと呼び分けます。

二つのやり方が狙うところは同じです。小さく頻繁に合わせてその場で確かめれば、食い違いを早く見つけられますし、直す手間も少なくて済みます。締め切り前夜に徹夜する日が、それだけ減っていくのです。

🤔 よくある誤解

✕ 誤解

CI/CDを導入すれば、プログラムから不具合がなくなる。

✓ 事実

自動検査は、人があらかじめ書いておいた項目しか確認しません。検査の一覧にない問題はそのまま通ってしまうので、検査を何で埋めるかが道具選びより大切です。

✕ 誤解

CI/CDは、インストールして使う特定のプログラムの名前だ。

✓ 事実

決まった製品名ではなく、「頻繁に合わせて自動で検査して上げる」という仕事の進め方です。そのやり方を助ける道具はいくつもあり、チームごとに違うものを選んで使います。

🧺 日常で出会う場面

1 何人かで一緒に作るウェブサイトでは、誰かがコードを上げるたびに検査が自動で走り、食い違った部分をその場で知らせてくれます。
2 スマホアプリがひと月に何度も小さな改善版を出せるのも、この自動の流れのおかげです。
💡 つまり ひとことで

コードを頻繁に合わせて機械が自動で検査し、通ったものだけをサービスへ自動で上げる、仕事の進め方です。