アジャイル開発とは、個人との対話・動くソフトウェア・顧客との協調・変化への対応を重視するソフトウェア開発です。
2000年代初頭に、当時軽量ソフトウェア開発と呼ばれた分野で著名であったエンジニアたちが、それぞれの開発手法・価値観を議論し、共通する概念を定義しました。それをまとめた文章がアジャイルソフトウェア開発宣言です。
アジャイルソフトウェア開発宣言は、4つの価値とそれを実現しやすくする12の原則から構成されます。4つの価値の説明文を引用します。
私たちは、ソフトウェア開発の実践あるいは実践を手助けをする活動を通じて、よりよい開発方法を見つけだそうとしている。 この活動を通して、私たちは以下の価値に至った。
プロセスやツールよりも個人と対話を、 包括的なドキュメントよりも動くソフトウェアを、 契約交渉よりも顧客との協調を、 計画に従うことよりも変化への対応を、
価値とする。すなわち、左記のことがらに価値があることを認めながらも、私たちは右記のことがらにより価値をおく。
ここで「左記のことがら」とされるもの、プロセス・包括的なドキュメント・契約交渉・計画に従うことは、ソフトウェア開発の手段ですが、時としてそれ自体が目的化してしまいます。それを回避して「右記のことがら」、個人との対話・動くソフトウェア・顧客との協調・変化への対応を重視するのがアジャイル開発です。ただ、「左記のことがらに価値があることを認めながらも」とここで記載されてる以上、プロセス等を軽視して良いわけではない点には留意しましょう。
アジャイルソフトウェア開発宣言は日本語訳されて公開されていますので、ご参照ください。(参照先:アジャイルソフトウェア開発宣言)
アジャイルソフトウェア開発宣言を見れば分かりますが、アジャイル開発の原初的な定義では、方法論というよりもむしろマインドセットが問題にされています。何か定まった方法論に従えば良いというものではないですし、方法について強い取り決めがあるわけでもありません。アジャイル開発では「インセプションデッキ」という有名な方法がありますが、これはRobin Gibsonという、アジャイルソフトウェア開発宣言の作者連盟に加わっていない人間が考案したもので、原初の理念には今使われてる代表的な方法論が含まれてないことも多いです。
ただそれだと非常に抽象的で、うまく咀嚼できないところもあります。これについてはIPAが「アジャイルソフトウェア開発宣言の読みとき方」という解説資料を提供しているため、ご参照ください。(参照先:アジャイルソフトウェア開発宣言の読みとき方)
アジャイル開発の目的
では何のためにアジャイル開発という新たな開発手法は提唱されたのでしょうか。それは便利なソフトウェアを開発するためです。
ソフトウェアはあくまで顧客の問題解決のために作られるものであり、顧客の問題解決こそが価値です。ただ、プロジェクトは往々にして、プロセス・包括的なドキュメント・契約交渉・計画に従うことに傾いてしまいがちです。しかしこれらを開発の判断基準とするのは、顧客の問題解決に繋がらない、とアジャイルの提唱者たちは考えました。では何を基準にするとより良くなりやすいか?と考えて、共通点として出てきたのが上記の4つの価値であった、ということです。
アジャイル開発の方法論
アジャイルソフトウェア開発宣言は先述の通りマインドセットが中心で、12の原則もまた非常に抽象的です。具体的な方法論を提示しているわけではありません。
それゆえ、アジャイル開発の具体的な方法論については、複数の手法が提唱されています。代表的なものはスクラム開発、エクストリーム・プログラミング(通称、XP)です。
それぞれの開発手法が固有の方法論を持ちますが、とはいえ共通する要素もあります。代表的なものは、短期間での反復開発です。アジャイルでは基本的に、開発対象を小さくし、その小さい機能の計画~デリバリーを短いサイクルで頻繁に行います。この開発期間は、スクラムならスプリント、XPならイテレーションと呼ばれますが、アイデア自体は同種です。
しかし、この短期間での反復開発手法がなぜアジャイルなのか、つまりどうアジャイルの4つの価値を実現できているのでしょうか。
まず、小さくデリバリーことで、その機能が本当に必要なのかを早期に検証できます。つまり、「動くソフトウェア」という価値を実現できています。
また、早期のフィードバックを得られることで、変化に対して早期に対応ができます。つまり、「変化への対応」という価値を実現できています。
残りの2つの価値はこことはあまり関係ありませんが、少なくとも2つはこの開発手法により実現しやすくなってることがわかります。
ウォーターフォールとの違い
ウォーターフォール開発は、開発の各フェーズを1回で終わらせる開発手法です。アジャイルが各フェーズを何度も繰り返すのとは対照的な手法です。
ウォーターフォールの場合、フェーズの手戻りを許容しません。それゆえ、求められる価値に変化があったとしても、開発のやり直しをしません。仮に手戻りを許容しても、計画~デリバリーまでの時間がかかっているので、リリースした時に初めて「求められていたものと違った」とわかっても、後の祭りとなります。
計画を立てるか | 計画の単位 | 変化に対応する | |
---|---|---|---|
ウォーターフォール | 立てる | システム全体 | しない |
アジャイル | 立てる | 機能単位 | する |
段階的なリリースとの違い
段階的リリースは、機能単位でリリースしていく開発手法です。アジャイルもまた機能単位でリリースするためその点は似ていますが、システムの完成予定時期の見積もりに違いがあります。
段階的リリースは結局最初に完成形の計画がある=リリース後の修正を見込まないためにいつが完成時期かを定義できますが、アジャイルはリリース後の修正を見込むために完成形を計画できない所から出発するため完成時期を定義できません。段階的リリースで、リリース後に価値を検証して機能のブラッシュアップを図るのであれば、それは完成時期を定義できないことになり(どういうフィードバックが得られるか予想しようがないため)、それはアジャイル開発となります。
計画を立てるか | 計画の単位 | 変化に対応する | |
---|---|---|---|
段階的リリース | 立てる | 機能単位 | しない |
アジャイル | 立てる | 機能単位 | する |
アジャイルの向き不向き
アジャイルもひとつの開発手法に過ぎないため、向き不向きがあります。アジャイルが向かない場合は、コストをかけてでも念入りに計画し実行するしかありません。
アジャイルに向いているのは、以下の条件を満たす開発です。
- メンバーが物理的に近い
アジャイルはメンバーのコミュニケーションを重視するために、前者の要件が望ましいとされます。リモートワークはここに問題を抱えており、リモートワークが不可避な状況では、この問題をいかに軽減するかがアジャイルの成否にかかわります。
- ビジネス上、要件の変化が激しい
ビジネス的な要件の変化に乏しい場合はそもそもアジャイルが必要ありません。要件の変化のしやすさがビジネス上の問題ではなく、単に要件定義者の能力不足である場合、アジャイルは能力不足の隠れ蓑になってしまう可能性があるため、要件の変化のしやすさが何に由来するのかは見極める必要があります。
- 人命・社会インフラに影響が低い
また、人命や社会インフラの停止にかかわるようなシステムではアジャイルは許容されないでしょう。「素早く失敗すること」を手段としているアジャイルですが、それはやり直しがきく状況でのみ許されることであり、人命や社会インフラの停止は取返しがつかないため不適合となります。
アジャイル開発と契約
しかし当たり前ですが、納期やスコープに変化がない状況で要件ばかり変えていたらプロジェクトは立ち行かなくなります。アジャイル開発は納期等の制約への変更なしに要件定義を可能にする魔法の杖ではありません。間違っていた要件=実現しても無価値なものを実現するぐらいであれば変更すべきであり、素早く価値検証することでその誤りを早期検知しようというスタンス・方法論でしかありません。
そのためこれらの開発体制には契約内容が関わってきます。契約の種類は多くありますが、ここで問題となるのは請負契約と準委任契約です。非常に簡略化すると、前者は完成物に対する責任を負う契約で、後者は工数に対する責任を負う契約です。要件定義で言えば、前者は完璧な要件定義に対して責任を負うことになり、後者は要件定義を行う工数に対して責任を負うことになります。
つまり、アジャイル開発をしたいのに請負契約をしてしまった場合、開発企業は要件の変更がどれだけあっても無償でそれに対応しなければならなくなります。これはビジネスとして現実的とは言い難いでしょう。そのため、アジャイル開発であれば基本的には準委任契約でいくべきです。もし請負契約でやるのであれば、そもそも要件の変更を認めない(アジャイルとはしない)か、相当なバッファを見込んだり、要件変更時の対応について現実的な方策を契約で合意するしかないでしょう。
いつ要件定義をする | 要件の変更を認める | 望ましい契約形態 | |
---|---|---|---|
ウォーターフォール | 最初期 | 認めない | どちらでも。開発フェーズによって使い分けることはあり得る。 |
アジャイル | 最初期 | 認める | 準委任 |
【番外編】USBも知らなかった私が独学でプログラミングを勉強してGAFAに入社するまでの話
プログラミング塾に半年通えば、一人前になれると思っているあなた。それ、勘違いですよ。「なぜ間違いなの?」「正しい勉強法とは何なの?」ITを学び始める全ての人に知って欲しい。そう思って書きました。是非読んでみてください。
「フリーランスエンジニア」
近年やっと世間に浸透した言葉だ。ひと昔まえ、終身雇用は当たり前で、大企業に就職することは一種のステータスだった。しかし、そんな時代も終わり「優秀な人材は転職する」ことが当たり前の時代となる。フリーランスエンジニアに高価値が付く現在、ネットを見ると「未経験でも年収400万以上」などと書いてある。これに釣られて、多くの人がフリーランスになろうとITの世界に入ってきている。私もその中の1人だ。数年前、USBも知らない状態からITの世界に没入し、そこから約2年間、毎日勉学を行なった。他人の何十倍も努力した。そして、企業研修やIT塾で数多くの受講生の指導経験も得た。そこで私は、伸びるエンジニアとそうでないエンジニアをたくさん見てきた。そして、稼げるエンジニア、稼げないエンジニアを見てきた。
「成功する人とそうでない人の違いは何か?」
私が出した答えは、「量産型エンジニアか否か」である。今のエンジニア市場には、量産型エンジニアが溢れている!!ここでの量産型エンジニアの定義は以下の通りである。
比較的簡単に学習可能なWebフレームワーク(WordPress, Rails)やPython等の知識はあるが、ITの基本概念を理解していないため、単調な作業しかこなすことができないエンジニアのこと。
多くの人がフリーランスエンジニアを目指す時代に中途半端な知識や技術力でこの世界に飛び込むと返って過酷な労働条件で働くことになる。そこで、エンジニアを目指すあなたがどう学習していくべきかを私の経験を交えて書こうと思った。続きはこちらから、、、、
エンベーダー編集部
エンベーダーは、ITスクールRareTECHのインフラ学習教材として誕生しました。 「遊びながらインフラエンジニアへ」をコンセプトに、インフラへの学習ハードルを下げるツールとして運営されています。
関連記事
2020.02.25
完全未経験からエンジニアを目指す爆速勉強法
USBも知らなかった私が独学でプログラミングを勉強してGAFAに入社するまでの話
- キャリア・学習法
- エンジニア
2022.12.29
【徹底解説】要件定義とは、外部設計との違い
要件定義のためにはまずは顧客の要求をヒアリングするところから始めます。
- アーキテクティング
2024.09.01
問題解決のアプローチを例えで理解する
本記事では、さまざまな問題解決のアプローチを身近な例えを用いて解説し、それぞれの手法の特徴や適用シーンを考察していきます。
- アーキテクティング
2024.06.03
マイクロサービスとは何か?自分の言葉で説明できるようになるには
「マイクロサービス」という言葉は、「マイクロ(小さい)」と「サービス(機能や役割)」を組み合わせたものです。それぞれのサービスが独立して動作し、それぞれが特定の機能を持っています。
- アーキテクティング