アジャイルとエクストリームプログラミングの関係について、同僚と色々と話をした。この記事は自分自身の理解内容をメモする目的で書いた。

アジャイルとは何か?

「アジャイル」の原典はアジャイルマニフェストであり、ここに書かれている価値観のことを「アジャイル」と言う。

私たちは、ソフトウェア開発の実践 あるいは実践を手助けをする活動を通じて、 よりよい開発方法を見つけだそうとしている。 この活動を通して、私たちは以下の価値に至った。

  • プロセスやツールよりも 個人と対話 を、
  • 包括的なドキュメントよりも 動くソフトウェア を、
  • 契約交渉よりも 顧客との協調 を、
  • 計画に従うことよりも 変化への対応 を、

価値とする。すなわち、左記のことがらに価値があることを 認めながらも、私たちは右記のことがらにより価値をおく。

ここで気づくことは 2 点ある。

ひとつは旧来のソフトウェア開発手法を否定していないことだ。「左記のことがらに価値があることを認めながらも」と言っている。旧来の「プロセスやツール、ドキュメント」などにも価値を認めているのである。単に「それより価値のあるものがある」と述べているに過ぎない。

もうひとつは「How」がまったく書かれていないことである。すなわち「で、どうすればいいの?」についてはアジャイルマニフェストの範囲外、ということである。そして、この How にあたる部分が「スクラム」であり「エクストリームプログラミング」である。

スクラムとは何か?

「スクラム」の原典はスクラムガイドである。この資料ではスクラムの定義を次のようにしている。

スクラムとは、複雑な問題に対応する適応型のソリューションを通じて、⼈々、チーム、組織が価値を⽣み出すための軽量級フレームワークである。

この「軽量級フレームワーク」はソフトウェア開発に限定したものではない。「スクラムガイド」本文には “ソフトウェア” や “プログラム” という言葉は現れない (注: 前書きに一箇所だけ出てくる)。つまり、スクラムはあらゆる種類のモノ作りに対応しているが、これをソフトウェア開発に適用するとなると、それ相応の解釈が必要になる。

この解釈の違いがスクラム開発のバラエティを生んでいる。つまり「スクラムで開発をしています」と言うチームが複数あるとき、そのプラクティスの詳細は異なることが多々ある。

エクストリームプログラミングとは何か?

「エクストリームプログラミング」の原典は同名の書籍である。この書籍の第七章の見出しは次の通りである。

7.1 全員同席(Sit Together)
7.2 チーム全体(Whole Team)
7.3 情報満載のワークスペース(Informative Workspace)
7.4 いきいきとした仕事(Energized Work)
7.5 ペアプログラミング(Pair Programming)
7.6 ストーリー(Stories)
7.7 週次サイクル(Weekly Cycle)
7.8 四半期サイクル(Quarterly Cycle)
7.9 ゆとり(Slack)
7.10 10 分ビルド(Ten-Minute Build)
7.11 継続的インテグレーション(Continuous Integration)
7.12 テストファーストプログラミング(Test-First Programming)
7.13 インクリメンタルな設計(Incremental Design)
7.14 それから……

「ペアプログラミング」や「継続的インテグレーション」、「テストファーストプログラミング」という題目からわかる通り、これはソフトウェア開発に特化したアジャイルの実践手法である。この点がスクラムとは大きく違うところだ。「エクストリームプログラミングで開発をしています」という人たちは誰もがペアプログラミングをしているし、テストファーストプログラミングをしている。ここに解釈のブレが生じる余地はない。

リーン XP とは何か?

VMware Tanzu Labs (旧 Pivotal Labs) が採用している開発手法に「リーン XP」がある。「リーン・XP・UCDの3手法が鍵、DXをぐいぐい引っ張る開発チームの作り方」という記事に次の記載がある。

Pivotalでは、様々な手法を活用しながら顧客企業のDXプロジェクトを支援しています。特に、ソフトウエア開発のプロセスを「リーンXP」と呼んでいます。リーンXPはPivotalの完全なオリジナルではなく、「リーンスタートアップ(Lean Startup)」「エクストリーム・プログラミング(Extreme Programming、XP)」「ユーザー中心デザイン(User Centered Design、UCD)」の3つの手法を組み合わせたものです。以下、3つの手法の概要を解説します。

リーン XP

ソフトウェアの企画からデザイン、実装までを一気通貫で見るためにはエクストリームプログラミングだけでなく、複数のテクニックを組み合わせることが有用だと考えて「リーン XP」を採用しているのだと思う。