CI/CD

CIとCDとは

CI/CD (継続的インテグレーション) は問題を早期に検出し、運用環境により迅速にリリースすることを主な目標として、アプリケーションのビルド、テスト、および展開を自動化する手法です。

CIとCDの違いと目的

  • 違いはカバー範囲(CIは自動テストなどのリリースできる状態を担保するのに対して、CDはリリースまでを担当する)
  • ブランチの統合の際に力を発揮する(複数ブランチの統合でデグレってないか即時にフィードバックがある)

継続的インテグレーション(CI)

  • メインブランチにマージされた際に自動でビルドやテストを行うことでソフトウェアが意図した通りに動くかのフィードバックを高速に返してくれる

継続的デリバリー、継デプロイメント(CD)

  • CIの拡張版のイメージでリリースプロセス全体を自動化
  • masterブランチにマージされると検証環境にデプロイされ、QAチームが検証環境で受け入れテストなどを検証を実施する
  • 本番環境は手動で実施されることが多いイメージ

開発手法

  • ウォーターフォール
    • 全てが完成してリリース(フルフルの機能をメインブランチにマージ)
    • 長期間のローカル開発により大きなコンフリクトが発生してデグレを起こしやすくなる
  • アジャイル
    • 小さい単位(機能ごと)にリリース(機能をメインブランチに都度マージ)

ウォーターフォールが悪でアジャイルが正義みたいな風潮があるが、個人的にはアジャイルはウォーターウォールを小さくして、複数回繰り返すイメージなので良し悪しはないと思っていてプロジェクトのスコープに応じて決めるものだと思ってる。

CI/CDツール

  • CircleCI
  • GitHub Actions
  • Jenkins

所感

  • CI/CDは小さなリリースを高頻度で回すというアジャイル手法と密接に関係しているが、ウォーターフォールでも自動テストや静的解析が走る環境は助かるので開発手法とは切り離して考えても良いと思った。
  • CI/CDでは自動テストや静的解析による挙動の担保という部分がメリットだと感じた一方でテストコードを書く、もしくは正しいテストコードを書くということをしないとメリットが半減するので最低限としてテストコードを条件にするなどの対応が必要になりそう
  • 「テストを作る時間がない」というのは「テストを書いてないから時間がない」ということでもある。

参考