貴社のニーズに合わせ、必要とするソフトは異なります。多様な開発目標に対応するため、統一された手法は推奨されません。継続的デリバリー(CD)は採用される開発手法のひとつです。
意味は何か?
なぜCDが他の手法より優れているのか?
どのようなベストプラクティスがあるか?
これらの疑問があるなら、記事を読み進めると答えが見つかるでしょう。
新しいソフトウェア開発手法であるCDは、開発目標全体を短いサイクルに分け、同時進行で進めます。
アプリ全体を一度に書くのではなく、CDでは小さなサイクルでコードを作成します。コード生成はほぼ自動化されるため、全体の品質が維持されます。
開発目標が小さく明確になることで、各部品の作成、展開、テストが容易になり、エラーもすぐに発見・対処できます。
主にDevOpsの開発で採用され、CI(継続的インテグレーション)と併用されます。CIとCDは、ソフトウェア作成、フィードバック、導入/リリースの流れ(CI/CDパイプライン)を生み出します。
ウォーターフォールなどの従来手法と比べ、CDはDevOpsチームに適しており、以下の利点があります。
開発者は小さな部分でコードを作成・更新できるため、大規模なコードベースを初めから構築する必要がなく、少しずつ拡大できます。
小さいコードベースはバグの確認が容易です。コード量が少ないため、エラーがすぐに発見・修正され、製品工程に深く影響するのを防ぎます。
複数の開発者やチームが同時に異なる部品の作成に取り組むため、連携しながらアプリの各部を作り、開発時間が短縮されソフトウェアが速く仕上がります。
まず、継続的インテグレーションは継続的デリバリーへと拡張されます。CDは継続的に作成されたコードが連続して提供され、変更の結果も予測します。
CIはコードベースへの各変更に対するフィードバックを重視し、リリース前にバグを検出します。両者を組み合わせることで、各段階で自動テストが行われ、コードリリースの最適化が図れます。
ここで、継続的開発と継続的デリバリーの違いについて説明します。後者はコードが自動で複数の開発段階を通過しますが、各変更は手動による承認が必要です。
継続的デプロイメントは自動コードテストとリリースを対象とし、自動でスケール、ロールバック要件も監視します。一方、継続的デリバリーは本番と似たステージングエリアを使うため、時間差が生じます。
この問題は継続的デプロイメントで解消され、ステージングエリアが不要なため時間差はありません。なお、継続的開発ではステージングエリアで自動テストが行われます。
CDはCI/CD、すなわち継続的インテグレーション/継続的デリバリーのパイプラインの重要な要素で、開発段階を自動化・統合することを目指します。
CIは共通のリポジトリを用いて、機能追加やコード変更を継続的に記述、テスト、統合します。アプリを複数の部分に分けると効果的です。
前述の通り、CDは開発段階を分割し自動化することを意味し、CIに続いて生まれました。両者を連携させることで、人為的な介入やエラーを大幅に減らす自動化が実現します。
通常、このパイプラインでは単体テスト、コードのコンパイル、バイナリ作成、コード解析などのツールが使用され、DevOpsを採用する場合、CD/CIは開発者とIT運用チームを結ぶ基盤となります。
CDはDevOpsの重要な要素であり、両者は密接に関連しています。DevOpsにおける継続的デリバリーは、質の高いアプリの作成と展開を継続的に実現する現代的な手法です。
DevOpsは開発と運用を統合し、複雑なエンタープライズアプリの作成を効率的に進められるようにします。CDはその中でも有効な手法の一つです。
DevOpsの目標は、各コードごとに開発ライフサイクルを改善し、コード更新やバージョン管理を初めからスムーズにすることです。
DevOpsでのCDパイプラインは、分断されたソフトウェア部品を統合し、共通リポジトリでコードを共有できる環境を整えます。複雑なコードを小さく分割することで衝突のリスクを軽減します。
DevOpsは完璧なコード実行を目指し、CDは各段階でのコードテストを可能にすることでこれを実現します。コードは常にテストや更新に利用可能です。
CDパイプラインの実装は貴社のニーズに合わせ、コンピューティング環境、使用ツール、規制要件、開発目標に応じた機能を提供します。
そのため効果測定の統一プロトコルはありませんが、いくつかの指標はCDパイプラインの重要性を評価する上で有用です。以下の指標が例となります。
リードタイムは、要件把握から実際に機能するまでの時間差を示し、増分ロード時間を詳しく見ることで成果物を分割するタイミングが把握しやすくなります。
サイクルタイムは、プロセスが完遂するまでの時間を測る指標で、CDの各イベントの処理時間を反映します。単一サイクルや全体の時間を把握することは高い効率性のために重要です。
次に重要なのはMTTR(平均復旧時間)で、失敗したアップデート後にシステムが元の動作状態に戻るまでの時間を示します。
不具合解決時間は、不具合が発生してから解決までにかかった総時間を示します。例えば、2月に発見され、8月に解決された場合、その解決時間は6ヶ月となります。
最後にテスト合格率を追跡することを推奨します。これにより、どれだけの質の高い成果物が生成されているか、自動テストの効果やコード変更の頻度も把握でき、テスト方法の改善に役立ちます。
CDは開発プロセス全体を効率化し迅速化しますが、効果的な実装が前提です。以下の方法を参考にしてみてください。
ステークホルダーの期待に沿わない開発は、何度も手戻りや再確認が発生します。初めからそうならないよう、SLOを設定しその基準に沿って進めることを推奨します。
SLOは、ソフトウェアが持つべき特性の集合を示し、これが定義されれば開発の目標が明確になります。
例えば、SLOがIoTアプリは即時のデータのみ取得すると定めれば、その通りのコーディングが行われ、開発上の抜けや混乱を防げます。
SLOの設定だけでなく、その効果評価も必要です。品質ゲートを活用することで、各開発段階の基準を定めやすくなります。
前段階の基準が満たされた場合にのみ次へ進む仕組みは、各段階の品質を担保し全体のプロセス管理を容易にします。
すべてのコードテスト、設定確認、各段階の品質チェックなど、DevOpsでは繰り返し作業が発生します。これらは自動化することで時間と労力を節約し、精度を高められます。
複雑であることは必ずしも生産性が高いとは限りません。むしろ、複雑さは進行を遅らせるため、CDパイプラインはできるだけシンプルに保つことが推奨されます。必要なツールや自動化、SLOに基づくオーケストレーションを活用してください。
また、全体のCDパイプライン管理は集中管理型ダッシュボードを利用すると、プロセスがシンプルで扱いやすくなります。
クラウドネイティブなCDパイプラインでは、オブザーバビリティが重要です。これにより、SLOに適合した最適なクラウドアプリが開発可能になります。
オブザーバビリティが収集するテレメトリーデータは、各段階の品質維持に役立ち、コードレベルの情報把握でエラー修正やトラブルシュートが容易になります。
監視と組み合わせることで、アプリの性能や開発品質の可視性が向上し、継続的監視はアップデート統合を迅速化して性能低下を改善します。
前述の通り、CDは自動化された手法であり、様々なツールが必要です。ここでは主要なCDツールを簡潔に紹介します。
これらのツールは継続的パイプラインと一体で提供され、さらにコンテナを利用して開発の一貫性を保ちます。貴社の開発目標に合わせ、適切なツールを選定してください。
簡単で迅速な開発は最良の手法です。継続的デリバリーは、常にエラーのないコード提供を実現し、DevOpsを大いに支援します。CD/CIパイプラインの重要な要素として、コードの可読性向上にも寄与します。
最新情報を購読