💬

CI/CDに入門してみた

2025/02/02に公開

はじめに

どうも、ippeiです。
今までCI/CDって言葉は何度も聞いたことがありましたが、その内容を詳しくは知らなかったので勉強してみました。

この記事のゴール

  • CI/CDがなぜ必要なのかを知る
  • 用語について整理ができている

書いてないこと

  • Github Actionsなどのツールを使った具体的なCI/CDの方法

先に結論

  • CI(継続的インテグレーション)とは?
    • 結合と検証を繰り返すことで「安全に」リリースするために必要なプロセス
  • CD(継続的デリバリー)とは?
    • いつでも」「簡単に」リリースするために必要なプロセス
  • CDによって常にリリースできるようにするために、CIによって安全性を確保する

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

CIはContinuous Integration(継続的インテグレーション)の略で、変更の統合のたびに単体テストなどの検証を行なうプロセスです。

インテグレーションって何?

インテグレーションは日本語で統合という意味です。
「何に」「何を」統合するのかというと「ソフトウェアに」「コードの変更を」統合します。
なので、CIは継続的な統合という意味になります。

CIのメリット

メリットを考えるため、逆にCIを行わない状態を考えてみたいと思います。
CIを行なっていないと、変更がどんどんリリース用のブランチに統合されます。
全てが統合された後にブランチにおいてテストを行っていきます。
このテストの段階で不具合が発覚したらどうでしょうか。
どこで不具合が起きたのかを確かめ、修正に追われてリリースが遅れるかもしれません。
これの改善策として、CIでは変更が統合されるタイミングで安全性を確かめます。
変更→検証→統合を繰り返すことにより誤った変更が統合されることを防ぐことができます。

シェフの例え

「入門 継続的デリバリー」p9 に書いてある、CIについてのとてもわかりやすい例え話です。

シェフのホリーはパスタソースを作っています。玉ねぎ、ニンニク、トマト、スパイスといった原材料のセットからスタートします。調理するには、これらの材料を正しい順序塗料でインテグレートし、狙った味のソースを作る必要があります。
そのために、彼女は新しい食材を加えるたびにすぐに味見をしています。その味をもとに、もう少し調味料を追加してみたり、見落としていた食材を追加していきます。

この例はCIのプロセスを的確に表してます。
パスタソースに調味料を加えるたびに味見をするというプロセスが、CIにおいてソフトウェアに変更を加えるたびにテストを行い、必要に応じて修正を加えるという部分の比喩になっています。
ソースが完成するまで味見をしなければ味のコントロールができなくなってしまいます。

CD(継続的デリバリー)とは?

CDはContinuous Delivery(継続的デリバリー)の略で、ソフトウェアの変更をいつでも自動的にリリースできるようにしておくプロセスを指します。

CDのメリット

CDによって得られるメリットとしては、リリースまでの手順が自動化されることでミスが起こりづらくなることと、誰でもリリースができるようになることが挙げられます。
手動でリリースする場合、人間なのでどうしてもミスが起こりますし、属人化する可能性があります。
そういった人間由来の障壁を取り除くための手法としてCDによる自動リリースが使われます。

まとめ

エンジニアリングにおいて、CICDは安全に素早くソフトウェアをリリースするために重要なプラクティスであることがわかりました。

参考書籍

https://www.oreilly.co.jp/books/9784814400690/

GitHubで編集を提案

Discussion