時代の変化とともに、プロダクト開発の現場では様々な開発手法が誕生してきました。
特に2000年代のインターネットやスマートフォンの普及から、私たちの周りにある製品やサービスの提供スピードは、どんどん速くなっています。
これは、システム開発にも当てはまり、開発手法も従来のウォーターフォール開発から、スピード感重視のアジャイル開発へとシフトしています。
そこで今回は、近年主流となっている「アジャイル開発」について、基本的な知識から、誕生の背景、ウォーターフォール開発との違いや、今後の展望まで解説していきます。
どんな開発手法があるのか知りたい方や、開発にあたってアジャイル開発を検討している方に読んでいただきたい記事になっています!ぜひ最後までご覧ください。
▼ 関連記事 ▼
アジャイルとは英単語のagileを指し、「素早い」や「機敏な」といった意味があります。
これを踏まえてアジャイル開発とは、システムが機能する最小単位で「計画 → 設計 → 実装 → テスト」のサイクル繰り返していく開発手法です。最終的に、開発した各機能を集合させて、1つのシステムを形成します。
アジャイル開発では、「プロジェクトには変化がつきもの」という前提のもと、フィードバックを取り入れながら、要件や優先順位を変更しながら開発を進めるという、「柔軟性」や「迅速な反応性」が重視されます。
このアジャイルのアプローチ方法は、開発だけでなく、ビジネスやDXの領域でも注目されており、プロダクトの価値を最大化する手法として、積極的に取り入れられています。
アジャイル開発の手法と言ってもその手法は様々で、「スクラム」「エクストリーム・プログラミング(Extreme Programming)」「ユーザー機能駆動開発(Feature Driven Development)」などがあります。その中でも、広く採用されているのがスクラムです。
スクラムは、開発作業を短い期間のスプリントと呼ばれるイテレーション(ソフトウェア開発における作業単位)に分割し、それぞれのスプリントで特定の目標を達成することに焦点を当てます。スクラムチームは、定期的なスプリント会議やデイリースクラムなどのイベントを通じて進捗を確認し、柔軟にプロジェクトを調整します。
アジャイル開発の考え方は、アメリカの17名の技術者やプログラマーが効率的なシステム開発手法を議論した結果、2001年に誕生しました。そして、アジャイル開発で何を重視していくのか、「アジャイルソフトウェア開発宣言」が宣言されました。
【アジャイルソフトウェア開発宣言】
私たちは、ソフトウェア開発の実践あるいは実践を手助けをする活動を通じて、よりよい開発方法を見つけだそうとしている。この活動を通して、私たちは以下の価値に至った。
プロセスやツールよりも個人と対話を、
包括的なドキュメントよりも動くソフトウェアを、
契約交渉よりも顧客との協調を、
計画に従うことよりも変化への対応を、
価値とする。すなわち、左記のことがらに価値があることを認めながらも、私たちは右記のことがらにより価値をおく。
(引用元:アジャイルソフトウェア開発宣言[1])
この宣言内容を、12要素に分解し、より具体的に説明したものが「アジャイル宣言の背後にある原則」です。
【アジャイル宣言の背後にある原則】
私たちは以下の原則に従う:
顧客満足を最優先し、価値のあるソフトウェアを早く継続的に提供します。
要求の変更はたとえ開発の後期であっても歓迎します。変化を味方につけることによって、お客様の競争力を引き上げます。
動くソフトウェアを、2-3週間から2-3ヶ月というできるだけ短い時間間隔でリリースします。
ビジネス側の人と開発者は、プロジェクトを通して日々一緒に働かなければなりません。
意欲に満ちた人々を集めてプロジェクトを構成します。環境と支援を与え仕事が無事終わるまで彼らを信頼します。
情報を伝えるもっとも効率的で効果的な方法はフェイス・トゥ・フェイスで話をすることです。
動くソフトウェアこそが進捗の最も重要な尺度です。
アジャイル・プロセスは持続可能な開発を促進します。一定のペースを継続的に維持できるようにしなければなりません。
技術的卓越性と優れた設計に対する不断の注意が機敏さを高めます。
シンプルさ(ムダなく作れる量を最大限にすること)が本質です。
最良のアーキテクチャ・要求・設計は、自己組織的なチームから生み出されます。
チームがもっと効率を高めることができるかを定期的に振り返り、それに基づいて自分たちのやり方を最適に調整します。
(引用元:アジャイル宣言の背後にある原則[2])
これらの宣言や原則からアジャイル開発は、クライアントのニーズを最優先に置きながら、より良いプロダクトにするために、効率的かつ迅速にシンプルに開発に取り組む開発であることが汲み取れます。
アジャイル開発のメリットとしては、大きく以下のようなものが挙げられます。
・サービス提供までの時間短縮を実現
機能単位ごとに開発し、優先順位の高いものからテスト・リリースをしていくため、開発にかかる時間を大幅に短縮することができます。そのため、従来の開発手法と比較するとサービス提供までの時間を短縮することができます。
・仕様変更など、柔軟な対応が可能
アジャイル開発は仕様を綿密に計画するのではなく、開発を進めながら、クライアントやユーザーから得たフィードバックを反映し、仕様の変更や追加に柔軟に対応していきます。そのため、クライアントやユーザーといったステークホルダーのニーズを最大限に反映した開発が可能で、顧客満足度向上にも繋げることができます。
・後戻りの工数を抑えやすい
最初に仕様をしっかりと決めて、決められた順番で進める開発手法では、問題が見つかり後戻りして修正や変更作業を行う場合に大きな工数がかかるため、コストや時間を考えると、仕様の変更や追加が難しいとされています。一方アジャイル開発では、機能単位の開発で柔軟に対応できるため、後戻りの工数を抑え、リスクを軽減することができます。
従来主流であったウォーターフォール開発は、ソフトウェア開発の伝統的な手法で、要件定義 → 基本設計 → 詳細設計 → 開発 → テスト → リリースという開発プロセスを順番通りに進める手法です。工程を上から下へと順に行う様子を「滝」に見立てて、「ウォーターフォール」という名が付きました。
ウォーターフォール開発は、予算やチームメンバーのアサイン計画が立てやすいといった計画性の高さがあり、一つ一つの工程をしっかりと完了させていくため、高品質な開発が可能というメリットがあります。一方で、開発工程に余裕を持たせているケースも多く、開発に多くの時間やコストがかかってしまう点がデメリットとしてあります。
このウォーターフォール開発とアジャイル開発の大きな違いは、「開発途中での仕様変更が容易か否か」という点です。
ウォーターフォール開発は、各工程を一つ一つ完了して開発を進めるため、仕様変更のハードルが上がってしまいます。一方でアジャイル開発は、機能する最小単位での実装とテストを繰り返すため、修正や仕様変更にも柔軟に対応することができます。
ここまで、アジャイル開発のメリットや従来の開発手法であるウォーターフォール開発との違いについて解説してきました。では、アジャイル開発はどのようなプロジェクトに向いているのでしょうか?
・要件が漠然としており、仕様変更や追加が予想される
順を追って進めるのではなく、開発を進めながら得たフィードバックを反映して改善を繰り返すのがアジャイル開発です。そのため、開発開始時に仕様を固めきれず、変更や追加が予想されるプロジェクこそ、アジャイル開発のメリットを活かすことがでると言えます。
・継続的なリリース
アジャイル開発は、サービスをリリースして終わりではなく、継続的に改善や新機能の実装を繰り返すプロジェクトに向いていると言われています。
・継続的かつ積極的なプロセスの改善
最小単位の開発がそれぞれ終わるたびに、振り返りを実施します。良い点や改善点を洗い出し、次回の開発の進め方を検討することで、開発プロセスをより良いものへとアップデートすることが可能です。そのため、最初からどのように開発を進めれば上手くいくか正解のあるプロジェクトよりも、まだ正解が定かではないプロジェクトの方がアジャイル開発が向いています。
今や開発手法の主流となっているアジャイル開発ですが、解決すべき課題が残されています。最後に、アジャイル開発の現状の課題と今後の展望をまとめていきます。
【現状の課題】
・文化の変革と教育
従来の開発手法とは異なり、組織全体が柔軟に対応していく姿勢が求められます。また、特定の機能や役割に固執せず、複数の異なる機能や役割を持つメンバーが協力して共同作業をしていくためのスキルセットと、その他適切な教育が必要になります。
・コミュニケーション
クライアントと開発チームのコミュニケーションの状況次第で、ニーズが把握しづらかったり、プロジェクトが停滞してしまう可能性があります。特にアジャイル開発では、フィードバックを反映した、仕様の変更や追加が頻繁に行われる可能性が高いため、いかに適切なコミュニケーションを取れるかが重要になります。
・スプリントの適切な設定
スプリントとは、アジャイル開発の手法の1つであるスクラムにおける工程の単位を指します。このスプリントの期間が短ければ、進捗が間に合わず、品質低下に繋がる可能性があります。一方で、スプリントを長く設定すると、スピードの感のある開発ができなくなってしまいます。そのため、開発チームは仕様は固めずとも明確な目標を設定し、スプリントの期間や範囲を適切に設定していく必要があります。
・一定の技術力
短期間の開発を繰り返すため、コーディングやインテグレーション、テスト、品質管理などにおける技術力が要求されます。専門知識だけでなく、適切なツール活用や技術に関する情報共有を行なっていくことで、開発チーム全体の技術力を底上げし、プロダクトの品質を保てるよう努めていく必要があります。
【今後の展望】
・AIと機会学習の活用
アジャイル開発に、AIや機械学習の技術を活用した自動化や予測分析を導入することで、開発プロセスをより効率的にし、意思決定をサポートすることができます。
・デザイン思考を取り入れる
ユーザー体験の重要性が高まる中、アジャイル開発においてもデザイン思考を取り入れる動きが見られています。ユーザー中心のアプローチによって、より価値のある製品やサービスを提供することが可能になります。
・IoTとの統合
IoT(Internet of things/モノのインターネット)の普及により、IoTデバイスやセンサーからのデータを活用し、製品やサービスの改善に役立てることができます。
・エンタープライズアジャイルの発展
アジャイル開発は元々は小規模なプロジェクトやスタートアップ向けとされていましたが、近年では大規模なプロジェクトや組織にも適用されるようになってきました。今後はエンタープライズでのアジャイルの実践がさらに進むと予想されます。
ここまで、「アジャイル開発」について、基本的な知識から、誕生の背景、ウォーターフォール開発との違いや、今後の展望まで解説してきました。
時代の変化とともに、開発手法の主流はウォーターフォール開発からアジャイル開発へとシフトしてきました。
小さい単位での開発を繰り返し、優先順位の高いものからテスト・リリースしていくアジャイル開発は、サービス提供までの時間を短縮し、仕様変更にも柔軟な対応が可能で、その上コストを抑えた開発が実現できます。
JIITAKでは、コミュニケーションに重点を置き、過去の豊富な開発経験をもとに、お客様とのコラボレーションでスピード感を持って開発を進めていきます。形にしたいアイデアのある方や開発検討中の方は、ぜひJIITAKまでご相談ください!