目次
はじめに
いつもご愛読いただきありがとうございます。この記事では「今どきのアジャイル開発とは」について特集したいと思います。1.アジャイル開発とは何か、2.アジャイル開発のメリット・デメリット、3.ウォーターフォール型開発とアジャイル開発の違い、4.アジャイル開発とテレワーク、5.アジャイル開発の今後の課題とはについて考察をしていきます。最後までお読みいただければ幸いです。何卒よろしくお願い申し上げます。
1.アジャイル開発とは何か
・アジャイル開発とは、開発したいソフトウェアごとに、機能単位の小さいサイクルごとに『計画→設計→実装→テスト』の4つのフェーズを繰り返しながら開発していくイテレーション (反復) 手法のことです。ここで言うイテレーションとは、一連の開発工程を短期間で繰り返すサイクルのことを指します。
・アジャイルソフトウェア宣言
アジャイル開発という概念は2001年に発表された「アジャイルソフトウェア開発宣言(Manifesto for Agile Software Development)」に記載されています。この中に、アジャイル開発を実践する上での基本的な価値観である「4つの価値」が示されています。文章から抜粋すると下記のとおりです。重要な部分については太字で記載させていただいております。
・プロセスやツールよりも個人と対話を
・包括的なドキュメントよりも動くソフトウェアを
・契約交渉よりも顧客との協調を
・計画に従うことよりも変化への対応を
こちらとセットになっている「アジャイル宣言の背後にある原則」を読むと、さらに理解が深まります。ここでは割愛させていただきます。
参考出典:
2.アジャイル開発のメリット・デメリット

この章では、アジャイル開発のメリット・デメリットについて考察していきたいと思います。
2.1メリット
・ユーザーの意見を開発に反映させやすい
アジャイル開発では短いスパン(1~2週間)での成果物をリリースして、ユーザーの意見を聞くことができます。こうしてユーザーから得たフィードバックについて、次のイテレーションに反映させていくことができます。つまり、ユーザーの要望や仕様変更をタスクとして追加対応していくことできるのです。そして、この過程を繰り返すことによって、ユーザー満足度の高い製品を作り上げることができるのです
・開発途中の仕様変更に強い
→プロジェクトを短期間のサイクルに分けるため、各サイクル終了時にユーザーからの意見や要望を聞き、フィードバックすることができます。そしてその内容を次のイテレーションに反映させることで対応可能です。すなわち、次のインテレーションで柔軟に仕様変更や要望の追加をすることができます。
・トラブルが起こったときに対応しやすい
→アジャイル開発では、1週間~2週間という短いサイクルで開発を行っていきます。この短いサイクルごとにユーザーの点検が入ります。ですので、ユーザーからのフィードバックをこまめに得ることができます。これにより、複数リスクや不具合を早期に見つけることができます。ここで見つけたリスクに早めに対応できるのがアジャイル開発のメリットと言えます。こういった不具合やリスクに対処することで、その発生自体を防ぐことが可能になります。
・開発スピードが速い
→アジャイル開発は『計画→設計→実装→テスト』といった開発工程を、機能単位ごとの小さいサイクルで繰り返すのが最大の特徴です。つまり、小さいサイクルに分けて重要な機能から開発していくため、必要な部分だけを先にリリースすることが可能です。つまり、その分開発スピードが速く行えるのが特徴です。そして短いサイクルごとに開発をしていくため、手戻りが少なく、課題の発見も早期に行えます。
・後戻りの工程数を抑えやすい
→アジャイル開発では、短いサイクルで計画・設計・実装・テストを繰り返します。そこで問題が起きても1つのイテレーション内で解決できるので、後戻りの工程数が少なくて済むのが特徴です。後述しますが、ここがウォーターフォール型と大きく違います。
2.2 デメリット
・開発の方向性がブレやすい
→アジャイル開発では、ユーザーからのフィードバックを開発に取り込めます。しかし、度重なる修正や仕様変更をしてしまうと、仕様が一貫性や整合性が整っていないものになってしまう恐れがあります。つまり、開発の方向性がぶれやすいという事態を招いてしまうこともあり得ます。そうなった場合、高コストを招いたり、納期が守れないなどのピンチに陥る場合もあります。これを防ぐためにはプロジェクトの適切な管理が不可欠になってきます。
・スケジュールや進捗が分かりにくい
→アジャイル開発では、最初に詳細な計画を立てないで、短いサイクルごとに進行していきます。そのため、スケジュールや進捗具合を把握するのが難しくなることもあります。また、チームごとに小さな単位で開発していくため全体のコントロールができず、結果的に納期に間に合わなくなることもあります。それを防ぐために、定期的なミーティングが必要になってきます。
・スケジュール・工程管理が難しい
短いサイクルでユーザーからのフィードバックを開発に取り込んでいくアジャイル開発では、クライアントからの要望に応じすぎて、その場しのぎのプロジェクトになってしまう可能性があります。この問題を解決するためには、優秀なプロジェクトマネージャーを配置し、チームで情報伝達ができる開発ツール(プロジェクト管理ツール、ドキュメント管理ツールなど)を活用することが不可欠です。
参考出典:
3.ウォーターフォール型開発とアジャイル開発の違い

・ウォーターフォール型開発とは
→ウォーターフォール型開発では、システム開発に存在している多くの工程(プロセス)を「上から順番に行う」というトップダウン形式で進められる特徴があります。ウォーターフォール開発ではひとつの開発工程を100%完了させてから次の工程に移る手法です。そのため「前の工程には戻らないこと」を前提としているので、開発後の手戻りは無いものと想定されています。ウォーターフォール型開発では、①要件定義、②外部設計、③内部設計、④実装、⑤単体テスト、⑥統合テスト、⑦運用テスト、⑧リリースという、すべての工程が終了してからシステムがリリースされます。
この8つの工程が、おのおの独立しているため、工程ごとの進捗管理や品質管理がしやすくなっています。ウォーターフォール型開発は手戻りを前提としていないので、①要件定義、②外部設計、③内部設計、④実装という、いわゆる上流工程において開発システムの全体像をしっかりと定義・設計していくのが重要です。また、アジャイル開発と違い、長期的な開発期間が必要なことや、手戻りを前提としていないので計画や仕様の変更が難しいことなどがデメリットとして挙げられます。
参考出典:
4.アジャイル開発とテレワーク

新型コロナウィルスや昨今増えてきた天災などの影響で、企業にビジネスアジリティが求められるようになりました。このビジネスアジリティとは、IT技術などにより急速に変化しているビジネス環境で、企業が自らの組織を多種多様な変化に適応させる能力のことです。その代表的な例が、新型コロナウィルス禍におけるテレワークの導入です。コミュニケーション重視のアジャイル開発でも、毎朝の朝礼にオンラインで参加する、もしくは2種類の開発ツール(プロジェクト管理ツール、ドキュメント管理ツール)を駆使すれば、適切なコミュニケーションを取ることができます。これによりプロジェクトの個々人が自宅でもアジャイル開発に携わることができます。
参考出典:
5.アジャイル開発の今後の課題とは

・ノーコード/ローコードとアジャイル開発
→現在、システム開発において、アジャイル開発とDevOps(デブオプス)が重要視されています。この2つの間には、非常に相性の良い関係性が存在しています。ちなみに、DevOpsとは開発(Development)と運用(Operations)を連携させ、ソフトウェアの開発担当者と運用担当者が協力してスムーズに開発、運用をすすめるやり方です。DevOpsの良いところは、開発工程に運用スタッフが関わり、また運用工程に開発スタッフがかかわるという点です。これにより品質チェックをサイクル事にこまめに行えたり、システムの不具合を柔軟に修正できるようになります。このようにシステム開発が正確に高速化するので、ソフトウェアのリリースサイクルを迅速化・効率化できます。また、アジャイル開発とDevOpsはローコードとも相性が良いので、高速なシステム開発を支援する基盤として活用できます。ですので、最近ではこの3つを掛け合わせたハイブリット開発がよく取り入れられています。
・生成AIとアジャイル開発
→生成AI開発にアジャイル開発手法を取り入れるが最近のトレンドになっています。
ここで言う生成AI開発の目的とは、特定の問題を解決したり、業務効率を向上させることです。そのため、生成AI開発においては、人工知能を活用して、①データ収集、②データ前処理、③モデルの選定、④トレーニング、⑤評価、⑥運用といった一連の工程を設定して開発を行っていきます。こういった生成AI開発でも、リリース後に不具合が生じることがあります。ですが、アジャイル開発手法を用いているため、スピーディーに対応可能です。このように生成AI開発にアジャイル開発手法を用いると、短期間かつ低コストで開発することが可能になります。
この生成AI開発×アジャイル開発手法ではスクラムフレームワークを使用して開発がすすめられます。スクラムフレームワークでは短期間の開発サイクル(スプリント)を繰り返しながら、ユーザーからのフィードバックを反映する開発形式をとっていきます。スクラムの役割定義では、プロダクトオーナー、スクラムマスター、開発チームに分かれて開発を進めていきます。それぞれの役割が連携されることで、効率的な開発を進めていくことができます。生成AI開発では出力される回答を正確なものに導くために、定期的に最新のデータをインプットさせることが重要です。つまり、課題の修正や、新データをインプットして精度をあげてくことが求められます。
・アジャイル開発の大規模化
→一般的に、大規模開発向けの手法としては、正確な計画を共有できるウォーターフォール型開発が挙げられます。しかしながら、アジャイル開発でも下記の4つのフレームワークのいずれかを用いることで、大規模なシステム開発を行うことができます。そのフレームワークとは、①Nexus Framework、②SAFe、③LeSS、④DADの4つです。それでは、このような「アジャイル開発の大規模化」の課題とは何でしょうか。
①節約志向のビジネスアジリティの維持
→企業がビジネス環境を取り巻く情勢の劇的な変化を捉え、柔軟かつ機敏にリスクに対応する力をビジネスアジリティと呼びます。ドキュメントを書くのに際して、無駄やムラが無いように、ドキュメントを節約志向で開発を進めていくにはどうしたらいいのかを常に考える必要があります。
②最適なチーム編成にしてチーム間で効率的にコミュニケーションをとること
システム開発では、小規模、大規模を問わずに情報共有が1番大切になっています。だからといって、毎朝ミーティングを開くのは開発規模が大きくなればなるほど、非効率になると言えるでしょう。効率的にコミュニケーションをとるために、開発ツールを導入する必要があります。この開発ツールには、プロジェクト管理ツールとドキュメント管理ツールがあります。これらを駆使して効率的にコミュニケーションをとることが重要だと言えます。
③状況に適応するためにフレームワークを組み合わせる
例えばDAD(ディシプリンド・アジャイル・デリバリー / Disciplined Agile Delivery)とは、状況適応型のアジャイル・フレームワークのことです。つまり、業界やチームの状況に応じて、スクラム、カンバン、リーンキャンバスなどの手法と組み合わせることができるフレームワークになっています。noteによれば、DADは、契約形態や組織構造に応じたフレームワークのカスタマイズが可能なので、親会社はリーンキャンバス、一次下請けはスクラム、二次下請けはカンバンという風に手法を組み合わせて開発をすることが可能になります。
参考出典:
まとめ

この記事では、1.アジャイル開発とは、2.アジャイル開発のメリット・デメリット、3.ウォーターフォール型開発とアジャイル開発の違い、4,アジャイル開発とテレワーク、5.アジャイル開発の今後の課題とは、について考察してきました。もちろんアジャイルにも開発のメリット・デメリットがあります。また、ローコード/ノーコード、生成AIなどの先端技術とアジャイル開発手法がハイブリットな開発方法として普及してきています。これに対応するには、ご自身のキャリアに合わせて新技術を学習していくことが大事だと言えるでしょう。最後までお読みいただきありがとうございました。