以前読んだ本「CakePHPで学ぶ継続的インテグレーション」
の1章(概論)だけまとめてみました。
CakePHP使ってなくても、とても役に立つ内容ですし、
CIを導入するときにとても参考になると思います。
気になったらぜひ読んでみてください!
1-1 継続的インテグレーション
・インテグレーションは日本語で「統合」「一体化」
・プロジェクト初期からインテグレーションを実施することで、問題が小さなうちに対処できて、リスク軽減
・CIはビルドというリリースに必要な作業を自動化して簡単に実行可能に
1-2 ビルドとは?
下記のソフトウェアの正常さを検証するために必要な様々な作業のこと
・コンパイル・リンク(文法チェック)
・データベースのマイグレーション
・単体テスト
・インスペクション
・機能テスト
・ドキュメントの自動生成
ビルドの種類
プライベートビルド
各自の開発環境上で実施するビルド。コミットする前に文法チェックや単体テストを中心に必要最低限の項目を行う。
###インテグレーションビルド
インテグレーションサーバ上でリポジトリの変更反映時や日次/週次等定期的に行う。定義されたすべての項目を実施し、状況を通知する。
特定のブランチでこれがうまくいったらステージングとかに自動デプロイするのはいいアイデアです。
###リリースビルド
コンパイルが必要な言語だと特別な設定が必要だったりするので、インテグレーションビルドと同等のビルドをリリース前に再実施する。
##1-3 メリット
誰でもいつでもビルドを実行できる
問題を素早く発見できるため、手戻りが減り、品質を向上できる
プロジェクトの状態を把握できる
ここで、ソフトウェアの状態を客観的に評価する手法の紹介です。
インスペクション
コーディング規約に準拠してないコードの検出
重複コード(コピペコード)の検出
複雑度の検出
ソフトウェアメトリックス
ソースコードの品質をコードの複雑さや結合度など、様々な定量化された数値指標を用いて評価すること。専用ツールで計測できるよ。
コードカバレッジ(コード網羅率)
テストを実行した結果、テスト対象のプログラム全体でテスト中に実行された部分が占める割合のこと。
コードカバレッッジ100%は目指さなくてもいいよ。無駄なテストとか生まれるからね。
コストとのバランスを考慮しよう。
##1-4 導入のタイミング
###新しい開発を始めるときが当然ながら最高!
CIサーバを構築しといたほうがいい。ビルドに時間かかったり安定しなくてエラーになったり、運用に手間かかってストレス爆発するから。
プロジェクト開始直後でもユニットテストをCIシステムで自動実行しよう。インスペクションも自動実行しよう。問題が発生したらメンバーに共有しよう。最初が肝心なのだ。
開発が進んだらCIシステムを進化させていこう。自動デプロイ設定とか。
###既に開発を開始しているときは
バージョン管理システムをとりあえず導入し、CIサーバを導入してみよう。
テストが用意されてないアプリでも、インスペクションを自動実行できるようにする。
↑で発見された修正を対応しながらユニットテストを追加していく。
地道にやろう!