Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
プログラミングどうやる? ~テスト駆動開発から学ぶ達人の型~
Search
Atsushi Okui
September 21, 2025
Programming
0
410
プログラミングどうやる? ~テスト駆動開発から学ぶ達人の型~
Atsushi Okui
September 21, 2025
Tweet
Share
More Decks by Atsushi Okui
See All by Atsushi Okui
(社内向け)『Accelerate State of DevOps Report 2022』翻訳とまとめ
a_okui
0
2.5k
コード品質がもたらすビジネスへの影響(社内向け翻訳、まとめ)
a_okui
0
350
(社内向け)『Accelerate State of DevOps Report 2021』翻訳とまとめ
a_okui
0
610
Other Decks in Programming
See All in Programming
Amazon ECS Managed Instances が リリースされた!キャッチアップしよう!! / Let's catch up Amazon ECS Managed Instances
cocoeyes02
0
120
Designing Repeatable Edits: The Architecture of . in Vim
satorunooshie
0
200
開発組織の戦略的な役割と 設計スキル向上の効果
masuda220
PRO
10
2k
kiroとCodexで最高のSpec駆動開発を!!数時間で web3ネイティブなミニゲームを作ってみたよ!
mashharuki
0
1k
CSC305 Lecture 12
javiergs
PRO
0
240
Pythonに漸進的に型をつける
nealle
1
140
pnpm に provenance のダウングレード を検出する PR を出してみた
ryo_manba
1
170
SidekiqでAIに商品説明を生成させてみた
akinko_0915
0
110
O Que É e Como Funciona o PHP-FPM?
marcelgsantos
0
240
CSC305 Lecture 10
javiergs
PRO
0
320
NixOS + Kubernetesで構築する自宅サーバーのすべて
ichi_h3
0
1.3k
The Past, Present, and Future of Enterprise Java
ivargrimstad
0
440
Featured
See All Featured
Being A Developer After 40
akosma
91
590k
実際に使うSQLの書き方 徹底解説 / pgcon21j-tutorial
soudai
PRO
191
56k
Building Applications with DynamoDB
mza
96
6.7k
Facilitating Awesome Meetings
lara
57
6.6k
Understanding Cognitive Biases in Performance Measurement
bluesmoon
31
2.7k
Building a Scalable Design System with Sketch
lauravandoore
463
33k
ReactJS: Keep Simple. Everything can be a component!
pedronauck
666
130k
Done Done
chrislema
186
16k
GitHub's CSS Performance
jonrohan
1032
470k
Agile that works and the tools we love
rasmusluckow
331
21k
Scaling GitHub
holman
463
140k
Building Flexible Design Systems
yeseniaperezcruz
329
39k
Transcript
プログラミングどうやる? テスト駆動開発から学ぶ達人の型
自己紹介 Atsushi Okui (@blue32a_jp) ソフトウェアエンジニア / Webアプリケーション エンジニア / PHPer
関心:設計、コード品質、リファクタリング、テス ト、モデリング
主題 プログラミングどうやる?
プログラミングで目指すゴール 『動作するきれいなコード』
「動作する」のゴール • ステークホルダーからの要求 • 仕様書、設計書 • Issue • etc.
「きれいな」のゴール • 『リーダブルコード』 • SOLID原則 • デザインパターン • **** アーキテクチャ
• etc.
動作するきれいなコード
ゴールの情報は様々あるが、 どうやって行くかの情報はあま り無かったりする
プログラミングどうやる? どうやってゴール(動作するきれいなコード) を目指す?
副題 テスト駆動開発から学ぶ達人の型
テスト駆動開発:? 達人:?👈 型:?
テスト駆動開発の考案者 Kent Beckさん
テスト駆動開発:? 達人:Kent Beckさん 型:?
テスト駆動開発:?👈 達人:Kent Beckさん 型:?
混同されやすい自動テスト関係の概念 ”テスト駆動開発(TDD:Test-Driven Development)という 名前は、現在では多くのエンジニアに広まっていますが、 そこにはやや混乱も見られます。「 TDD」という言葉が指し ているものが人によって異なるのです。自動テストを書くこ とをTDDと呼ぶ人もいれば、テストを先に書くこと(テスト ファースト)をTDDと呼ぶ人もいます。TDDの利点を説く人 の説明をよく読んでみると、自動テストの利点や、テスト
ファーストの利点のことを述べているような場面に出会うこ とも多々あります。” 保守しやすく変化に強いソフトウェアを支える柱 自動テストとテスト駆動開発 、その全体像 https://gihyo.jp/article/2024/01/automated-test-and-tdd
テスト駆動開発の定義 ”Test-driven development is a programming workflow.” 訳)”テスト駆動開発(TDD: Test-Driven Development)はプログラミングのワークフロー
だ。” 【翻訳】テスト駆動開発の定義 https://t-wada.hatenablog.jp/entry/canon-tdd-by-kent-beck Canon TDD https://tidyfirst.substack.com/p/canon-tdd
テスト駆動開発:プログラミングのワークフロー 達人:Kent Beckさん 型:?
テスト駆動開発:プログラミングのワークフロー 達人:Kent Beckさん 型:?👈
「型」 我々が慣用的に使用する「型」という言葉に二つの異なる視 点が存在し、相反する概念を内包している。 • 物事の枠組みや分類方法としての型 • 叡智の表現・伝達方法としての型 「型」の再考 https://kyoto-up.or.jp/books/9784814003648.html
物事の枠組みや分類方法としての型 叡智の表現・伝達方法としての型
テスト駆動開発:プログラミングのワークフロー 達人:Kent Beckさん 型:達人の叡智
プログラミングのワークフローを通して、 Kent Beckさんの叡智を学ぶ
ワークフロー図解 Canon TDD https://tidyfirst.substack.com/p/canon-tdd
テスト駆動開発で見逃されたもの
テスト駆動開発とは何か ”テスト駆動開発(TDD)はテストファーストの利点を伸ば し、欠点を補うために生まれました。設計面でのテスト ファーストの強みを活かしつつ、保守性を上げるためにリ ファクタリングが組み込まれています。またやりすぎ、考え すぎ(スコープクリープ)を避けるために、イテレーティブな 開発手順とインクリメンタルな設計の要素が組み込まれま した。” 保守しやすく変化に強いソフトウェアを支える柱 自動テストとテスト駆動開発 、その全体像
https://gihyo.jp/article/2024/01/automated-test-and-tdd
テスト駆動開発のステップ1 ”多くの人が、書籍『テスト駆動開発』の中に出てくるこのステップ1(*)を見逃しているよう だ。「TDDはいきなりコードを書き始める。いつ終わるのかも全然見通せない」という意 見は、全くの見当外れだ。” * ステップ1. テストリスト 【翻訳】テスト駆動開発の定義 https://t-wada.hatenablog.jp/entry/canon-tdd-by-kent-beck Canon
TDD https://tidyfirst.substack.com/p/canon-tdd
None
None
None
テスト駆動開発の”テスト”が注目され、 TODOリストは見逃されがち
テスト駆動開発のサイクル
Red Green Refactor
Red Green Refactor Pick one Done
小さなタスクの完了 を積み上げてゴールを目指す
型を取り込む
「型」の内在化と変化 ”学習者は創始者とは身体性も経験も異なる存在であること から、創始者が意図した叡知を全て完璧に内在化するという のは、ほぼ不可能であると言ってよい。” ”科学的な叡智が一意的に客体化されるが故に変化なく伝達 されるのに対して、「型」は主体による多義的な把握を認める ため、叡知伝達の過程で変化することがしばしばである。” 「型」の再考 https://kyoto-up.or.jp/books/9784814003648.html
守破離 守:型を忠実に守る 破:型を発展させ、自分の型を模索する 離:既存の型から離れて、独自の型を生み出す
達人たちの型
Kent Beck さんのテスト駆動開発 https://shop.ohmsha.co.jp/shopdetail/000000004967/ • 仮実装 • 明白な実装 • 三角測量
• 歩幅の調整 • 実装を導くテスト
t-wadaさんのテスト駆動開発 https://www.youtube.com/live/Q-FJ3XmFlT8?t=1145s • タスクの分解 • 優先順位の付け方 • 検証→実行→準備
ボブおじさんのテスト駆動開発 https://blog.cleancoder.com/uncle-bob/2013/05/27/TheTransformationPriorityPremise.html • TDDは複式簿記 • 変換の優先順位説
達人の「型」から 自分の「型」へ
ふつうの人のテスト駆動開発 https://qiita.com/blue32a/items/2084c9e5cff97980a1c7
まとめ プログラミングのゴール(完成形)について様々な情報はあるが、その過程についての 情報は少ない テスト駆動開発を「プログラミングの型」と捉えることで、「達人のやり方」を自身に取り込 む 型を学び、自分のプログラミング スタイルを作り上げる(テスト駆動開発でなくても良い)
スライドの目的 このスライドの目的は「正しい/真のテスト駆動開発」を明らかにすることではなく、テスト 駆動開発を「プログラミングの型」として捉えることで、達人たちのプログラミングの叡知 を学ぶことです。
完