「エクストリームプログラミング」

この記事は 「ひとりでアジャイルo0h② Advent Calendar 2021」のday-19です。 adventar.org

day-19は「エクストリームプログラミング」です。

どんな本

アジャイル開発とは何だったのか、その原点を再考する新訳
優れた技術力と良好な人間関係をもってしてソフトウェア開発を成功に導く、ケント・ベックによるXP(エクストリームプログラミング)のすべてを集約した> 名著“Extreme Programming Explained: Embrace Change” の新訳版。アジャイル開発の原点を知る、必読の一冊です。
(amazon.co.jpの書籍紹介より)

「Extreme Programming Explained: Embrace Change (English Edition) 2nd」の翻訳で、出版時期は2004年なので「アジャイルソフトウェア開発宣言」後となります。初版は1999年なので、その前ですね。

いずれにせよ、XPの父と呼ばれる1人であるKent Beck本人が、「アジャイル」や「XP」がその概念も言葉も今ほど一般的に普及させる前に書かれた、「XPとは何であるか」という本です。(それもあって、第2版は初版よりも少し「前提」が変わっている感じもありそうです。)
逆に言えば「アジャイル」という言葉を用いずにXPを説明しきっている本であり、実際に本文中に「アジャイル」という単語は基本的に出てきません*1
「既に存在する概念を取り扱った本ではない」という立ち位置だからこそ、読者に対して本質的な説得力を見せつけてくれるような印象を持ちました。

内容としては、「価値」「原則」を全体の4割近くを割いて説明した後に、「主要プラクティス」「導出プラクティス」があり、ここまでが「第1部 XPの探求」。そして「第2部 XPの哲学」として、哲学やルーツ、現在について語られています。

お気に入りポイントかいつまみ

XPの価値・原則

第1章の書き出しが「エクストリームプログラミング(XP)はソーシャルチェンジである」から始まっているように、XPは根本的で広大なインパクトをもたらす(or与えようとしている)取り組みだと思います。

では、それは一体なにを目指しているものなのか・・・というのが、まさに「価値」の部分に現れてくるのです。

同じく第1章の最初のページにある文言。

XPとは、自分たちのできることをオープンにして、それを実行に移すことだ。そして、そのことを他の人にも認めたり、期待したりすることだ。「自分は頭がいいんだから、ひとりで上を目指せばいい」などという未熟な思い込みを克服することだ。もっと広い世界で成熟した場所を見つけることだ。ビジネスや仕事も含めたコミュニティーのなかで、自分の居場所を見つけることだ。自己超越のプロセスのことだ。そのプロセスのなかで、開発者として最善を尽くすことだ。ビジネスのためになる優れたコードを書くことだ。

Kent Beck,Cynthia Andres. エクストリームプログラミング (Japanese Edition) (Kindle の位置No.273-278). Kindle 版.

何かをするには、個人であれチームであれ「思考」と「行動」が必要になりますが、その裏には「何が良いと判断するか」「どうしたら上手くいくか」といった、色々な指針があります。
そこで「価値」「原則」「プラクティス」という、ハッキリと違うようで似通った部分もあり、どうにも言葉で説明が難しいような概念が出てきたりもします。

ケントは、ここの違い(=何をもたらすか)をまずは明確にした上で、「価値を明確にすることが重要だ」と言います。
ペアプロ、CI、TDDなどの「プラクティス」もそれぞれ単体で非常にパワフルな効果を発揮します。
しかし、XPはもっと壮大な話だと知りました。
それらを意味づけて統合していくものが「価値」です。

価値を明確にすることが重要だ。価値がなければ、プラクティスはすぐに機械的な作業になってしまう。活動そのものが目的となり、本来の目的や方向性が失われてしまう。プログラマーが欠陥を認めないとすると、それは技術ではなく価値の問題だろう。欠陥そのものは技術の問題かもしれないが、欠陥から学ぼうとしないのは、そのプログラマーが学習や自己改善に価値を置いていないことの表れだ。これでは、プログラム、組織、プログラマーのいずれの利益にもならない。プログラマーがプラクティス(ここでは根本原因分析)を効果的な時期に、正当な理由で実行できることが、価値とプラクティスが結び付いているという意味である。価値はプラクティスに目的をもたらしてくれる。

Kent Beck,Cynthia Andres. エクストリームプログラミング (Japanese Edition) (Kindle の位置No.461-468). Kindle 版.

「価値」を咀嚼し、それをプログラマや開発チームの世界に落とし込んだ「原則」、その実装としての「プラクティス」。「価値」を中心に、どれかに偏りすぎることなく抑えていくことが、開発活動にエネルギーを与えてくれる感じがしました。

また、価値は時代が変わっても変化しにくいもので、プラクティスは技術の進化によって陳腐化(当たり前化)したり不要化したりもするのかな?という気もします。

XPについて触れる

XPは、マインド・チーム・技術プラクティス・コミュニケーション・計画・・・と、非常に多岐に渡って話をしています。
スクラムほど普及しなかった」という言説も見かけますが、その理由としては「大きすぎてとっつきにくい」という性質にもあるのかな?と思います。
(反面、スクラムはとても小さくまとまっていると思います。なので「やってみた」とは言いやすい。理論、価値基準をしっかりと理解しそこから実践につながらなければ・・という点では同じことが言えると思いますが。)

訳者あとがきにある説明にも、グッとくるものがあります。

すでにXPのプラクティスを実施しているのであれば、「私のチームはエクストリームですか?」と聞きたくなるかもしれない(第21章参照)。ここがXPの難しいところであり、魅力でもあるのだが、XPが提唱する「価値、原則、プラクティス」は、絶対に守らなければいけない「決まりごと」ではない。したがって、何も考えずに、本書に書かれたとおりに機械的にプラクティスを実施していては、XPとはいえないのである。それはむしろケント・ベックが否定する「計画立案と実行作業の分離」に近い(第18章参照)。XPの本来のあり方とは、「価値、原則、プラクティス」のそれぞれを言葉にして、場合によっては利用者であるあなた自身が自分の言葉を生み出しながら、利用することに他ならない。

Kent Beck,Cynthia Andres. エクストリームプログラミング (Japanese Edition) (Kindle の位置No.3445-3452). Kindle 版.

というわけで、「どういうやり方がXPなのか」は、多くのプラクティスが内包されて入るものの「これがXPだ」と言いにくいのだと思います。
逆に、テストファーストプログラミングや継続的インテグレーションリファクタリングなどの非常に多くの個別的なプラクティスについては、多くのチームで取り入れられているのではないでしょうか。もはやXPよりも有名になっているものすらあるかも知れません。

自分自身、なんか「良い開発のやり方」を知るたびに「XPのプラクティスの1つに数えられているものだ」と言われるような経験を幾度となくしていました。
XPってなんなんだ・・・・それを、やっと雰囲気をつかめた気がします。

多くのアジャイルの本がXPを貴重としている感じがあるのも、頷けるような気がしました。完成度というか網羅性みたいなものが凄いんだな、と・・・

まとめ

スクラムに最初に触れた当初は、XPといえばTDDやCI/CDとかでしょ?技術的プラクティスを補うものだよね、なんてイメージを持っていました。
それが、少し勉強をし始めると、「なんだかアジャイルの人たちの間ではXPって大人気だな、最終的にはXPに至りそうな雰囲気すらあるな」と感じ始めます。
そうした時に覚える「何があるんだろう、不思議だなー」という感情に答えてくれる1冊でした。

アジャイルが〜とか、ましてXPが〜なんて関係なく、現代のプログラミングを仕事にしている人にはひとまず読んでみる価値がある1冊なのでは・・・とすら思います。
やはり、様々なパターン・ランゲージと同様に「経験的に導かれた上手くいくプラクティス、それを全体性を持ってまとめあげた体系ないし集合」という側面がXPにもあります。前者を掻い摘んで見るだけでも言いし、「道標」として後者について = 価値や原則について触れてみることには大きな意義があると思うのです。

で、初手としては多少ボリューミーな感じもあるかもしれませんが、ここまで丁寧に描かれた本で読みやすくまとまっているとなれば、「ちょっと頑張って読んで見る」くらいには値する本なのではないかな・・
実際、個人的にはボリュームとしても難易度としても苦痛に感じるところも無く、楽しく読み進めることが出来ました。

特に「価値」「原則」のあたりは、折に触れて読み返してみたいなぁという気もします。

*1:Kindle for macで単語検索をかけた感じだと・・・。もしかしたら見落としているかも。とはいえ、本書のスタンスを理解する上ではクリティカルな見落としや誤解でも無い気がする