Contents

継続的インテグレーション──現実的な連帯責任

Contents

顧客が欲しいのは、誠意の込もった謝罪ではない。 不具合のない製品だ。

/images/rail_junction.jpg

仕事の成果物を提出する時には大抵、チェックすべき項目がいくつかある。 確認漏れがないようにするためには、チェック項目をリストに書き出しておくと良い──さてその方法は、万全といえるだろうか? たくさんの懸念が思い浮かぶ: あなたの同僚は、「あなたが “確かに” チェックリストを見ながら確認した」ことを、どのように確認したらいいだろうか? 成果物とともに、あなたの署名入りのチェックリストも提出すればよいのだろうか1? またもし、あなたがひどく疲れていて、さっさと署名だけしてしまったらどうなるだろう?──恐らく全責任があなたに降りかかるのだろうが、あなたが責任をとったところで、果たして顧客は喜ぶだろうか? そして何より、チェック項目が増えていったら、将来あなたの時間はどうなるのだろう?

開発者たちは既に、これらの問題を現実的な方法で解決している。 カギは、次の三つのステップを、ステークホルダー全員に見える場所で行うことだ:

  1. 作業結果の提出
  2. コンピュータによる自動チェック
  3. 人間による査読と受理2

この方法を「継続的インテグレーション」という。

おっと、「聞いたことない、自分には無関係だ」とは思わないでほしい。 すぐに、あなたにとっても不可欠なものであることがわかるだろう。

実例

現代に生きる私たちは日々、様々なソフトウェアや web サービスに囲まれて生活している。 実は継続的インテグレーションは、これらのシステムの開発現場で、ほとんど絶え間なく稼働している。 Google の検索エンジンや Amazon や Facebook、Twitter などの各種サービスやアプリ、日本ならばメルカリや LINE などがそうだ。 しかしこれらのサービス/アプリの開発基盤は公開されていないので、継続的インテグレーションが実際に稼働している過程は見ることができない。 そこで、身近なオープンソースプロジェクトを見てみよう。

たとえば新型コロナウイルス感染症対策サイト。 迅速で質の高い仕事が尊敬を集めた。 300 名以上のボランティアが関わるこのプロジェクトがスムーズに進んだ背後に、継続的インテグレーションの貢献があることは間違いない。 その行動原則(2021-03-30時点)に「正しいものを正しく、ともに作るプロセスの効果を具体的に示す」とあるとおり、 我々ノンプログラマの効果的な働き方の参考になるはずだ。

さてプロジェクトの GitHub にアクセスし、開発の舞台裏をのぞいてみよう。 ここには、先程のウェブサイトを作るための全コードが保管されており、各コードは “Code” タブから見ることができる。 あのサイトは、有志の開発者たちが、これらをわいわい共同編集することで作られてきた。

“Pull requests” というところにあるのが、いま提出されている作業成果だ。 つまり「1. 作業結果の提出」が、我々ステークホルダーにも見えるようになっているわけだ。 下にスクロールしていくと「All checks have passed」という項目があり、ここで継続的インテグレーションによる自動チェックの合否が判別できるようになっている。 最低限クリアしていてほしい品質項目は `hoge.yml` というファイルに書き込まれており、ファイルが更新されるたびにクラウドコンピュータ上でチェックが走る。 結果の表示に “All chcks have passed” とあれば、作業結果が全てのチェック項目に合格したことがわかる。 つまり「2. コンピュータによる自動チェック」までも公開されているわけだ。 ここまでこれば、作業結果は人間による査読を受けられる。 「3. 人間による査読と受理」の過程を見てみたければ、closed (解決済み)となった Pull request にアクセスしてみよう: いずれかの pull request を見てみれば、その作業結果に対して誰がどんな指摘をし、作業者はどのように改訂したのかがわかるし、 さらにその変更を誰が受理し、誰が反映したのかも一目瞭然だ。

まとめ

継続的インテグレーションを活用することで、共同作業の各ステップをステークホルダー全員に見える形ですすめていくことができる。 プロジェクトの透明性を高めることで、共同作業のコミュニケーションコストを減らすことができるだけでなく、有事における追跡調査も容易になる。

開発者たちは、よい製品を効果的に生み出すために、共同開発の手法を日々改良している。 それぞれの手法は、コラボレーションを促進することに重点が置かれているものが多く、中でも継続的インテグレーションの効果は大きい。 この手法は未だノンプログラマの職場は馴染みがあるとは言えない。 しかし狭義のソフトウェアを開発していなくとも、我々はみなコラボレーションをしている。 コラボレーションを劇的に加速する継続的インテグレーションの利用価値は十分にあるはずだ。 ぜひ自分ごととして、業務への導入を検討してみてほしい。


  1. もっとも、職場には分別のある大人たちが集まっているはずなのだから、ここまでの心配は必要ないのかもしれない ↩︎

  2. たいていの場合、コンピュータによる自動チェックよりも高次の観点で査読される ↩︎