デスクの上にゴム製のアヒルを置いて、コードの問題を話しかける——端から見れば奇行だが、プログラマーの間では「ラバーダッキング法(Rubber Duck Debugging)」として知られる由緒正しいデバッグ手法だ。なぜおもちゃのアヒルに話しかけると、バグが見つかるのか。その答えは認知心理学にある。
ラバーダッキング法とは
ラバーダッキング法のルールは単純だ。
- ゴムのアヒル(または任意の無生物)をデスクに置く
- コードの問題を、アヒルに対して1行ずつ声に出して説明する
- 説明している途中で問題に気づく
- アヒルに感謝する
この手法の初出は、アンドリュー・ハントとデイヴィッド・トーマスの名著『達人プログラマー』(1999年)とされている。ある開発者が、デスクに置いたゴムのアヒルにコードを逐一説明することで問題を発見していたエピソードに由来する。
| ステップ | 行動 | 心理学的メカニズム |
|---|---|---|
| 1. 対象を選ぶ | アヒルを用意する | 外在化の準備(思考を外に向ける) |
| 2. 説明する | コードを1行ずつ説明する | メタ認知の活性化 |
| 3. 矛盾に気づく | 「あれ、ここおかしい」 | 自己説明効果の発動 |
| 4. 修正する | バグを直す | 問題解決 |
なぜ「説明する」だけで問題が見つかるのか
認知心理学には「自己説明効果(Self-explanation Effect)」という概念がある。1994年にミシェリン・チーが発表した研究で、学習内容を自分自身に説明する行為が理解を深めることが実証された。
コードを書いているとき、プログラマーの脳は「書くモード」で動いている。このモードでは、自分のコードが「正しく動くはず」という確証バイアスが働きやすい。だが、誰かに説明しようとすると、脳は「説明モード」に切り替わる。説明モードでは、論理の飛躍や暗黙の前提が可視化される。
| 認知モード | 特徴 | バグ発見率 |
|---|---|---|
| 書くモード(執筆時) | 確証バイアスが強い、流れに乗って記述 | 低い |
| 読むモード(レビュー時) | 受動的に目で追う、見落としやすい | 中程度 |
| 説明モード(ラバーダッキング) | 能動的に言語化、論理の再構成が起きる | 高い |
重要なのは、相手が「聞いていない」ことだ。人間の同僚に説明すると、相手の反応に気を取られたり、質問に答えることに思考リソースが割かれたりする。アヒルは反応しないからこそ、説明者は自分自身の論理に集中できる。
ワーキングメモリと言語化の関係
人間のワーキングメモリ(短期記憶の作業領域)の容量は限られている。心理学者ジョージ・ミラーが1956年に提唱した「マジカルナンバー7±2」の法則によれば、人間が同時に保持できる情報のチャンクは約7個だ。
複雑なコードをデバッグしているとき、変数の状態、条件分岐のパス、関数の副作用などが同時にワーキングメモリを占有する。容量を超えると、重要な情報が「落ちる」。声に出して説明することで、思考が時系列に整理され、ワーキングメモリの負荷が軽減される。
つまりラバーダッキング法の本質は「デバッグを並列処理から直列処理に変換する」ことにある。
アヒル以外でも効くのか
答えはイエスだ。説明の対象はアヒルでなくても構わない。観葉植物、フィギュア、ぬいぐるみ、愛犬——何でもいい。Stack Overflowの2022年の調査では、回答者の約35%が「無生物に話しかけたことでバグを発見した経験がある」と回答している。
企業でもラバーダッキング法は活用されている。Amazonの一部チームではデスクにアヒルが常備されており、Shopifyはオンボーディングで新入社員にゴムのアヒルを配っていたことがある。
| 代替手段 | 有効性 | 注意点 |
|---|---|---|
| ペア[プログラミング](/tag/programming) | 非常に高い | 相手の時間を使う社会的コスト |
| コードコメントを書く | 高い | 書くのに時間がかかる |
| [ChatGPT](/tag/chatgpt)に説明する | 高い | [AI](/category/ai)の回答に引っ張られるリスク |
| ラバーダッキング | 高い | 社会的コストゼロ、即時実行可能 |
アヒルが教えてくれること
ラバーダッキング法は、人間の認知の特性を逆手に取った手法だ。私たちの脳は、思考を内部に留めているとき盲点を見落としやすく、外に向けて言語化したとき初めてその矛盾に気づける。
「コードが動かない」と画面を睨み続けるより、黄色いアヒルに「このforループはね…」と話しかける方が、実は科学的に正しいアプローチだ。次にバグに詰まったとき、あなたはアヒルに話しかけるだろうか——それとも、まだ画面を睨み続けるだろうか。