継続的インテグレーションについての話。
継続的インテグレーション、、、どこかで聞いたことある用語。
ソフトウェア開発する際に生産性をあげるための"ナニカ"だろうな〜程度の理解。
そんな僕が今回はより実践に近いソフトウェア開発をやるために、この継続的インテグレーションを自分のプロジェクトに導入してみることにした。
まず、用語の意味について調べた。
継続的インテグレーションを完結に説明すると"ソースコード変更の度にビルド・テストをこまめに行い、実行結果をチェックして評価しようね"ということ。よくCIと呼ばれている。以下CIと呼ぶよ。
うん、普通に簡単な概念。。。
なにか当たり前ことを言っている気がしたので、CIをしない場合を考えてみる。
CIしない場合(継続的でない場合)
ソースコード変更1→ソースコード変更2→ソースコード変更3→久々にソフトウェアを統合してみる。
ここで、エラーやテスト失敗などの問題なく動いてくれればいい。
しかし、問題があった場合、ソースコード変更1〜3のうちに"どの時点"で問題があったかを知ることができない。バージョン管理システムを利用していれば、変更履歴を辿って原因究明することはできるが、"どの地点"が分かれば無駄な作業が減りそうだ。
でも毎回CIするのは煩雑な作業。というか自動化できそうなところ。
そこで登場するのがCIツール。簡単に言うと"ソースコード変更を捕捉して、自動的にCIしてくれるツール"だ。JenkinsやCircle CIがある。
CIはビルドとテスト実行の自動化の役割も担っているが、その作業は世間的に先に?広まっているビルドツールに任せちゃっている。
じゃあCIツールは何してる?
主に以下の2点になると考える。
1.ソースコード変更の捕捉→ビルドツール自動実行
2.ビルドとテストの実行結果を表示
う〜んこの凄いことやってない感。
ただ1によって数秒短縮することになる。または2はフィードバック用としての役割を果たすために時系列で見せたり、GUIベースでUI/UXの工夫がされているので、開発効率は気づかずとも上がっているかもしれない。
まとめ
- CIをすることでソースコード変更による問題の早期発見をしようぜ
- CIツールを使ってCIを自動化しようぜ
- CIツールの内部でビルドやテスト、依存関係解決を自動化する作業をビルドツールに任せちゃってるぜ