1.アジャイル開発とは?
アジャイル開発とは、ソフトウェア開発の一つで、スプリントと呼ばれる短期的な反復開発サイクル(1週間~1ヶ月)を繰り返し進めていく手法です。短期間でお客さまを含めたシステムレビューを行うことで、実装された機能ごとの良し悪しをシステム上で確認することが可能です。
アジャイル開発は要件変更に強く、柔軟で迅速な開発が可能である点が特徴であり、不確実性が潜在するシステムや、エンドユーザーの需要が判断しにくいシステム開発に適しており、ビジネスの変革が激しい現代におけるスタンダードな開発となりつつあります。

図1:アジャイル開発サイクル
アジャイル開発の代表的な手法として、チームを組んで役割やタスクを分散しつつ、コミュニケーションを取りながら行うスクラム(Scrum)開発があります。
シンプルなフレームワークであり多くの開発現場で採用されているため、以降の説明ではScrum開発のイベントを例に紹介します。

図2:Scrum開発
以下にScrum開発における基本的な進め方を示します。
- スプリントプランニング
スプリントの最初に開発チーム内でどのタスクに対応するかを決定するイベントです。プロダクトオーナーという開発全体の統括者を中心に、チームで作成した「プロダクトバックログ」と呼ばれる全体の要件リストから、今回のスプリントの開発対象の要件リストである「スプリントバックログ」を作成します。 - スプリントの開始
1週間~4週間程度の期間で開発を実施します。開発メンバーは「デイリースクラム」と呼ばれる毎日のミーティングで進捗を確認しながら開発を進めていきます。 - スプリントレビュー
開発した機能についてのレビューをスプリント単位で行います。このレビューでは、お客さまに実際のアプリケーションを確認いただき、フィードバックを共有します。 - レトロスペクティブ
レトロスペクティブとは、主に開発チームで実施する振り返りとなります。
スプリントの開発の評価を行い、発生した課題や問題を挙げ、次のスプリントを行う際には同じ問題が起こらないように対策を講じます。
2.クラウド活用によるスモールスタートな開発
クラウドとは、インターネット上にシステム基盤を構築したものの総称であり、物理的なサーバーを拠点に設置するオンプレミス環境と比べると以下のような特徴があります。
- サーバーやネットワーク機器調達の時間的コストが少ない
- さまざまなサービスをハードウェアの制約なしに扱えるため、ローコストな機能検証が可能
- 本番環境と同様の環境を複製しやすく、クローズドなテストが実施しやすい
- リソースをスケーラブルに変更することが可能であり、需要に合わせた柔軟な対応が可能
- ソフトウェア開発のスピードと品質を向上させるDevOps(※1)環境を整えやすい
クラウドはアジャイル開発との親和性が高いことでも知られており、インフラの管理・費用コストを最小にしつつ、段階的に最適なアーキテクチャを試しながら生み出せることが利点です。
今回はお客さまとして初の試みである、マーケティングデータを利活用するシステムを、Google Cloud (※2)サービスで構築するユースケースを例に説明します。
スプリントプランニングにて、お客さまの要件をヒアリングし、システムをシンプルな要件に直すと
- 1.データを蓄積し分析する機能を備える
- 2.分析した結果を画面でチェックできる
の二つで収まることが確認できたとします。
アジャイル開発ではエンドユーザーへの価値提供が適切に行えるか?に着目するため、「データ分析が業務で有効であるのか?」「期待通りの出力となるのか?」等の有効性の確認を主軸に、最短ルートでの構築を目指します。結果として、図3のようなシステムを構築しました。

図3:マーケティングデータを利活用するシステム例(1)
図3の構成は、「データをためるストレージ」「データを変換してシステムで使いやすくする機能」「データを確認する機能」の三つでシンプルに構成されていますが、スプリントレビューにてお客さまが有効性を確認するのに必要十分な機能を有していました。一方で、マーケティングデータに名前や連絡先などの個人情報が含まれてしまう懸念がコメントされたため、次のスプリントでは図4のように、データにガバナンスを効かせる機能を追加しました。

図4:マーケティングデータを利活用するシステム例(2)
この例のように、はじめから全ての要件・環境の完成形を定義するのではなく、価値を提供できる最小の環境から始め、段階的に開発します。これによりビジネスドメインや実行環境の変化に合わせた改良をしながら、動き続けるシステムを提供できます。
実際の開発では、より多くのステークホルダーや他システム連携など、さまざまな要因をもとに意思決定・改良する必要がありますが、手戻りのリスクを最小限とした、クラウドの特性を有効活用できる一つの適切な方法であると言えるでしょう。
クラウドは非常に便利なサービスを数多く有していますが、それ故に使われていない機能を含め、肥大化したシステム基盤となってしまい、膨大なコストを投じているのにもかかわらず活用されていないケースも珍しくありません。お客さまのニーズに合わせた進め方を考え、提供する価値に沿ったサービスを効率よく活用していくことが重要です。
ソフトウェア開発(Development)と運用(Operations)を連携させ、より迅速で安定したサービス提供を目指す手法・文化
Google社が提供しているクラウドコンピューティングサービス
3.フィードバックを得るために重要な体制作り
フィードバックを得ながら開発サイクルを回すためには、システムを段階的に構築および提案する技術的ノウハウに加え、お客さまへの理解促進、適切な情報連携が必要不可欠です。
アジャイル開発においては、エンドユーザーへの直接的な価値提供につながらないフィードバックの収集が困難なケースが存在します。例えばシステムのアクセス機能を集約する機能や、アクセス過多時のサーバーの増強などのシステム基盤に関する機能です。
アジャイル開発では、エンドユーザーへの提供価値に目が行きがちで運用上の課題が後回しになるケースも珍しくありません。しかしこれらをないがしろにするとリリース後のトラブルにつながる恐れがあります。運用上の課題についても提言し、お客さまとともに作り上げていく体制が重要です。
4.まとめ
今回は、クラウドを活用したアジャイル開発におけるポイントを紹介しました。
NTTデータでは、お客さまのビジネス成功のための最適な開発プロセスを検討・提案するケイパビリティを有しています。ビジネス創出や実開発での進め方でお困りの方はぜひお気軽にご相談ください。