---
title: エクストリームプログラミング―基本に立ち戻れ―
tags:  #ub_techbase  
author: [Masanori Kado](https://www.docswell.com/user/kdmsnr)
site: [Docswell](https://www.docswell.com/)
thumbnail: https://bcdn.docswell.com/page/4JQX1YYYEP.jpg?width=480
description: https://uzabase-tech.connpass.com/event/249180/
published: June 24, 22
canonical: https://www.docswell.com/s/kdmsnr/Z97LLK-xp-back-to-the-basics
---
# Page. 1

![Page Image](https://bcdn.docswell.com/page/4JQX1YYYEP.jpg)

エクストリームプログラミング
―基本に立ち戻れ―
2022年6月24日
techbase-vol1
エクストリームプログラミングで見える開発風景
ワイクル株式会社
角征典 （かど まさのり） @kdmsnr
kado.masanori@waicrew.com


# Page. 2

![Page Image](https://bcdn.docswell.com/page/K746RWWZE1.jpg)

自己紹介
‣
‣
角 征典（@kdmsnr）
•
「XP白本」の翻訳
•
技術書の翻訳・執筆
ワイクル株式会社 代表取締
•
‣
アジャイル開発／リーンスタートアップの導入支援
東京工業大学 環境・社会理工学院 特任講師
•
エンジニアのためのデザイン思考
2


# Page. 3

![Page Image](https://bcdn.docswell.com/page/LJ1VQYYDEG.jpg)

XPに関するこれまでの講演
https://www.docswell.com/user/kdmsnr
https://www.youtube.com/watch?v=YRFWWS_2Epo
3


# Page. 4

![Page Image](https://bcdn.docswell.com/page/GJWLMGG8E2.jpg)

基本に立ち戻れ
4


# Page. 5

![Page Image](https://bcdn.docswell.com/page/4EZMQLL9J3.jpg)

エクストリームプログラミング（XP）は
ソーシャルチェンジである
See Also: https://xtech.nikkei.com/it/article/NEWS/20060906/247316/
5


# Page. 6

![Page Image](https://bcdn.docswell.com/page/Y76N6WWD7V.jpg)

XPの前日譚（1984-）
http://wiki.c2.com/?WardAndKent
6


# Page. 7

![Page Image](https://bcdn.docswell.com/page/G7556MM874.jpg)

XPの前日譚（1984-）
Wardが私の情報源。
私は彼が自然にやっていた
ことを説明しているだけ。
http://wiki.c2.com/?WardAndKent
6


# Page. 8

![Page Image](https://bcdn.docswell.com/page/9J2NM99VER.jpg)

XPの前日譚（1984-）
Kentの最大の功績は
我々が発見したものを
極限まで高めてくれたこと。
Wardが私の情報源。
私は彼が自然にやっていた
ことを説明しているだけ。
http://wiki.c2.com/?WardAndKent
6


# Page. 9

![Page Image](https://bcdn.docswell.com/page/DEYPX44QEM.jpg)

Wardとの対話による自己研鑽
https://en.wikipedia.org/wiki/Ward_Cunningham
7


# Page. 10

![Page Image](https://bcdn.docswell.com/page/VJN51YY278.jpg)

Wardとの対話による自己研鑽
•
本を読むのが遅く、学校ではそれほど優秀で
はありませんでした。でも、先生の話を予測
しながら聞くのは好きでした。
•
今でも人の話を聞いたり、コンピュータに耳
を傾けたりすることが好きです。
https://en.wikipedia.org/wiki/Ward_Cunningham
•
プログラミングしているときの自分の気持ち
を話すことにも抵抗はありません。
•
Kentも同じでした。だから、2人でただ一緒
に座って、問題を解いていました。
7


# Page. 11

![Page Image](https://bcdn.docswell.com/page/YE9Y5PPDJ3.jpg)

コミュニケーション
フィードバック
8


# Page. 12

![Page Image](https://bcdn.docswell.com/page/GE86YDD57D.jpg)

あなたの会社に
対話できる相手はいますか？🗣
9


# Page. 13

![Page Image](https://bcdn.docswell.com/page/LEL94MM3JR.jpg)

対話する相手重要
私の師匠：高橋征義（@takahashim）
https://www.youtube.com/watch?v=7Yeir75CoPc
10


# Page. 14

![Page Image](https://bcdn.docswell.com/page/4JMZKYYMEW.jpg)

XPの誕生
11


# Page. 15

![Page Image](https://bcdn.docswell.com/page/PJR6X99L79.jpg)

C3プロジェクト（1996）
エクストリームプログラミングの正式な誕生
https://bliki-ja.github.io/C3/
Martin Fowler
アナリスト
Kent Beck
技術コンサルタント
Ron Je ries
XPコーチ（フルタイム）
https://en.wikipedia.org/wiki/Martin_Fowler_(software_engineer)
https://en.wikipedia.org/wiki/Kent_Beck
https:// ic.kr/p/72ij3L
ff
fl
12


# Page. 16

![Page Image](https://bcdn.docswell.com/page/PEXM6Q367X.jpg)

C3参加のきっかけは LISTSERV
https://youtu.be/4fkUyQHToGI?t=1623 (2021)
13


# Page. 17

![Page Image](https://bcdn.docswell.com/page/3EKG19YGJD.jpg)

XPは人間中心の規律（1998）
Beck, K. (1998, March). Extreme programming: A humanistic discipline of software development.
In International Conference on Fundamental Approaches to Software Engineering (pp. 1-6). Springer, Berlin, Heidelberg.
14


# Page. 18

![Page Image](https://bcdn.docswell.com/page/L73NQW9575.jpg)

ソフトウェア開発は人間のプロセス
人間は恐怖を感じる
恐怖は経験によって払拭される
Aggressive（積極性）が必要
15


# Page. 19

![Page Image](https://bcdn.docswell.com/page/87DW9KGYJG.jpg)

勇気
16


# Page. 20

![Page Image](https://bcdn.docswell.com/page/VJP9ZK32E8.jpg)

Kent Beckの書いたXPの本
1999
2000
2004
第1版と第2版はまったく違う本である。
第1版では、技術的な限界をプログラマに再発見するように促した。
第2版では、トレードオフのなかで責任を持って仕事をするようにすべての人に呼びかけた。
https://twitter.com/KentBeck/status/1488901187990556672
17


# Page. 21

![Page Image](https://bcdn.docswell.com/page/2EVMWV4XEQ.jpg)

第1版は敬意を欠いていた（2015）
The 1st ed.is very programmer centric.
It was snotty, disrespectful toward other people.
第1版は非常にプログラマ中心だった。
傲慢で他の人たちへの敬意を欠いていた。
https://youtu.be/cGuTmOUdFbo?t=1602
18


# Page. 22

![Page Image](https://bcdn.docswell.com/page/57GGDL1R7L.jpg)

リスペクト
19


# Page. 23

![Page Image](https://bcdn.docswell.com/page/4EQX1YDY7P.jpg)

【宣伝】第2版とクリーンアジャイル
2020年代はこの2冊で十分ですよ！（わかってくださいよ*）
*『ブレードランナー』（1982）の引用です（念の為）
20


# Page. 24

![Page Image](https://bcdn.docswell.com/page/KJ46RWZZ71.jpg)

基本に立ち戻れ
21


# Page. 25

![Page Image](https://bcdn.docswell.com/page/LE1VQYRD7G.jpg)

エクストリーム✨
22


# Page. 26

![Page Image](https://bcdn.docswell.com/page/GEWLMG1872.jpg)

コリン・ターンブルの研究
Kent Beck, Cynthia Andres『エクストリームプログラミング』オーム社
※『山の民』のほうは真偽が怪しいらしい
23


# Page. 27

![Page Image](https://bcdn.docswell.com/page/47ZMQLP9E3.jpg)

極限まで高める
映画『スパイナル・タップ』予告編
24
https://www.youtube.com/watch?v=A-FducsaVww


# Page. 28

![Page Image](https://bcdn.docswell.com/page/YJ6N6WMDJV.jpg)

ソフトウェアで大切なこと
‣コードを書くこと
• 当たり前（！）
‣テストすること
• コードが完成したかどうかを教え
てくれる。
‣話を聞くこと
• 何のためのコードを書くのか？
‣設計すること
• コードとテストだけではいずれ行
き詰まる。賢くやる必要がある。
http://wiki.c2.com/?ExtremeProgramming
25


# Page. 29

![Page Image](https://bcdn.docswell.com/page/GJ556MZ8J4.jpg)

ソフトウェアで大切なこと
‣コードを書くこと
‣話を聞くこと
• 当たり前（！）
• 何のためのコードを書くのか？
‣テストすること
‣設計すること
• コードが完成したかどうかを教え
てくれる。
• コードとテストだけではいずれ行
き詰まる。賢くやる必要がある。
これがソフトウェアのすべて。
違うことを言う人は、何かを売りつけようとする人。
http://wiki.c2.com/?ExtremeProgramming
26


# Page. 30

![Page Image](https://bcdn.docswell.com/page/9E2NM9RV7R.jpg)

ソフトウェアで大切なこと
‣コードを書くこと
‣話を聞くこと
• 当たり前（！）
• 何のためのコードを書くのか？
‣テストすること
‣設計すること
• コードが完成したかどうかを教え
てくれる。
• コードとテストだけではいずれ行
き詰まる。賢くやる必要がある。
これがソフトウェアのすべて。
違うことを言う人は、何かを売りつけようとする人。
http://wiki.c2.com/?ExtremeProgramming
27


# Page. 31

![Page Image](https://bcdn.docswell.com/page/D7YPX4DQ7M.jpg)

ソフトウェアで大切なこと
‣コードを書くこと
‣話を聞くこと
コミュニ
• 何のためのコードを書くのか？
ケーション
• 当たり前（！）
‣テストすること
‣設計すること
• コードが完成したかどうかを教え
てくれる。
• コードとテストだけではいずれ行
き詰まる。賢くやる必要がある。
これがソフトウェアのすべて。
違うことを言う人は、何かを売りつけようとする人。
http://wiki.c2.com/?ExtremeProgramming
27


# Page. 32

![Page Image](https://bcdn.docswell.com/page/VEN51Y62J8.jpg)

ソフトウェアで大切なこと
‣コードを書くこと
‣話を聞くこと
コミュニ
• 何のためのコードを書くのか？
ケーション
• 当たり前（！）
‣テストすること
‣設計すること
• コードが完成したかどうかを教え
フィード
てくれる。
バック
• コードとテストだけではいずれ行
き詰まる。賢くやる必要がある。
これがソフトウェアのすべて。
違うことを言う人は、何かを売りつけようとする人。
http://wiki.c2.com/?ExtremeProgramming
27


# Page. 33

![Page Image](https://bcdn.docswell.com/page/Y79Y5PLDE3.jpg)

ソフトウェアで大切なこと
‣コードを書くこと
‣話を聞くこと
• 当たり前（！） 勇気(積極性)
‣テストすること
‣設計すること
• コードが完成したかどうかを教え
フィード
てくれる。
バック
コミュニ
• 何のためのコードを書くのか？
ケーション
• コードとテストだけではいずれ行
き詰まる。賢くやる必要がある。
これがソフトウェアのすべて。
違うことを言う人は、何かを売りつけようとする人。
http://wiki.c2.com/?ExtremeProgramming
27


# Page. 34

![Page Image](https://bcdn.docswell.com/page/G786YDX5JD.jpg)

ソフトウェアで大切なこと
‣コードを書くこと
‣話を聞くこと
• 当たり前（！） 勇気(積極性)
‣テストすること
‣設計すること
• コードが完成したかどうかを教え
フィード
てくれる。
バック
コミュニ
• 何のためのコードを書くのか？
ケーション
• コードとテストだけではいずれ行
シンプリ
シティ
き詰まる。賢くやる必要がある。
これがソフトウェアのすべて。
違うことを言う人は、何かを売りつけようとする人。
http://wiki.c2.com/?ExtremeProgramming
27


# Page. 35

![Page Image](https://bcdn.docswell.com/page/L7L94M83ER.jpg)

ソフトウェアで大切なこと
‣コードを書くこと
‣話を聞くこと
• 当たり前（！） 勇気(積極性)
‣テストすること
‣設計すること
• コードが完成したかどうかを教え
フィード
てくれる。
バック
コミュニ
• 何のためのコードを書くのか？
ケーション
• コードとテストだけではいずれ行
シンプリ
シティ
き詰まる。賢くやる必要がある。
これがソフトウェアのすべて。
リスペクト
違うことを言う人は、何かを売りつけようとする人。
http://wiki.c2.com/?ExtremeProgramming
27


# Page. 36

![Page Image](https://bcdn.docswell.com/page/4EMZKY6M7W.jpg)

ソフトウェアで大切なこと
‣コードを書くこと
‣話を聞くこと
• 当たり前（！） 勇気(積極性)
コミュニ
• 何のためのコードを書くのか？
ケーション
‣テストすること
設計すること
‣
価値（Values）
• コードが完成したかどうかを教え
• コードとテストだけではいずれ行
シンプリ
フィード
てくれる。
バック
シティ
き詰まる。賢くやる必要がある。
これがソフトウェアのすべて。
リスペクト
違うことを言う人は、何かを売りつけようとする人。
http://wiki.c2.com/?ExtremeProgramming
27


# Page. 37

![Page Image](https://bcdn.docswell.com/page/PER6X9PLJ9.jpg)

XPプラクティスの「サークルオブライフ」
ビジネスに関すること
チームに関すること
技術に関すること
チーム全体
継続的
インテグレーション
テスト駆動
共同所有
開発（TDD）
受け入れテスト
協力的プログラミング
メタファー
リファクタリング
シンプルな
設計
計画ゲーム
持続可能なペース
小さなリリース
Bob Martin『Clean Agile』図1.8 サークルオブライフ
※プラクティスは他にも考えられる
28


# Page. 38

![Page Image](https://bcdn.docswell.com/page/P7XM6QN6JX.jpg)

XPプラクティスの「サークルオブライフ」
ビジネスに関すること
チームに関すること
技術に関すること
チーム全体
継続的
インテグレーション
テスト駆動
共同所有
開発（TDD）
受け入れテスト
協力的プログラミング
メタファー
リファクタリング
シンプルな
設計
計画ゲーム
持続可能なペース
小さなリリース
Bob Martin『Clean Agile』図1.8 サークルオブライフ
※プラクティスは他にも考えられる
28


# Page. 39

![Page Image](https://bcdn.docswell.com/page/37KG19NGED.jpg)

ソフトウェアで大切なこと
‣コードを書くこと
‣話を聞くこと
• 当たり前（！） 勇気(積極性)
‣テストすること
‣設計すること
• コードが完成したかどうかを教え
フィード
てくれる。
バック
コミュニ
• 何のためのコードを書くのか？
ケーション
• コードとテストだけではいずれ行
シンプリ
シティ
き詰まる。賢くやる必要がある。
これがソフトウェアのすべて。
リスペクト
違うことを言う人は、何かを売りつけようとする人。
http://wiki.c2.com/?ExtremeProgramming
29


# Page. 40

![Page Image](https://bcdn.docswell.com/page/LJ3NQWV5J5.jpg)

ソフトウェアで大切なこと
‣コードを書くこと
‣話を聞くこと
• 当たり前（！） 勇気(積極性)
‣テストすること
コミュニ
• 何のためのコードを書くのか？
ケーション
‣設計すること
• コードが完成したかどうかを教え
フィード
てくれる。
バック
受け入れ
テスト
• コードとテストだけではいずれ行
シンプリ
シティ
き詰まる。賢くやる必要がある。
これがソフトウェアのすべて。
リスペクト
違うことを言う人は、何かを売りつけようとする人。
http://wiki.c2.com/?ExtremeProgramming
29


# Page. 41

![Page Image](https://bcdn.docswell.com/page/8JDW9K8YEG.jpg)

ソフトウェアで大切なこと
‣コードを書くこと
‣話を聞くこと
• 当たり前（！） 勇気(積極性)
‣テストすること
協力的
プログラミ
ング
• コードが完成したかどうかを教え
フィード
てくれる。
バック
受け入れ
テスト
コミュニ
• 何のためのコードを書くのか？
ケーション
‣設計すること
• コードとテストだけではいずれ行
シンプリ
シティ
き詰まる。賢くやる必要がある。
これがソフトウェアのすべて。
リスペクト
違うことを言う人は、何かを売りつけようとする人。
http://wiki.c2.com/?ExtremeProgramming
29


# Page. 42

![Page Image](https://bcdn.docswell.com/page/VEP9ZK8278.jpg)

ソフトウェアで大切なこと
‣コードを書くこと
‣話を聞くこと
• 当たり前（！） 勇気(積極性)
‣テストすること
協力的
プログラミ
ング
• コードが完成したかどうかを教え
フィード
てくれる。
バック
受け入れ
テスト
コミュニ
• 何のためのコードを書くのか？
ケーション
‣設計すること
• コードとテストだけではいずれ行
シンプリ
シンプル
シティ
き詰まる。賢くやる必要がある。
な設計
これがソフトウェアのすべて。
リスペクト
違うことを言う人は、何かを売りつけようとする人。
http://wiki.c2.com/?ExtremeProgramming
29


# Page. 43

![Page Image](https://bcdn.docswell.com/page/27VMWVNX7Q.jpg)

ソフトウェアで大切なこと
‣コードを書くこと
‣話を聞くこと
• 当たり前（！） 勇気(積極性)
‣テストすること
協力的
プログラミ
ング
• コードが完成したかどうかを教え
フィード
てくれる。
バック
TDD +
リファクタリ
ング
受け入れ
テスト
コミュニ
• 何のためのコードを書くのか？
ケーション
‣設計すること
• コードとテストだけではいずれ行
シンプリ
シンプル
シティ
き詰まる。賢くやる必要がある。
な設計
これがソフトウェアのすべて。
リスペクト
違うことを言う人は、何かを売りつけようとする人。
http://wiki.c2.com/?ExtremeProgramming
29


# Page. 44

![Page Image](https://bcdn.docswell.com/page/5JGGDLKRJL.jpg)

受け入れテスト
30


# Page. 45

![Page Image](https://bcdn.docswell.com/page/47QX1YNYJP.jpg)

ストーリーを中心に置く
記入
記入 ＆ 決定
ユーザーストーリー
プロダクトオーナー
ガイド
開発者
プロダクトマネージャー
対話的ストーリー
https://bliki-ja.github.io/ConversationalStories/
31


# Page. 46

![Page Image](https://bcdn.docswell.com/page/KE46RWGZJ1.jpg)

ストーリーから受け入れテストへ
記入
記入 ＆ 決定
ユーザーストーリー
プロダクトオーナー
プロダクトマネージャー
ガイド
開発者
エッジケースと
テスト条件を記入
テスト自動化
テスター
対話的ストーリー
https://bliki-ja.github.io/ConversationalStories/
32


# Page. 47

![Page Image](https://bcdn.docswell.com/page/L71VQYDDJG.jpg)

協力的プログラミング
33


# Page. 48

![Page Image](https://bcdn.docswell.com/page/G7WLMGY8J2.jpg)

ペアプログラミング
‣
Fred Brooks「大学院生時代(1953-56)にはじめてペアプログラミングをやってみた」
‣
Richard P. Gabriel「MIT人工知能研究所時代（1972-73）一般的に実施されていた」
‣
Larry Constantine「1980年代の&quot;ダイナミックデュオ&quot;という開発方法」
‣
Jim Coplien「1995年、ベル研究所におけるペアによる開発（組織パターン）」
出典：『Pair Programming Illuminated』Laurie Williams, Robert R. Kessler
昔からあるプログラミング方法だった
『Clean Coder』Bob C. Martin
34


# Page. 49

![Page Image](https://bcdn.docswell.com/page/4JZMQLX973.jpg)

エゴレスプログラミング
‣
Ward Cunningham：Kentと私が一緒に仕事をしていたとき、自分たちが
やってきたことをふりかえり、そういう言葉（エゴレスプログラミング）を
使っていたことがある。私たち2人は、どちらも大きなエゴを持っている。で
も、一緒に仕事をしているときは、それを脇に置くようにしている。2人の間
にはエゴがないんだ。でも、2人としては非常に大きなエゴがあったよ。
35


# Page. 50

![Page Image](https://bcdn.docswell.com/page/YE6N6W4DEV.jpg)

シンプルな設計
36


# Page. 51

![Page Image](https://bcdn.docswell.com/page/GE556MQ8E4.jpg)

Kent Beckの設計のルール
‣テストをパスさせる
• テスト可能なコードは「分離」されたコード
‣意図を明らかにする
• リーダブルコード、ユビキタス言語
‣重複を排除する
• DRY
‣要素を最小限にする
https://bliki-ja.github.io/BeckDesignRules/
37


# Page. 52

![Page Image](https://bcdn.docswell.com/page/972NM9PVJR.jpg)

TDD + リファクタリング
38


# Page. 53

![Page Image](https://bcdn.docswell.com/page/DJYPX45QJM.jpg)

TDDのRGRサイクル
(1) 失敗するテストを書く
(3) コードをクリーンにする
(2) テストをパスさせるコードを書く
https://blog.cleancoder.com/uncle-bob/2014/12/17/TheCyclesOfTDD.html
39


# Page. 54

![Page Image](https://bcdn.docswell.com/page/V7N51YN2E8.jpg)

TDDの手順「変換の優先順位説」
行き詰まらないための変換の順番
1. {} → Nil
5. 値 → リスト
2. Nil → 固定値
6. 選択 → 反復
3. 固定値 → 変数
7. 文 → 再帰
4. 無条件 → 選択
8. 値 → 変異値
* Bob C. Martin『Clean Craftsmanship』ch04
* https://blog.cleancoder.com/uncle-bob/2013/05/27/TheTransformationPriorityPremise.html
40


# Page. 55

![Page Image](https://bcdn.docswell.com/page/YJ9Y5PRD73.jpg)

TDDはプロの前提条件
TDDを実践していなければ、プロのソフトウェア開発者になれない。
私は本気だ。というより、それが真実になりつつある。
Bob C. Martin『Clean Craftsmanship』
41


# Page. 56

![Page Image](https://bcdn.docswell.com/page/GJ86YDW5ED.jpg)

基本に立ち戻れ
42


# Page. 57

![Page Image](https://bcdn.docswell.com/page/LJL94MN37R.jpg)

ソフトウェアで大切なこと
‣コードを書くこと
‣話を聞くこと
• 当たり前（！） 勇気(積極性)
‣テストすること
協力的
プログラミ
ング
• コードが完成したかどうかを教え
フィード
てくれる。
バック
TDD +
リファクタリ
ング
受け入れ
テスト
コミュニ
• 何のためのコードを書くのか？
ケーション
‣設計すること
• コードとテストだけではいずれ行
シンプリ
シンプル
シティ
き詰まる。賢くやる必要がある。
な設計
これがソフトウェアのすべて。
リスペクト
違うことを言う人は、何かを売りつけようとする人。
http://wiki.c2.com/?ExtremeProgramming
43


# Page. 58

![Page Image](https://bcdn.docswell.com/page/47MZKYXMJW.jpg)

すべてをエクストリームにしよう
映画『スパイナル・タップ』予告編
44
https://www.youtube.com/watch?v=A-FducsaVww


# Page. 59

![Page Image](https://bcdn.docswell.com/page/P7R6X9NLE9.jpg)

XPとは、あなたが自分の理想について考え、
その理想にもとづいて行動するための方法だ。
Kent Beck, Cynthia Andres『エクストリームプログラミング』オーム社
45


# Page. 60

![Page Image](https://bcdn.docswell.com/page/PJXM6Q86EX.jpg)

快適に過ごせる世界を求めているのであれば、
バランスのとれた生活と順調な仕事をしよう。
Kent Beck, Cynthia Andres『エクストリームプログラミング』オーム社
46


# Page. 61

![Page Image](https://bcdn.docswell.com/page/3JKG19KG7D.jpg)

エクストリームプログラミング（XP）は
ソーシャルチェンジである
See Also: https://xtech.nikkei.com/it/article/NEWS/20060906/247316/
47


# Page. 62

![Page Image](https://bcdn.docswell.com/page/LE3NQWZ5E5.jpg)

「誰と働くか」超重要
48


# Page. 63

![Page Image](https://bcdn.docswell.com/page/8EDW9KRY7G.jpg)

http://wiki.c2.com/?WardAndKent
49


# Page. 64

![Page Image](https://bcdn.docswell.com/page/V7P9ZKW2J8.jpg)

https://www.youtube.com/watch?v=7Yeir75CoPc
50


# Page. 65

![Page Image](https://bcdn.docswell.com/page/2JVMWV8XJQ.jpg)

あなたの理想とする順調な仕事は？
51


