アジャイル開発とは何か?スクラムなどの基本用語を解説

2020年3月9日

アジャイル開発の概要

アジャイル開発のキャッチ画像

アジャイル開発はシステム開発手法のひとつで、2001年前後に登場した歴史の浅い開発手法です。
システム用語なので、元々は英語です。英語では“Agile software development"と表記されます。
アジャイル開発の「アジャイル(Agile)」とは直訳すると「素早い」という意味になります。

アジャイル開発は、文字どおりスピード感が溢れる開発手法で、従来の段階的な開発手法とは対照的に、ペアプログラミングイテレーションなどの手法を利用してソフトウェア開発を迅速に行おうとする開発手法です。
今回はアジャイル開発で使用する基本的な用語をまとめていきます。

アジャイル開発のメリット・デメリット

ここからはアジャイル開発のメリットとデメリットを解説していきます。

メリット

アジャイル開発のメリットは、柔軟な対応が行える点です。
計画段階で厳密に仕様を固めないために、ユーザや市場の反応を見ながら、仕様や設計を変更することができます。
この柔軟さこそが最大のメリットです。

デメリット

長所は見方を変えると、短所にもなりえます。
アジャイル型の開発のデメリットは、プロジェクトをコントロールしにくい点です。

仕様や設計に柔軟性を持たしているので、計画が曖昧になりやすい傾向にあります。
つまり、完成期日は決めているけど、その過程がどのように進むかは厳密には決めにくくなります。
計画が明確にならないということは、そのプロジェクトにかかる費用の見通しもなかなか立ちません。

このようにアジャイル開発では他の開発手法よりも、プロジェクトマネジメントに意識を向けていかなければなりません。

アジャイル開発のツールと技法

ここからはアジャイル開発を進めていく上で役に立つツールと技法を紹介していきます。

サーバント・リーダーシップ

従来のリーダーとサーバント・リーダーの比較のイメージ

サーバント・リーダーシップとは、チームで力を分け合い、他の人の要望を第一に考え、人々ができるだけ高く成長し、活動できるのを助けるリーダーシップ哲学のことです。
素早い開発を実現するため、人をまとめることが重要なアジャイル開発のプロジェクト・マネジャーやプロジェクト・リーダーにはこのサーバント・リーダーシップが最適だと言われています。

このサーバント・リーダーシップについては、下記の記事もご参照ください。

スクラム

スクラムとはチームで開発を進める手法のことで、反復的・漸進的な開発の手法です。
例えば、毎日決まった時刻にチームメンバーが集まって開発の状況を共有し、問題が拡大したり、状況が悪化することを回避するための日次スクラム(デイリースクラム)を開催することがあります。

イテレーション

イテレーション(iteration)とは反復・繰り返しという名前の通り、ソフトウェアを複数の小規模な機能に分割し、設計、プログラミング、テストという手順を1回実行して開発を進める手法です。

イテレーションについては、下記の記事もご参照ください。

イテレーションの目的

イテレーションを実施する目的はソフトウェアに存在する顧客の要求との不一致を解消したり、要求の変化に柔軟に対応することです。
ソフトウェアを分割せず、全体を開発してから顧客に見せると、「ぜんぜんイメージとちがった」ということがあります。
こうしたトラブルを回避することがイテレーションの目的です。

ふりかえり(レトロスペクティブ)

イテレーションの開発手法をとった場合、イテレーションの最後のタイミングでふりかえり(レトロスペクティブ)を実施します。

このふりかえりについては、下記の記事もご参照ください。

ペアプログラミング

ペアプログラミングとは

ペアプログラミングとは、2人が1組のペアとなって、ソフトウェアの開発を行っていく手法です。
基本的に1人はコーディングを行い、もう1人はコードのレビューを行います。
コーディングを行うのはドライバ、チェックを行うのはナビゲータと呼ばれます。

ペアプログラミングの目的

ペアプログラミングの目的は、品質の向上や知識の共有を図ることです。
開発をコーディングを行うプログラマーだけで対応すると、技術力の低いプログラマーであれば洗練されていないコードを書いてしまうことがあります。また、高い技術力をもっていても1人でコーディングをしていれば、その知識を他のプログラマーに共有することができません。
そのため、2人1組で開発を行い、コードのブラッシュアップや指導の場を設けて知識の共有をしていきます。

ピンポンペアプログラミング

ピンポンペアプログラミングでは、ペアプログラミングのドライバとナビゲータを固定化させず、役割を変えながら開発を行います。

リファクタリング

リファクタリングとは、外部から見たプログラムの振る舞いを変えずに、プログラムの保守性を向上させ、デバッグや保守を容易にしていくことです。
コンピュータプログラムに手を加えたことによる影響を確認する回帰テストを前提とし、ソースコードを修正した後に他のプログラムが正常に動作するかを確認していきます。

タスクボード

タスクボードではタスクの実施状況を可視化して、いつでも確認できるようにします。
例えばボードを「残タスク」、「開発中」、「テスト」、「完了」などの4つの領域に分け、どんなタスクが残っており、何が完了したのかを把握していきます。

バーンダウン・チャート

バーンダウンチャートの例の図
バーンダウン・チャートの例(Wikiより)

バーンダウン・チャートとは残りの作業量を縦軸にとり、横軸に時間をとったグラフです。
現在の開発の進捗がどの程度のものなのかを把握することができます。

バーンダウン・チャートについては、下記の記事もご参照ください。

アジャイル開発とウォーターフォール型の違い

ウォーターフォール型との比較

アジャイル開発とは大きな単位でシステムを区切ることなく、小単位で実装とテストを繰り返して開発を進めていく開発手法です。アジャイル開発の対比として、必ず紹介されるのがウォーターフォール型の開発です。
ウォーターフォール型開発は、システム開発のフェーズが大きく区切られ、そのフェーズに沿った作業を行うスタイルです。
例えば、以下のフェーズで区切られます。

  • 要件定義
  • 外部設計
  • 内部設計
  • 開発
  • 単体テスト
  • 結合テスト
  • システムテスト

ウォーターフォールの意味が表すとおり、水が上から流れるように上から下へ作業が進んでいきます。
全ての工程が終われば、そのプロジェクトが終わりということになります。

アジャイル開発の場合

アジャイル開発は先ほど説明したとおり、小単位で実装とテストを繰り返して開発を進めていく開発手法です。
例えば、以下の工程の繰り返しです。

  • リリース計画
  • 設計
  • 実装
  • テスト

この一連の流れはイテレーションとも呼ばれています。イテレーションとは日本語で、「反復」という意味になります。
イテレーションは通常、1~2週間ごとのサイクルになるのが一般的です。それでは、それぞれの工程を確認していきましょう。

リリース計画

アジャイル開発では、計画段階では厳密な仕様を決めません。大まかな仕様だけを決めます。
ウォーターフォール型の開発では、開発初期段階で厳密に仕様を固めるので、このあたりは大きく異なります。

なぜ、大まかな仕様しか決めないのか?それは開発や設計途中に、仕様変更があることが前提だからです。
変化の激しい業界で用いられるアジャイル型の開発では、仕様変更が日常茶飯事に近い状況です。
なので、変更に対応するためにある程度、余裕を持たせているのです。

設計、実装、テスト

大まかな仕様が決まれば、あとは設計→実装→テストと順に行っていきます。
この部分で行う作業に関しては、ウォーターフォール型の開発と内容としては、そう大きな違いはありません。

最適な開発手法を選ぶ

ウォーターフォール型の開発とアジャイル型の開発に優劣はありません。
プロジェクトやシステムによって、向き不向きがあるだけです。
業務システムのように、目的や用途が明確であれば、ウォーターフォール型の開発で問題ないでしょう。
反対にユーザや市場の反応を見て、改善しなければならない場合は、アジャイル型の開発が向いているでしょう。

まとめ

今回はアジャイル開発の内容を紹介してきました。
アジャイル開発は、変化の激しい業界で用いられる開発手法です。メリットもあれば、当然デメリットもあります。
アジャイル開発で用いられるツールと技法はそれ単体でも効果的なものばかりです。
今後ますます「アジャイル開発」という言葉は耳にする機会が多くなっていくと予想されるので、適宜アジャイル開発の内容を復習していきましょう。