新型コロナウイルスによる自粛生活は、企業活動のやり方を大きく変えました。ネットショッピング・宅配サービスの拡大により、リアル店舗での売り上げからECサイトでの売り上げがシフトしてきています。
野村総合研究所(NRI)が発表した「ITナビゲーター2021年版」によると、「BtoC EC(消費者向けEC)」の2026年度の市場規模は29兆4000億円、オムニチャネルコマース市場は80兆9000億円市場に拡大すると予測されています。
なんと、コロナ禍となった202年度では、昨年対比約1.5倍と急速に拡大している状況です。
コロナ禍が続く中、事業者が新しくECサイトを立ち上げるにあたり、短時間での開発・リリースを要求するのは当然の流れです。
ECサイトの開発を企画している担当者が、「どのくらいの期間で開発は可能なのか、どの様に開発を進めるのか、詳しく知りたい。」と意見を求められた時、エンジニアはそれに答えなくてはなりません。
システム開発の代表的な手法としては、古くから“ウォーターフォール型”が利用されてきましたが、Salesforceなどのクラウドサービスの開発にて用いられている“アジェイル型”も現在では広く認知され、アジャイル型での開発が増えるようになりました。Webアプリケーションの開発を進める上で、開発の進め方や、開発規模及び方針によってエンジニアの携わり方も変わってきますが、なにより開発手法によって開発の流れが大きく変わります。
ここでは、それぞれの開発手法のメリット・デメリットをお伝えしていきます。
Contents
アプリケーション開発手法
米ガートナーによると、アプリケーション開発の手法は、大きく3つに分類されます。
- ウォーターフォール型
- 反復型
- アジャイル型
ウォーターフォール型は、開発工程が事前に明確に決定されており、固定的な要件を扱う従来型の開発手法です。反復型は、段階的ウォーターフォール型を基に、各段階の後にフィードバックを返す明示的な機会を追加する手法で、要件の不備を早い段階で検出して解決を図る手法です。
そして、アジャイル型は、「機敏な」「素早い」というAgileの意味の通り、実装したい機能ごとに開発工程を何度も繰り返し行う手法です。
ガートナーの調査によると、ウォーターフォール型での開発が43%で最も多く、アジャイル型は17%、反復型が16%という結果になっており、従来からのウォーターフォール型がまだまだ主流を占めていることがわかります。
一方で、2000人以上の大企業ではアジャイル型を「採用中」の割合が40%弱あり、「未採用:採用予定あり」の割合も30%を含めると、70%程度の大企業が、アジャイル型を採用中あるいは採用予定の段階にあることから、大企業は「ウォーターフォール型」から「アジャイル型」に移行の流れにあることもわかります。
では、具体的にウォーターフォール型開発とアジェイル型開発について、確認していきます。
ウォーターフォール型開発の流れとメリット・デメリット
ウォーターフォール型開発とは、開発工程が事前に決定されており、その開発工程に沿って作業を進めていきます。工程ごとに確認ポイントが設けられ、ユーザ企業との間でのレビューを行っていきます。
このウォーターフォール型開発の最大の特徴は、ひとつの開発工程を経たら、その工程には二度と戻ることはないことです。上流から下流へ水が流れるように順を追って作業をする手法で、下流の水が上流に戻ることはないのと同じように、後戻りができない開発手法でもあります。
ウォーターフォール型開発の工程
ウォーターフォール型開発の各工程の設定は、概ね以下の様に定義されます。一度工程が進むと、前段階の工程に戻ることはありません。
- 要件定義
- 基本設計
- 詳細設計
- 開発(プログラミング作業)
- テスト
- 運用
ウォーターフォール型開発のメリットとデメリット
メリット
開発工程が明確なので、スケジュールが立てやすく、進捗状況も確認しやすいことが利点です。
また、各工程が終了するごとに成果物となるドキュメントを作成し、ユーザ企業との確認を行いますので情報を管理しやすくなります。ウォーターフォール型開発は極めて計画的な開発になるので、予算の見積もり、エンジニアの配置など、事前の準備や計画を明確かつスムーズに進めていくことが可能です。
デメリット
後戻りのできない開発手法であるため、あとで修正や仕様変更が必要になった場合、不要な時間がかかってしまいます。
また、基本的に後戻りできない手法だからこそ、各工程における作業には常に漏れのない完璧さが求められます。作業に漏れが あると、全工程に影響を及ぼしてしまうリスクがあります。プログラム開発が終わりテスト段階で初めて、システムの動きがわかるようになります。途中の段階で完成形が目に見える形で出てこないというデメリットもあります。
アジャイル型手法のメリット・デメリット
アジャイル型開発では、ウォーターフォール開発のように要件定義を細かく行わず、大枠だけを決めて開発を開始します。「修正や変更は必要に応じて行う」、という前提で開発を進めるため、リリース計画も非常に流動的になるのが特徴です。
アジャイル型開発の工程
大まかなリリース計画を立てたら、実装したい機能ごとに「インテレーション」と呼ばれる作業を繰り返し行います。インテレーションという言葉は、「繰り返し・反復」という意味があり、「企画→設計→プログラミング→テスト」などの工程を機能(小単位)ごとに何度も繰り返して行うのです。
それぞれの機能ごとに「インテレーションA」「インテレーションB」「インテレーションC」というように、分けて開発を進め、そのたびにリリースを行い、ユーザ企業との確認をおこなっていくやり方です。
アジャイル型開発のメリットとデメリット
メリット
アジャイル型開発は小単位ごとの開発なので、開発途中およびリリース後に変更・修正の必要性が発生しても、少ない工程で短期間に作業を終えることでき、コストも抑えられます。
また、小単位ごとにその都度リリースを行うので、実際にユーザーが使用した際の評価や意見を取り入れることができ、柔軟かつ素早くフィードバックを行うことが可能です。
デメリット
要件定義フェーズを設けないので、スケジュールや進捗状況の把握、予算管理の面でコントロールが難しくなることがあります。また、明確な仕様が決まっていないということは、修正や変更が発生することも考えられるため、当初の計画から方向性が大きくずれてしまうリスクがあります。 しかし、ユーザの要望に応じて、仕様の変更が発生しやすいECサイトの開発などに適しているため、現代に合った開発手法といえます。
アジャイルの中でも注目度の高いスクラム開発とは?
アジャイル開発の手法として代表的なものに「スクラム」という手法があります。スクラム(Scrum)とは、チーム一体となってシステム開発を行うフレームワークのことです。ラグビーのスクラムが語源とされています。ラグビーのスクラムのように、チームががっちりと連携し合って開発を進めていく手法を指します。
開発チームの作業とプロダクトに責任を持つ「プロダクトオーナー」と、プロジェクトを円滑に進めることに責任をもつ「スクラムマスター」がチーム全体を支援し、開発チーム(3~9人程度)が実際に開発を行います。
スクラムでは、以下の6つのプロセスを定義し、これらの段階的な管理と反復をしながら開発を進めます。
- デイリースクラム:
毎朝チームで集まり、チーム全体の状況や障害、問題点、その日に行う予定の作業を確認します。 - リリースプランニング:
プロジェクトの立ち上げ時に、開発するプロダクトの機能の実装順序や開発期間について、チーム全体で計画を立てます。 - スプリント計画:
1つのイテレーション期間で、プロダクト全体からどの範囲の機能を実現させるかについて、チーム全体で計画を立てます。 - スプリント:
実際の1つのイテレーション期間の開発工程です。 - スプリントレビュー:
1つのイテレーション期間で完成したプロダクトのデモを行います。プロダクトがミスなく実装されており、安定して動作することを確認します。 - 振り返り:
各スプリントの良かったことや問題点、これから挑戦したいことなど、メンバー全員で話し合い確認します。
エンジニアとユーザ企業の担当者が、チームとなってプロジェクトを遂行することに重点を置いています。そのため、エンジニアだけではなく、ユーザ企業の担当者も一定レベルのITスキルを保有し、コミュニケーションができることが非常に重要となります。
それぞれの開発手法の長所と短所
ウォーターフォール型とアジャイル型の長所・短所を整理すると以下のようになります。 ウォーターフォール型開発の長所とアジャイル型開発の短所は相反していることがわかります。スケジュール管理がしやすいウォーターフォール型の長所は、全体スケジュールがわかりにくいアジャイル型開発の短所と逆の関係です。
ウォーターフォール型開発 | アジャイル型開発 | |
長所 | ・大規模開発に向いている ・開発仕様が確定している案件に向いている ・スケジュールや規模の管理がしやすい ・請負契約が可能 | ・仕様があいまいな案件に向いている。 ・仕様変更がしやすい ・開発スピードが早い ・リリース単位を調整できる |
短所 | ・リリースまでの期間が長い ・開発が始まると後戻りができず、仕様変更が難しい | ・全体のスケジュールがわかりにくい ・請負契約は困難、ユーザ企業にも一定の責任が発生する ・大規模案件には向いていない |
ウォーターフォール型開発は、大規模開発を請負契約で進める場合には向いており、アジャイルが型開発は不確実性が残っているような新しい取り組みに向いていることがわかりました。
基幹システムをリプレースするときのように、開発途中で仕様変更が発生しないプロジェクトもあります。そういったケースでは、イテレーションを繰り返して開発を進めるアジャイル型開発はかえって非効率です。従来通りのウォーターフォール型開発を選んだ方がよいでしょう。
一方、クラウドサービスをカスタマイズ開発するような案件では、クラウドサービスが自社の要件に合致しているのか評価を進めながら開発範囲を変更していくことがあり得ます。クラウドサービス標準機能を一旦リリースし、不足している機能を段階的に開発していくことになりますので、開発仕様変更も頻繁に発生します。
アジャイル開発は、このような案件にメリットがあるといえます。
国内での、アジャイル型開発の広がりについて
ガートナーの調査で触れたように、国内でのシステム開発の現場では、ウォーターフォール型開発がまだまだ主流となっています。
それには、大きく分けて3つの理由があると考えます。
・クラウド開発案件ボリューム:
アジャイルが活きるクラウド開発の案件が少ない
システム開発企業は、見積がしやすいウォーターフォール型開発を続けてきました。規模の大きなシステム開発案件に対して、エンジニアのアサイン期間・人数を見積もる上で、不確実性が低いからです。だからこそ、システム開発に関する請負契約を可能としています。アジャイル開発の場合は、不確実性が高くなるため、契約方法も準委任に変更せざるを得なくなります。予算もスケジュールも組みにくいアジャイル型開発を採用する企業が国内で伸び悩んでいる理由でもあります。
・エンジニア不足:
世界的にはアジャイル型開発が中心となっているが、国内では広がりが遅い
先の通り、アジャイル型開発の案件数が多くないことから、エンジニアがアジャイル型開発について勉強する場面が少ない現状があります。アジャイル型開発技術者の多くは、自主的に独学で関連する手法を学んでいることが多く、それを活用する場も多くないことから、アジャイル開発エンジニア数の拡大スピードは遅れています。
アジャイル開発に関連する有資格者の人数にもそれが表れています。
PMI-ACP資格試験はPMIが実施するアジャイルの試験ですが、2019年において、世界的には、32,781人の合格者がいます。また、日本では94人となっています。(PMI日本支部 アニュアルレポート 2019)
・クライアント企業のIT人材不足:
アジャイル型開発ではユーザ企業の機能確認と方向修正が重要
アジャイル型開発では、「スクラム」で触れた通り、システム開発企業だけではなく、クライアント企業でも一定レベルのシステム開発に対するスキルを保有されていることが期待されます。なぜならスクラムのチームにはクライアント企業も参画するからです。
しかしながら、日本のエンジニアは全体の72%がIT企業に所属しており、クライアント企業には2割程度のエンジニアしかいないという実態があり、エンジニアの65%がクライアント企業に所属している米国とは、全く異なる状況であることが明らかです。
日本の大企業の多くは、システム部門での採用ではなく、複数の部門での経験により成長していくという考え方が強いことから、所属部署変更が多く、システム部門の担当者についても、数年で入れ替わっていく傾向にあります。そこでは、エンジニアが育成される土壌がありませんのでベンダーへの丸投げ体制を続けることになってしまいます。
まとめ
コロナ禍といわれる社会と経済の不確実性は、まだまだ終わりを見せていません。企業活動についても、不確実で変わりやすい状況が続くことでしょう。システム開発に対するビジネスモデル麺での要求も変化しやすいため、機敏で柔軟な対応が求められています。
アジャイル型開発は、不確実で変わりやすい今の環境にマッチしていると言える開発手法です。
クライアント企業でも、アジャイル型開発を経験したことのあるエンジニアを積極的に採用する動きが出てきました。
全国にホームセンターを展開する株式会社カインズでは、「IT小売業の実現」という目標を掲げ、売場や社内でのIT活用を急速に推進していますが、エンジニアを積極的に採用し、アジャイル型開発を推進しています。
カインズのような、企業が、今後増えてくると考えられます。そのため、エンジニアが転職を考えた場合の選択肢が、さらに増えてくることを意味します。クライアント企業に所属するエンジニアとして活躍できるという選択肢が持てるようになるからです。
システム開発企業、クライアント企業、どちらに進む場合でも、ご紹介した、ウォーターフォール型とアジャイル型のメリット・デメリットを理解しておくことが大切です。
開発言語や技術的なスキルを磨くだけではなく、開発手法についても理解を深めることで、エンジニアとして身に着けられるスキルや活躍の場の幅が拡がり、将来の選択肢を増やすことができるでしょう