定義
大勢で分担して書いたプログラムのコードをこまめにひとつに合わせ、合わせるたびに、あらかじめ用意した検査を機械が自動で実行するやり方です。検査に合格したコードは、人が手を触れなくても実際のサービスのサーバーまで自動で届けられたり、いつでも届けられるよう準備されたりします。前半を継続的インテグレーション(CI)、後半を継続的デプロイ、または継続的デリバリー(CD)と呼び、この二つをひと続きにつなげた流れをCI/CDと呼びます。
原稿を締め切り前夜にまとめて合わせると起こること
学級新聞を四人で分担して作るとしましょう。それぞれ自宅で、記事を一本ずつ別々に書きます。お互いがどう書いているかは、締め切りの日になってやっと分かります。
締め切り前夜、四人分の原稿をはじめて合わせてみると、問題が次々に出てきます。同じ出来事を二人が違うふうに書いていたり、見出しの文字の大きさがバラバラだったりします。どこからずれたのかをさかのぼるうちに、徹夜になってしまいます。
別々に離れていた時間が長いほど、くっつけ直すのは難しくなります。そこで、締め切りまで待たずに毎日少しずつ合わせてみよう、という考えが生まれました。こうしてこまめに合わせて、ずれた箇所を早く見つけるやり方を継続的インテグレーションと呼びます。
プログラムを作る現場も事情は似ています。大勢がそれぞれ担当部分を何週間も別々に書いてから一度に合わせると、締め切り前夜の学級新聞と同じことが起こります。そこで開発者たちは、一日に何度も自分の原稿を共有の原稿の束に合わせ入れます。
検査機を通った原稿だけが掲示板に貼られます
こまめに合わせるだけでは、ずれた箇所を人がひとつずつ目で探さなければなりません。そこで、合わせる瞬間ごとに自動で動く検査機を取り付けておきます。学級新聞でいえば、原稿を共有フォルダに上げた瞬間に、誤字チェッカーが起動するようなものです。
プログラムでこの検査機の役割を果たすのが自動テストです。あらかじめ書いておいた確認項目を、機械が順番に調べていきます。ひとつでも引っかかれば合わせる作業を止め、だれのどの行で引っかかったのかをすぐに知らせます。
検査に合格すると、次の段階に進みます。完成した新聞が人の手を経ずに廊下の掲示板まで自動で貼られるように、合格したコードが実際のサービスのサーバーに届けられます。この後半を継続的デプロイと呼びます。
合わせることと検査と届けることがひと続きにつながって自動で回るこの流れを、パイプラインと呼びます。人は原稿を書くことに集中し、くり返しの確認と配達は機械に任せることが核心です。
もう少し正確にいうと
検査機を通ったからといって、新聞にまったく欠点がないという意味ではありません。誤字チェッカーは誤植を見つけ出しますが、記事に書かれた日付が合っているかどうかまでは見られません。自動テストも、人があらかじめ書いておいた項目だけを確認します。
だから、検査リストを何で埋めるかのほうが、どんなツールを使うかよりも重要です。確認項目が貧弱なら、パイプラインは間違ったコードもそのまま通してしまいます。速く回る流れは、よい検査があるときにだけ本来の役目を果たします。
もうひとつ、最後の段階まで機械に任せるかどうかは、チームごとに違います。新聞を掲示板の前まで運んでおき、貼る瞬間は人が確認してから決める方式もあります。このように人の承認の段階を残した方式は、継続的デリバリーと別に呼ばれます。
二つの方式がねらうところは同じです。小さくこまめに合わせ、その場で確認すれば、ずれた箇所を早く見つけられ、直す手間も少なくて済みます。締め切り前夜に徹夜することも、それだけ減ります。
よくある誤解
CI/CDを導入すれば、プログラムからエラーがなくなる。
自動検査は、人があらかじめ書いておいた項目だけを確認します。検査リストにない問題はそのまま通ってしまうので、検査を何で埋めるかのほうが、ツール選びよりも重要です。
CI/CDは、インストールして使う特定のプログラムの名前である。
決まった製品名ではなく、「こまめに合わせて、自動で検査して届ける」という働き方です。その方式を助けるツールはいくつもあり、チームごとに違うものを選んで使います。
日常で出会う場面
大勢で一緒に作るウェブサイトで、だれかがコードを上げるたびに検査が自動で動き、ずれた部分をその場で知らせてくれます。
スマホアプリが一か月に何度も小さな改善版を出せるのも、この自動の流れのおかげです。
つまり ひとことで
コードをこまめに合わせて機械が自動で検査し、合格したものだけを自動でサービスに届ける働き方です。