目次

  1. アジャイル開発とは
    1. アジャイル開発の大まかな流れ
    2. アジャイル開発の種類
  2. アジャイル開発のメリット・デメリット
    1. アジャイル開発のメリット
    2. アジャイル開発のデメリット
  3. アジャイル開発が適しているケース
    1. 柔軟な開発運用を検討したい場合
    2. 新規の開発内容を迅速に市場投入したい場合
    3. ソフトウェア製品を継続的に改善していく場合
    4. アジャイル開発が適していないケース
  4. アジャイル開発を行う上でのポイント4つ
    1. 期間毎にきちんと製品を完成させること
    2. 各々が当事者意識を持ち、綿密なコミュニケーションを図ること
    3. 開発プロセスが自動化された開発環境を整備すること
    4. アジャイル開発に適したツールを導入し、利用すること
  5. アジャイル開発でユーザーとの距離を縮め迅速なリリースを

 アジャイル開発とは、開発期間を短期間に区切り、新規リリースを繰り返しながらプロジェクトを推進していく開発手法です。

 アジャイル開発は、長期計画を立て、要件定義からリリースまでを一回で行うウォーターフォール開発と異なり、プロジェクトの軌道修正を容易にできます。環境変化によって開発の見直しを余儀なくされても、柔軟に対応できるのが特徴です。

 また、ユーザーの声を聞いて改善しながらプロジェクトを進めるプロセスが組み込まれているため、ユーザーに価値あるプロダクトを、ウォーターフォール開発より早く届けられることもあります。

 まずは、アジャイル開発の大まかな流れや種類について説明します。

 アジャイル開発の大まかな流れは、以下の3点を反復的に繰り返すことにあります。

  1. 今回の期間内に開発したい内容を計画
  2. 開発の実施
  3. フィードバック・振り返り(その後、1に戻る)
アジャイル開発の基本

 この計画・開発・振り返りのサイクルを繰り返すことにによって、様々な経営課題に対する柔軟な計画変更に対応できるのです。

 アジャイル開発手法には様々な種類があり、仕組みも少しずつ異なります。

 代表的な開発手法としてあげられるのは、スクラム、エクストリーム・プログラミング、リーンの3種類で、それぞれの特徴は下記の通りです。

それぞれの手法について、詳細を解説していきます。

スクラム

 スクラムは以下の役割(ロール)に分担してプロジェクトを進める手法です。

  • プロダクトオーナー(開発物に責任を持つ)
  • スクラムマスター(開発プロジェクトの円滑な推進に責任を持つ)
  • メンバー(実際に開発を行うエンジニア)
スクラムの概略

 スクラムでは、「スプリント」と呼ばれる2~4週間の開発期間を軸に、開発を進めていきます。

 まず、責任者であるプロダクトオーナーが、スプリントの開始時に「スプリントプランニング」を立てまます。これは開発したい項目をリスト化した「プロダクトバックログ」の内容から、今回のスプリントで実際に開発するものを選定し、「スプリントバックログ」に移していく作業となります。

 スプリントバックログには、1回のスプリントで開発が完了できる要件のみ追加し、開発が完了しない場合には、完了できるタスクに分割をして追加を行います。

 プロダクトオーナーによってスプリントプランニングを立てられたら、スクラムマスターがメンバーを招集し、プロダクトの開発に着手します。

 スプリント期間中は、スクラムマスターとメンバーが毎日デイリースクラム(デイリースタートアップ)を開催し、日々の開発進捗をお互いに確認し合います。1日15分以内が理想です。

 また、適宜ユーザーに製品を見せる「スプリントレビュー」を行い、開発物に対するフィードバックを得ながら開発プロジェクトを進めていきます。

 スプリント期間終了時に、スクラムマスターとメンバーが「スプリントレトロスペクティブ」と呼ばれる振り返りを行い、今回のスプリントの進め方や改善点を整理します。

 それを、プロダクトオーナーが次回のスプリントプランニングに反映させる、というのが1回のスプリントの基本的な流れです。

エクストリーム・プログラミング(XP)

 エクストリーム・プログラミングはアジャイル開発手法の1つです。スクラムとよく似た部分も多くありますが、ソフトウェア開発に特化した手法となっています。

エクストリーム・プログラミングの概略

 エクストリーム・プログラミングには、さまざまな開発プラクティスがあります。

・テスト駆動開発

 ソースコードを書く前に自動テストのコードを先に書くことにより、ソフトウェアの品質向上や短納期化を目指す手法

・リファクタリング

 ソースコードを効率的かつ読みやすく改修する手法。イテレーション(スクラムでいうスプリント)を2週間前後に設定し、その期間内に動くソフトウェアをリリースする。反復しながら開発を行うことで、開発現場の継続的な成長が見込める

・ペアプログラミング

 2人体制でプログラミングを進める手法。レビューを随時受けられる体制を構築したり、ソフトウェアの内容を2人理解している状況を作り出せる

 これらの手法を状況に応じて使い分け、開発サイクルを回していくのがエクストリーム・プログラミングの特徴です。

リーン

 リーンにもいくつか種類はあります。

 代表的なものとしては、短期間に仮説検証・実験・学習・意思決定を繰り返す、リーンスタートアップがあげられます。ジャスト・イン・タイムや自働化で有名なトヨタ生産方式(TPS)などがリーンと呼ばれる考え方です。

 リーンとはユーザーの価値にならない無駄を排除するための考え方で、開発にも応用できます。

 アジャイル開発は、市場調査や営業活動を含まない概念ですが、実際にソフトウェアを開発して販売を行うと、市場・ユーザー・営業活動からのフィードバックを得ることができます。

 これらのフィードバックを開発内容に反映させる体制を作ることで、ユーザーにとっての価値を最大化させるための短期間かつ反復的な開発が可能になります。

 アジャイル開発を検討する上では、開発を単独で考えるのではなく、市場調査や営業からのフィードバックなども含めて検討できると効果的です。

 次に、アジャイル開発のメリット・デメリットを「ウォーターフォール開発」を引き合いに出しながら説明します。

 ウォーターフォール開発とは、滝を流れ落ちる水のように、上流から下流まで流れるような開発を計画し、順次プロジェクトを進めていく開発手法のことです。

 アジャイル開発のメリットは、計画の柔軟性と開発スピードの2点に集約できます。

経営上のリスクを低減させられる

 不確実性の高い現代では、時間経過によって開発計画の見直しを迫られることがしばしば起こります。

 私のクライアントでも、2019年の秋頃からウォーターフォール開発で進めていたウェブアプリの開発案件がありましたが、2020年4月のコロナ到来により市場の状況が一変し、計画変更を余儀なくされるケースに直面しました。

 長期的な計画を立てても、状況が大きく変わることは珍しくありません。

 その点、アジャイル開発は、開発期間を短期間に区切り、計画と実施を反復的に繰り返す手法のため、運用の土台が出来上がっていればプロジェクトの軌道を容易に修正できます。

 それにより、経営上のリスクを低減させることも可能です。

短期間でユーザーに価値を届けられる

 ウォーターフォール開発では、一般的に長期計画で開発プロジェクトが進むため、リリースのサイクルが長くなりがちです。

 ようやくリリースに至ったとしても、ユーザーから「ここを直してほしい」「こういうのもあったほうがいい」という指摘があれば、また同じくらいの時間をかけて開発をし直すことになります。

 一方、アジャイル開発では、2週間前後のサイクル毎のリリースを目指すため、製品の改善を順次進めることができます。

 これにより、事業推進により得られた気付きを新たな価値に変換し、スピーディーにユーザーに届けることができます。結果、売上や利益の向上を見込めます。

 アジャイル開発のデメリットはメリットの裏返しです。計画が柔軟だから予算やスケジュールも柔軟になります。

長期的なスケジュールが立てられない

 アジャイル開発は、長期計画の立案を行いません。不確実性が高い現代では、長期計画よりも連続的・反復的な短気計画が重要になるケースがほとんどです。

 それでも、長期計画が必要なケースでは、ウォーターフォール開発を採用することが通例です。あるいは、大筋の計画だけ立てて、短期的改善を繰り返して推進することが一般的となっています。

 また、ウォーターフォール開発に慣れたチームが柔軟な計画で開発を推進すると、メンバーが疲弊する可能性もありますので、プロジェクトの推進には十分な配慮を行う必要があります。

必要予算が読みづらい

 アジャイル開発では、新たな課題の発掘を常に行うため、緊急で追加の予算が必要になるケースがしばしば発生します。

 状況に応じた予算の増減が発生するため、一般的には予算が読みづらく、予算計画を立てることができません。

 以上のメリット・デメリットを踏まえ、アジャイル開発が有効に作用するケースをいくつかピックアップしました。

 アジャイル開発が向いていないケースもあわせてご紹介します。

 アジャイル開発は、事業環境が変化する前提で、新たな一手を随時打ち出していく必要がある場合に有効な手法です。

 新たなユーザー獲得手法や、ユーザー満足度向上に必要な機能を随時盛り込んでいくことができます。

 アジャイル開発を用いると、企画・構想から市場投入までのサイクル・スパンの短縮化が期待できます。

 市場からのフィードバックをより短期間で受け付けられるので、直接的な売上増につながるような新たな製品開発・事業アイデアを生み出したいときに適しています。

 製品自体がソフトウェアの場合や、製品・サービスの内容に密接にソフトウェアが関連している場合にも、アジャイル開発手法は有効です。

 営業・マーケティングやカスタマーサクセス・サポートのチームからフィードバックを受け取りつつ、短期間に製品を改善することで新たなユーザーにとっての価値創造に繋がり、売上増が期待できます。

 ソフトウェアの不具合などが人の生死に直結する医療システムなどでは、アジャイル開発が向いていない場合もあります。

 その他、ソフトウェア開発における最適な開発チームの人数は、2枚のピザを一緒に食べられる人数を言われているため(2枚のピザ理論:6~8人程度が限度)、アジャイル開発は大規模な開発には向きません。

 大規模な開発を行う場合には、工期の長期化が想定され、長期計画=ウォーターフォール開発となります。

 また、現状で売上が十分ではない場合には、根本的な価値提供も十分ではない可能性が高いため、アジャイル開発に着手するより、企画から練り直した方が有効な場合もあります。

 アジャイル開発は、現状で十分な売上が確保できており、継続的な成長が期待できる場合に採用できると高い効果が期待できます。

 アジャイル開発を行う上でのポイントを4つに絞って説明します。

 アジャイル開発の良さは、柔軟に開発プロジェクトを推進できるところです。

 しかし、市場投入前の計画変更が横行すると、市場からのフィードバックを得ることができなくなってしまいます。

 アジャイル開発では、ソフトウェア品質の確保も大切ですが、とりあえず動くものを作ることが大切です。

 動くものを作って、次回以降に改修を行うことで、計画的に製品のリリースを行うことができます。

 もちろん、瑕疵や不具合を作りこまないような配慮は必要ですので、1サイクルの期間で開発できる内容について精査しましょう。

 また、開発期間を守り、短期間にリリースまでつなげることができてこそのアジャイル開発なので、開発納期の遵守はマストです。

 1サイクル毎の計画変更をルール化して、着実なリリースと事業のステップアップを積み重ねられるような展開を図りましょう。

 継続的な開発運用のことを「DevOps(デブオプス)」と呼び、近年では開発と運用双方をいかにうまく協働させるかについての方法論として整理・議論されるようになりました。

 アジャイル開発では、このDevOpsを有効に機能させるためのマインドセットや心構えが必要不可欠です。

 一人一人が当事者意識を持ち、綿密なコミュニケーションを図りながら、状況に応じた柔軟な開発を行っていくことが求められます。

 特に目に見えないソフトウェアの開発においては、言葉でのコミュニケーションが難しいケースも度々あるため、資料を用いたコミュニケーションや、コミュニケーション機会を増やすなどの対策が必要になる場合もあると思います。

 アジャイル開発では、開発環境レベルでの整備を行っていくことが求められます。

 継続的デリバリー(Continuous delivery, CD)を実現できるテスト駆動開発の実践や、デプロイパイプラインの構築などを行っていく必要があります。

 継続的デリバリーとは、継続的にソフトウェアをリリースするための方法論です。

 短期間でのリリースを繰り返すため、テストとデプロイを自動化できていないと、その工数が毎回必要になります。

 一般的にウォーターフォール開発からアジャイル開発に移行する時に敷居となるのが、これら自動テストや自動デプロイを行うための仕組みをいかに構築するかです。

 ただ、現在は、『継続的デリバリー 信頼できるソフトウェアリリースのためのビルド・テスト・デプロイメントの自動化』(KADOKAWA/アスキー・メディアワークス)をはじめ、該当の書籍も多く出回っているため、関連情報の取得には困ることは無いはずです。

 アジャイル開発を行う上で、開発プロジェクトに適したツール選びは非常に重要です。

 メールやチャット、ファイル共有ツール、プロジェクト管理ツールなどのコミュニケーションツールを上手く活用することで、アジャイル開発の成功確率が上がります。

 例えばチャットツールであれば、日本国内で流行っているSlackChatworkなどを利用するのが良いと思います。

 ファイル共有には、GoogleDriveBoxなどが、カンバン形式のプロジェクト管理ツールとしてはTrelloなどがあります。

 当社では、普段からこれらのツールを複数利用して開発を行っています。

 これらのツールの利用を導入すると、これらのツールなしに開発を行うことが考えられないほど快適になるので、おすすめです。

 アジャイル開発を導入するためには、自動テストを書く工数など、顧客に理解してもらわないといけないことがいくつかあります。

 これらの敷居を乗り越えてアジャイル開発の環境を整えることができたとしても、それはあくまでもアジャイル開発のスタート地点に過ぎません。

 しかし、アジャイル開発は時代に即して得られるメリットが数多くありますので、チャレンジする価値があると思います。

 「ユーザーの声を開発に反映させながら迅速なリリースと短期的に反復できる」と聴いただけでも私はワクワクします。

 ぜひ、アジャイル開発についての知見を深め、現代に最適な開発手法として、アジャイル開発導入の提案につなげていただければと思います。