CI/CDってなーに
この記事ではCI/CDの概要
について初心者でもわかりやすいように解説します。
CI/CDについて調べているときにDevOps
とか初っ端なかまされて困惑して、結局CI/CDってなんのためにあって、何をする技術なのかわからなかった過去の自分が知りたかった内容を記事にしてみました。
CI/CDは何のためにあるのか
この記事を読んでいる方の多くは、アプリ開発に取り組んでいる方々だと思います。しかし、アプリケーションの開発はリリースがゴールではありませんね。リリース後も、ユーザーのフィードバックを受けて改善を続け、機能を追加したり、問題を修正したりすることが重要です。
ビジネス目線で見ると、市場のニーズに合わせてアプリ自体をアップデートする必要があります。ユーザーに最適な機能を求めて素早くPDCA サイクルを回していきます。PDCAサイクルを高速に回すには、アップデートのスピード
を早める必要があると思います。
このスピード感がビジネスで勝ち抜いていくには必須になります。このスピードを上げるのがCI/CDです。
ソフトウェア開発には、ソフトウェアライフサイクルと言うものがあります。
ソフトウェアライフサイクルのビルド、テスト、リリースを自動化
し、アップデートのスピードを早くするのがCI/CDの目的です。
CI/CDは技術的なものではありますが、どちらかというとビジネスサイドの要望(PDCAサイクルを高速に回す)を叶える技術であるとも言えます。
ひとまず以下のようなざっくりとした認識で大丈夫です。
CI → バグがない状態を保つ検証の自動化
CD → デプロイ作業を自動化
CI(継続的インテグレーション)とは
ソフトウェア開発は、ソフトウェアライフサイクルという開発プロセスを踏んでいきます。
そして、ビルド、テスト、リリース
を自動化するのがCI/CDと先ほど説明しました。
そのうち、CIはビルド
とテスト
を自動化するフェーズです。
ビルド、テストを噛み砕いていうと「コードの品質が十分であるか」と「バグ」の検証を行うことであると言えます。
特に頻繁に、この検証を行う必要があります。そうすることで早期にバグを発見修正ができ、結果的にトラブルシューティングに取られる時間が短縮します。
多くのプロジェクトではgit push、mergeするたびにこの検証を自動的に行っています。
頻繁に検証をすることで常に動くコードが保証
されます。人間がこの検証作業を行うことはお勧めしません。
それは、PDCAサイクルが高速に回せなくなるからです。
そして、人間は忘れます。頻繁に検証すれば時間が取られるからです。
さらに検証のし忘れがあればバグの混入リスクが高くなります。
バグの含まれているアプリをリリースすれば、ユーザー体験が低下
します。
検証は、コマンドを順番に実行するだけの繰り返し作業ですので自動化
できます。
繰り返し作業は自動化に向いているため、機械に任せましょう。
このような検証環境が用意されていることで、新しい機能を追加することが億劫にならず、ビジネスサイドでの挑戦と改善
が素早く行えます。
CD(継続的デプロイメント)
CIはバグの混入リスクを減らし、常に動くコードを保証するフェーズ
でした。
CD
は、CIで動くことが保証されたコードをミスなくリリースを行うためのフェーズ
です。
デプロイ作業は複雑です。
デプロイ作業を手順書に書き起こして手動で行う場合、常にヒューマンエラーのリスクがつきまとうことになります。間違った手順でデプロイし、リリースすればユーザーは困惑してしまいます。
アップデートするごとにデプロイ作業は行われます。人間がやればいつかミスします。
こちらも自動化してデプロイミスのリスクを減らしましょう。
デプロイ作業を自動化することで安全にユーザーの元へサービスが届けられます。
CI/CD と Github Actions
CI/CDを実現するプラットフォームは複数ありますが、代表的なのはGithub Actions
でしょう。
全ての作業をGithubで完結させると作業も捗るので個人的にもおすすめです。
まとめ
このように開発だけでなく、開発と運用を一体として考えるのがDevOps
です。
ポイント
- CI/CDはバグの検証を自動化し、動くコードを保証した上でサービスを無事にユーザの元へ届ける
- CI/CDで、時間短縮、フューマンエラーの低減、開発スピードの向上、サービスの質の向上が果たせる
→ビジネスサイドの仮説と検証が素早く行える
CI/CDはサービスをアップデートする可能性があるプロジェクトでは採用検討して欲しい技術であります。
Discussion