matobaの備忘録

和歌山と東京を往復しつつ活動するエンジニアの記録

継続的インテグレーションに入門した話

昨日、継続的インテグレーションの本を読んでいました。継続的インテグレーションって、面白いなあ。と思いました。

 

「いきなり何の話やねん。」という話なのですが、私はお恥ずかしながら、CIとか継続的インテグレーションとかよくわかっていなくてですね。

 

そもそも、継続的インテグレーションって何だろう。という状況です。噂には聞いていて、カッコ良さそう。みたいなイメージがあります。

 

とは言いましても、私と同じくらいの理解度の人はいるだろうと思い、少し説明を入れます。

 

まず、私が読んでいたのはこの本です。

 

継続的インテグレーション入門

継続的インテグレーション入門

 

 

まあ2009年に発売された本なので、少々古いのですが。

 

とりあえず、簡単に、継続的インテグレーションってなに?っていう話をしますと、

 

継続的インテグレーションっていうのは、「継続的にインテグレーションすること」です。

 

なんのこっちゃ。というところがあると思いますので、少々噛み砕いて記載します。

 

昔からソフトウェアは、一人の人ではなくて、複数の人で作っていました。

でもそれは一人で作っただけでは動きません。

複数の人が作ったものをつなぎ合わせて一つの製品として、作り上げていました。

 

まあ家を作るのに似ていますよね。

 

電気屋がいて、大工がいて、施工屋がいて、と分業制になっていますし、大工にも複数の大工がいて、別々に気を切り出してきて、それを切り出した後に持ってきて、組み立てていきます。

 

そのいろんなものを繋げて組み上げていく作業を、「インテグレーション(統合)」と言っています。

 

で継続的にインテグレーションする、というのがどういうことかと言いますと、すぐにインテグレーションしていくのを連続的に繰り返すイメージです。

 

家の例で言いますと、今までのやり方だと、おそらく、大工が鉄骨か木か、で柱を立てますよね。そのあとで、施工やあたりが、壁を作っていって、電気屋が電気用品くっつけて言って、という流れだと思います。(なんとなくのイメージです。)

 

これは、継続的インテグレーションではないです。

だって、大工が柱を立て終えていないのに、施工や電気工事は始まらないですよね。段階的にくっつけていってるんです。

 

それが、継続的インテグレーションなら、少し違います。大工が柱をてていると同時に、施工が始まって、電気工事も始まって組み上げていきます。そして、それが悪いかを常に設計士が見ている感じです。

 

 

作業量的には、先に設計士が、全てを設計した上で、段階的にやった方が、少ないと思います。ただ、ソフトウェア開発の特性上、継続的にやった方が、効率がいい状況に、現時点ではなっています。

 

最近のソフトウェア開発だと、新しいことが多すぎて設計段階で全てを把握することができなくなっているんですよね。しかも、設計段階でいろんな調査をした上で作るものを設計しても、作り終える頃には、状況が変わっていて、使い物にならないとか、そういうことがあります。

 

例えば、家を建てるのに、10年かかるって言われて、最初の3年が設計って言われたら、設計終わってから出来上がるのに7年かかりますよね。

 

そんなに時間があったら、子供産まれるとか家族が増えるとか、ルームシェアしたいとか、転勤したいとか。色々状況が変わってくるわけです。それで、出来上がったのはいいものの、全然使えない。とかなると悲しいですしね。

 

それだったら、細かく設計せずに、とりあえず作り始めて、作りながら、この設計だと危ないなあ。と思う部分を修正していく方がいいんじゃないかという話です。

 

でも、家づくりの場合、それはできません。なぜか。

 

家づくりの場合は、様々な安全基準があったり、全体として、バランスを取るべき指標があります。例えば、防音性とか、どこいどれくらいの負荷がかかっているのかとか。あとは、釘の打ち方や利用する材料にしてもポリシーがあるかもしれません。

 

それらは、基本的に設計士が事前に考えて、設計図を書き、それを元に作っていくわけです。でも、きちんと設計せずに作り始めると、いろんなバランスが崩れてきた場合に大変なわけです。だから、設計士が常に組み立てるのを見てるんでしょ?っていうと、確かに、見ているんですが、そんな素早く全ての検討項目を考えつくすのは、さすがに設計士にも厳しいわけです。それができるなら、最初の設計がめちゃくちゃ早くなると思うので、細かく設計してから作った方がいいと思います。

 

じゃあどうするんだ。っていうと、ソフトウェア開発の継続的インテグレーションでは、自動的に設計士が見て判断するような部分を全チェックしていきます。

 

そういう環境を作って、みんなで一つの場所に組み上げながらソフトウェアを作っていくのが継続的インテグレーションです。

 

 

なるほどね〜。面白いなあ。

 

もう少し継続的インテグレーションについては、詳しく調べていきたいと思います。

 

 

継続的インテグレーションについて調べているうちに以下のようなブログも出てきたので、紹介しますね。

 

 

www.kaitoy.xyz