デプロイメントパイプライン

デプロイメントパイプライン

ここで高市氏は「デプロイメントパイプライン」について解説。これはCI/CDを含めたソフトウェア変更から本番環境を経て、ユーザーがそのソフトウェアを使うまでのプロセス全体を指すという。つまりCI/CDはデプロイメントパイプラインの一部であるという発想だ。

デプロイメントパイプラインの解説

デプロイメントパイプラインの解説

ここから継続的デリバリの書籍を参考にして、デプロイメントパイプラインの各ステージについて解説を行った。

コミットステージ

最初のステージであるコミットステージの解説

最初のステージであるコミットステージの解説

デプロイメントパイプラインの最初のステージはコミットステージと呼ばれ、デベロッパーが完成したコードをソースコードリポジトリーにコミットする段階を指す。ここではデベロッパーが書いたコードが仕様通りに動作することを確認するのが目的だ。

そのために、SonarQubeなどのツールを使ってソースコードの静的解析などを行うことが必要であると解説した。高市氏はSonarQubeに関する書籍を執筆したこともあり、その気になればツールの詳しい解説も行えたはずだが、ここでは敢えて紹介するに留め、デプロイメントパイプラインの解説に注力していることがポイントだろう。

静的解析の必要性を解説

静的解析の必要性を解説

コミットステージでは最後の段階でバイナリを生成すること、環境ごとのビルドは行わないなどのポイントを解説し、CIについてのルールが必要であることを強調した。

コミットステージのCIに関するルールを紹介

コミットステージのCIに関するルールを紹介

最低でも1日に2回はコードをメインブランチにチェックインすること、コミットテストが終わるまで次の作業に進まないこと、5分以内でプロセスを終わるようにすることなどの経験則が解説されている。

受け入れステージ

次のステージは「受け入れステージ」(インテグレーションテスト)と呼ばれるもので、疑似的な本番環境において動作だけではなく処理性能なども評価するステージとなる。開発されたコードが実際のビジネスとして利用される場合に、必要な要件を満たしているか? を確認する段階だ。

コミットステージを経て受け入れステージに移行

コミットステージを経て受け入れステージに移行

コミットステージでは実装された機能の確認がメインだったが、受け入れステージにおいては「ユーザーの求める価値」を確認することが重要だと解説した。ここでは抽象的に説明されているが、一番わかりやすい例は処理速度だろう。いわゆるEC系やフライトの予約システムなどでは、検索から予約の実施~完了までに時間がかかればかかるほど離脱率が上がることが知られている。つまり、単に検索と購入ができるという機能が動いているだけではビジネスの価値は提供できないという観点である。

本番環境と同じように動くことを確認するのが受け入れステージ

本番環境と同じように動くことを確認するのが受け入れステージ

ここで重要なのは、この段階からデベロッパーだけではなくビジネスのオーナー(プロダクトマネージャーと言い換えても良いだろう)が関与するということだ。そのために価値を検証するには、ビジネスオーナーが理解できるテスト内容であることが大切だ。

ビジネスオーナーが理解できる言語で検証を行う

ビジネスオーナーが理解できる言語で検証を行う

このスライドではCucumberという特別な言語でテストを記述できるツールを使うことも効果があると解説している。

このステージでのポイントは次のスライドに要約されている。

受け入れステージでのポイント

受け入れステージでのポイント

テストの失敗にはチーム全体で対応する、開発環境でテストを実行できるようにする、外部システムとの連携がある場合は疑似的なスタブを使う、本番環境へのデプロイメントと同じプロセスを使うなどがこのステージでの要点となる。

ここでKubernetesを利用したアプリケーションをデプロイメントパイプラインに乗せた場合にどうなるか? を例を使って解説した。

Kubernetesを例にデプロイメントパイプラインを解説

Kubernetesを例にデプロイメントパイプラインを解説

GitHubのリポジトリーから生成されたバイナリをテストの後にJFrogのアーティファクトリーに格納し、疑似環境にデプロイして受け入れテストを行うという流れになる。

テストについてはコミットステージ、受け入れステージそれぞれに観点が異なるという点を解説したのが次のスライドだ。

コミットステージと受け入れステージのテストの違い

コミットステージと受け入れステージのテストの違い

コミットステージのテストはデベロッパー目線、受け入れステージのテストはビジネスオーナー目線というのが大きな違いだろう。ここで初めて開発されたコードがビジネスとして使い物になるのか?を試されることになる。

テストについて

ここからはテストについて書籍を引用しながら解説を行った。

アジャイルテストのマトリックスを紹介

アジャイルテストのマトリックスを紹介

スマートフォンなどをフロントエンドにするアプリケーションであればGUIのテストは必須となる。これまではGUIのテストには多くの時間が必要だったが、メルカリの事例を紹介して大幅にテスト時間の短縮に成功したことなどを解説した。

GUIテストについてメルカリの例を使って解説

GUIテストについてメルカリの例を使って解説

キャパシティステージ

そして受け入れステージと平行して実施されるキャパシティステージについても解説を行った。

キャパシティステージの解説

キャパシティステージの解説

ここでは開発されたコードがシステム全体のキャパシティ(性能)に対してビジネスオーナーが許容可能なレベルに達しているかを検証することが目的であると解説。

キャパシティは機能とは異なり、明示的には提示されない要件であり、デベロッパーも開発段階ではあまり意識しない傾向があると説明。速度が遅いなどについては最後の最後の段階まで問題が表面化しないこと、逆に性能を重視しすぎて難解なコードになってしまうなどの問題があることを説明した。

非機能要件の留意点

非機能要件の留意点

キャパシティステージのプラクティスとして紹介されたのは、本番であり得るシナリオをベースにテストを行う、負荷をかけた状態でテストを行うのがポイントという点だ。

本番環境へのデプロイ

キャパシティステージのポイント

キャパシティステージのポイント

最後の段階となる本番環境のデプロイについては、デプロイとロールバックをワンクリックで行えるように準備する必要があることを強調した。

本番環境へのデプロイやロールバックはワンクリックで実施できるように準備

本番環境へのデプロイやロールバックはワンクリックで実施できるように準備

特に注意したい点として、本番環境でエラーが起こった際に本番環境を直接修正するのではなく、ロールバックを行った上でコードから見直すことを挙げた。

ゼロダウンタイムを実現するポイント

ゼロダウンタイムを実現するポイント

継続的デプロイメントのポイントは、デベロッパーが開発したコードを即本番環境に反映するプロセスであり、もしもエラーが発生したとしてもその変更だけをロールバックすることで大きな障害を回避できることであり、本番環境に即時反映しなくてもいつでもそれが可能な状態を作り上げることであると解説した。

継続的デプロイメントの目的

継続的デプロイメントの目的

CI/CDはツールではなくプラクティスが大切

最後に、デプロイメントパイプラインを実装するためにはプロジェクトが開始間もない時期に環境を整備して試行することが重要であると語った。また何度でも繰り返して語られたのは、CI/CDはツールではなくプラクティス、つまり実際の業務の中に組み込むことであるというポイントだ。

CI/CDはツールではなく実際に業務に使ってみること

CI/CDはツールではなく実際に業務に使ってみること

日本では多く採用されているスクラムによるアジャイル開発においても「炎上スプリント」を紹介し、機能開発に注力してしまう結果、リリースを行うというプロセス自体が軽視されてしまう傾向について解説を行った。機能要件以外にも性能などの非機能用要件も満足させるためには、本番環境への頻繁なリリースを行うことで検証が容易になることを解説した。

最後にまとめとして、人間は見えないことを先延ばしにしてしまう生き物であることを理解して、リリースのリスクを軽減するためにデプロイメントパイプラインを使うこと、デベロッパー以外にビジネスオーナーも巻き込んだプロセスを作ることの重要性を説明してセッションを終えた。

デプロイメントパイプラインのまとめ

デプロイメントパイプラインのまとめ

ツールの解説を極力少な目にして、プロセスの解説と留意点に集中して解説を行った高市氏だった。個々の例はデベロッパーにとっては理解しやすい内容ばかりだったが、半面、定量的な観測をベースにした解説をもう少し聞いてみたかったとも感じた。

人気記事トップ10

人気記事ランキングをもっと見る

企画広告も役立つ情報バッチリ! Sponsored

ClickHouse Cloudが実現した広告運用SaaS「ATOM」のデータ基盤革新、パフォーマンスを向上しながら、運用負荷とコストを削減 11月11日 6:20 AIで開発が加速する時代、品質保証はどう変わる? Tricentisが示すAIエージェント活用の実像 11月9日 6:45 悪用までの猶予が「1分」に迫るフロンティアAI時代に開発と本番を貫く脆弱性管理が必要 10月29日 8:30 欧州CRA対応とSBOM運用。AI生成コードのOSS混入問題の対策とは ――スニペット単位で検出する「FossID」「Insignary Clarity」によるSBOM運用 9月16日 6:40 PostgreSQLからTiDBへ、稼働中SaaSで進める段階的DB移行の実践と再設計への展望 9月7日 6:30 機能安全開発におけるGoogleTestの活用を支援!「Parasoft C/C++test CT」で実現する効率化&AI連携 4月14日 6:30 【CNDW2025】Grafanaが明かす「オブザーバビリティの哲学」ー最小限の労力で実用的なインサイトを得るには 1月23日 6:30 【CNDW2025】プロダクト急増に備える基盤刷新 ーウェルスナビがECSからEKSへの移行で得た知見とは 1月15日 6:30 【CNDW2025】250環境を5人で運用、構築時間は30分に ーKINTOテクノロジーズが語るインフラ基盤組織の作り方 2025年12月18日 6:30 新たな自動化で熱視線! AIエージェントの「推論能力」を支える2つのコンポーネントとは? 2025年11月28日 6:30