現在、アジャイル開発が注目されています。アジャイル開発という言葉は聞いたことがあっても、実際にどのような開発方法・方針を指すのか疑問に思っている方も多いと思います。そこで、ここではアジャイル開発の具体的な手法も交えて詳しく説明します。
今話題のアジャイル開発とは?
アジャイル開発とは、「素早く」開発できる手法です。実装する機能を細かく分割し、それぞれ小規模に開発していくことで、柔軟な開発が可能になっています。
そもそも、これまではウォーターフォール型という手法が一般的でした。ウォーターフォール型では、最初に要件定義を行い、それを基にプログラミングを作成します。開発がどの程度進んでいるかを把握しやすいという利点もあるのですが、後からの変更に弱いという欠点がありました。顧客はプログラミングの専門家というわけではありませんから、実際に開発された成果物を見てから、必要な機能が出てくる場合も少なくありません。
このウォーターフォール型の場合、仕様が変更されたときにまた最初からやり直す必要があるため、結果的に成果物ができるまでが長くなってしまうという問題点がありました。
一方で、アジャイル開発では最初にきちんと要件定義せず、必要な機能を小規模に開発していきます。このやり方なら後から変更が起こっても大きな時間のロスが発生せず、簡単に低コストで変更していけるというメリットがあります。
ちなみに、アジャイル開発はそもそも、アメリカのプログラマー集団が提唱した手法です。17人のプログラマーが2001年、「アジャイルソフトウェア開発宣言」を提唱したのが始まりです。
アジャイル開発のメリット
アジャイル開発には主に2つの利点があります。それぞれの利点について詳細に解説します。
顧客ニーズに柔軟に対応できる
特に前例のないソフトやシステムを開発するときには、顧客もどのような機能が必要かを十分に把握していないことがあります。そんなときには途中で頻繁に顧客から新しい要望が発生します。アジャイル開発では随時顧客に現在の状況を報告しながらコードを書いていくため、顧客もソフトに修正点がないか確認できます。そして、もし機能の追加や修正点があれば、修正も容易なのです。
手戻しが発生した場合のコストが削減できる
これまで主流だった手法では、仕様を最初に細かいところまで決定します。そのため、修正事項が入ったときに大きなコストが発生します。後から考えたら不要だった開発が多く含まれてしまう可能性もあります。
一方、アジャイル開発では、顧客とのやり取りを密に行います。そのため、修正や追加も早期発見が可能であり、開発に無駄が少なくなるのです。
アジャイル開発の進め方
アジャイル開発では最初に大まかな仕様を決定しますが、その後は機能それぞれについて、4つの手順を順番に実行していきます。それでは、それぞれの手順について詳しく見ていきましょう。
1.計画
最初に計画を立てます。しかし、細かいところまで厳密に決めるわけではなく、大まかな仕様のみを決定し、細かい仕様は開発していく中で顧客とミーティングを重ねながら決定していきます。
そして、全体の大まかな計画が終わったら、次は個別の機能について具体的に仕様を決定していきます。
2.設計
次に、開発する機能の詳細について具体的にどう開発を行うか設計を行います。設計とは、建築分野でいう設計図のようなもので、開発するプログラムの概略を示すものです。設計図が間違っていると後々大きな問題になるため、「設計図が正しいかどうか」は慎重に確かめる必要があります。
3.開発
次に、実際の開発段階に入ります。アジャイル開発でも、基本的にはチーム開発になりますから、チーム内できちんと話し合いながら進めることは極めて重要です。すり合わせが不十分だと、「2人が同じ部分のコードを書いていた」ということにもなりかねません。
4.テスト
最後に、機能がきちんと動くのか実際に動かしてテストを行います。ちなみに、テストが成功した場合には次の機能の開発に進みますが、ここでバグが発見されることも多いです。バグが発生した場合にはまた開発段階まで戻ってコードを修正します。そして、コードを修正したらまたテストを行ってバグが発生しないか確かめるのです。
アジャイル開発の手法とは
ひとくちにアジャイル開発と言っても、実はすべてまったく同じ手法というわけではありません。ここではよく使われる3つの手法について解説していきたいと思います。
スクラム
アジャイル開発の中でもスクラムという手法は特によく用いられます。スクラムは特にチームでのやり取りが活発な場合に大きなメリットを得られる手法です。スクラムではチームメンバーがやり取りしながら計画を立てたり、その計画を基に開発を進めたりします。
スクラムはチーム内のやり取りが活発な場合には短時間で開発を進められますが、その反面「コミュニケーション不足だと、大きなミスが発生しやすい」というデメリットもあります。具体的には、それぞれのメンバーが開発したコードを組み合わせた結果、うまく機能が動かなかったり、顧客の要望がきちんと反映されなかったりする恐れもあるのです。
エクストリーム・プログラミング(XP)
エクストリーム・プログラミング(Extreme Programming)はアジャイル開発の中でも特に、途中で顧客の要望が変わっても簡単に対応できる手法です。どう開発するのが技術的に最適かを重視するため、エンジニアにとってはうれしい方法と言えます。
なお、エクストリーム・プログラミングは「コミュニケーション」「フィードバック」「シンプル」「勇気」という4つの価値を重視して開発を行います。
ユーザー機能駆動型プログラミング(FDD)
ユーザー機能駆動型プログラミング(Feature Driven Development)は開発するソフトや機能が、実際に顧客にとってどのような価値があるのかを重視する方法です。機能ごとに複数人が一緒に開発します。顧客の要望を重視する性質上、ユーザー機能駆動型プログラミングでは顧客と密にやり取りを行います。
ここで紹介した3つの中では、もっとも大規模なシステムの開発に向いていると言えます。
まとめ
この記事ではアジャイル開発について、基本から具体的な開発方法まで解説してきました。アジャイル開発は従来型より進化した手法です。ぜひ取り入れてみてはいかがでしょうか。
なおAzure DevOpsには、アジャイル開発をするときに便利な拡張機能もそろっており、Azureはアジャイル開発にも使いやすいサービスです。ぜひこの機会にAzure導入を検討してみてはいかがでしょうか。