【書評】『入門 継続的デリバリー ―テストからリリースまでを安全に自動化するソフトウェアデリバリーのプロセス』を読んだみた
目次
はじめに
こんにちは、スカイアーチHRソリューションズのsugawaraです。これまでやってみた系の記事が多かったため、趣向を変えて書籍の紹介をしたいと思います。
今回は、2024/04/26に発売された『入門 継続的デリバリー ―テストからリリースまでを安全に自動化するソフトウェアデリバリーのプロセス』です。タイトルに入門とある通り、「継続的デリバリ-ナニモワカラナイ」という方でも基礎の基礎から学べる良書だと思いましたので、本記事ではその概要と感想を共有します!
対象読者
本書の「はじめに」では、”本書はソフトウェアを構築するという革新的な日常業務を行うすべての人を対象としています。”と書かれています。ただ、あえて範囲を狭めるとしたら、もっとも読むべき人は、下記のような人が挙げられます。
- これからDevOpsやCI/CDパイプラインを学びたい人
- なんとなくCI/CDパイプラインを使っているけど、よく理解していない人
- まだCI/CDパイプラインを導入していないし、メリットがよくわからない人
本書の構成
第1部から第4部までの計13章に分かれています。より詳細な目次を確認したい方はこちらから!
第1部 継続的デリバリーとは
1章 『入門 継続的デリバリー』へようこそ
2章 パイプラインの基本
まず継続的デリバリーとはなにかという定義から始まり、似た用語である継続的インテグレーションや継続的デプロイメントとの違いについても見ていきます。こちらで整理した用語は本書を読み進める上で、何度も繰り返し出てくる親切な作りになっています。
また、継続的デリバリーパイプラインの構成要素である『リント→テスト→ビルド→パブリッシュ→デプロイ』もまずは簡単に紹介されており、第2部で詳細が語られるという流れになります。
2章以降は仮想企業が抱える問題とそれに対するアプローチが書かれており、継続的デリバリーがなぜ必要なのかということがとてもわかりやすいです。また、会話や図表、ゆる~い絵が豊富なので自分のようなCI/CDパイプライン初心者でも安心して読み進められました!
第2部 常にデリバリー可能な状態に保つ
3章 バージョン管理は継続的デリバリーの成功に不可欠
4章 リントを効果的に使う
5章 ノイズの多いテストに対処する
6章 遅いテストスイートを速くする
7章 適切なタイミングで適切なシグナルを送る
第2部では、継続的デリバリーパイプラインの構成要素であるリントとテスト、およびコードのバージョン管理がメインになります。
自分はあまりテスト部分に詳しくないため、テスト部分についてはざっと読みましたが、テストの実行が遅くなったり、テストのノイズが多くなってしまった場合にはどうすべきかなどといった問題に焦点が当てられています。E2E テスト:10%、結合テスト:25%、単体テスト:65%というテストピラミッドの話もありましたが、このあたりは実際にバックエンドのコーディングができるようになってからもう一度しっかり読みたいなと感じました。
また、本書ではバージョン管理、CI/CDツールとして、GitHub/GitHub Actionsが採用されています。ただし、あくまで説明のためであり、GitHub/GitHub Actionsを勧めているものではないです。そのため、利用経験がなくても問題なく読み進められるように配慮されています。
第3部 デリバリーの簡略化
8章 簡単なデリバリーはバージョン管理から始まる
9章 安全かつ信頼性のあるビルド
10章 自信を持ってデプロイを行う
第3部はビルドとデプロイ、リリースのフェーズをメインに取り扱っています。DORAメトリクスという指標を用いて、いかにイケてない継続的デリバリーを改善するかを見ていきます。
DORAメトリクスとは、Google CloudのDevOps Research and Assessment(DORA)チームが作成したソフトウェア開発チームのパフォーマンスを評価するものであり、ベロシティと安定性の2軸からなり、前者はデプロイの頻度と変更のリードタイム、後者はサービス復旧時間と変更に伴う障害発生率で測定されます。
下記のようにEliteからLowで評価されるため、実際にCI/CDパイプラインを利用している方はこちらで自らのパイプラインの評価をしてみてください。Lowが多い場合には、本書のアプローチなどをもとに、改善が必要かもしれません。※あくまで指標のため、絶対的なものではありません。
なお、この章で自分が学んだことは「日々のデプロイ頻度を増やすことで、各デプロイのリスク量は減少し、その結果、パイプライン上での障害を引き起こす可能性も減少する。」ということです。
しっかりとしたパイプラインがあれば、デプロイ頻度を上げたほうがシステムの安定性を高め、開発者の負担を軽減することができるということでした。自分自身はアプリケーションのコミットやデプロイ経験があまりないため、とても勉強になりました。
第4部 継続的デリバリーのデザイン
11章 継続的デリバリーを始める
12章 スクリプトはコードでもある
13章 パイプラインのデザイン
第4部では、新規プロジェクト(グリーンフィールドプロジェクト)とレガシープロジェクトにそれぞれ継続的デリバリーをどうやって導入するか、パイプライン用のスクリプトはどうあるべきか、自動化されたパイプラインとはどういったものか、などのトピックを扱っています。
やはりCI/CDパイプラインはプロジェクト初期であればあるほど導入のリスクや障壁は低いようです。自分がはじめてパイプラインの不具合調査をしたときも、プロジェクト初期からまずパイプラインの構築・改善をし、それから開発がはじまっていました。本書を踏まえると、それは正しくて、今後もパイプラインファーストで開発を進めていくのが良さそうですね。
付録
付録A CDシステム
付録B バージョン管理システム
最後に付録としてメジャーなCDシステムやバージョン管理ツールを紹介しています。ツールのArgo WorkflowsやTektonなどはここで初めて見ました。おそらく自分は今後もCodePipelineやGitHub Actionsを利用することになりそうですが、他のツールについても試してみたいなと感じました。
おわりに
一つ一つを丁寧に説明して積み上げていくスタイルであり、また豊富な図表や会話などが初学者にとっても親しみやすい(オライリーなのに!)書籍だと思われます。これからCI/CDパイプラインを学びたいという方にぴったりの書籍なので、気になった方は是非手にとって見てください。