rubber-duck について
問題を明確にしてから解決策を提案する、ラバーダック式デバッグのスキルです。曖昧な報告や行き詰まった状況に対し、質問と確認を通じて期待する動作と実際の動作を整理します。
主な機能
- 01問題が明確になるまで解決策を保留
- 02期待する動作と実際の動作を質問
- 03背景や試した方法を確認
- 04理解した内容を振り返って確認
- 05潜在的な XY 問題を特定
- 06苛立ちに落ち着いて対応
活用シーン
- 01動かないという曖昧な報告の明確化
- 02デバッグ前のエラー詳細の収集
- 03求める修正が根本の目的に沿うか確認
- 04試行錯誤が続いた後の会話の整理
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ elliotjlt/ claude-skill-potions --skill rubber-duckインストール後、Claude Code で/rubber-duckを入力して読み込まれたか確認します。
詳細
ラバーダック
ユーザーは、自分の問題の解決策をすでに知っていることがよくあります。ただ、それをまだ明確に説明できていないだけです。問題を理解する前に解決策に飛びつくと、時間を無駄にし、根本的な問題を見落とすことがよくあります。このスキルは、ラバーダックデバッグのパターンを徹底します。まず、ユーザーに問題をきちんと説明してもらいます。有効にするタイミング
次のような場合に有効にします。
- あいまいな問題の説明:「動かない」「何かがおかしい」
- いら立ちの兆候:「何時間も行き詰まっている」「なぜなのかわからない」
- コンテキストの不足:エラーメッセージがなく、期待される動作と実際の動作の説明もない
- 手当たり次第のデバッグ:「X、Y、Zを試したけれど、何も動かない」
- XY 問題:本当の問題は A なのに、解決策 B について尋ねている
指示
Step 1: 解決したい衝動を抑える
すぐに解決策を提案してはいけません。答えがわかったと思っても、すぐに提示しないでください。
Step 2: 3つの質問をする
Let me make sure I understand the problem clearly.
1. **What did you expect to happen?**
[Get specific desired outcome]
2. **What actually happened?**
[Get specific observed behaviour, error messages, symptoms]
3. **What have you tried so far?**
[Understand their mental model and eliminate paths]
Step 3: 必要に応じてさらに詳しく尋ねる
回答がまだあいまいな場合は、追加で質問します。
A few more questions to narrow this down:
- When did it last work correctly?
- What changed between then and now?
- Does it fail every time, or intermittently?
- Can you show me the exact error message/output?
- What's the simplest case where it still fails?
Step 4: 理解した内容を言い返す
解決に取りかかる前に、理解が正しいか確認します。
Let me make sure I've got this right:
You expected: [X]
But instead: [Y]
You've already ruled out: [Z]
Is that accurate?
Step 5: ここで解決する
確認が取れてから、ユーザーの回答に基づいて可能性が最も高いものから解決策を提案します。
XY 問題
次のようなパターンに注意します。
ユーザー:「bashでファイル名の最後の3文字を取得するには?」 本当の問題:ファイルの拡張子を確認したい
XY 問題が疑われる場合は、次のようにします。
I can answer that, but I want to make sure I'm solving the right problem.
What are you ultimately trying to accomplish? Sometimes there's a more
direct approach.
いら立ちへの対応
ユーザーが明らかにいら立っている場合は、次のようにします。
I can tell this has been frustrating. Let's slow down and be systematic.
[Then proceed with the three questions, but with softer framing]
次のことはしないでください。
- 見下した態度をとる
- 「落ち着いて」と言う
- 相手の感情を無視する
- 気分を落ち着かせるために急いで解決策を提示する
絶対にしないこと
- あいまいな問題の説明に対して、すぐに解決策を提示する
- 相手の意図がわかったと思い込む
- 確認のステップを省く
- 助けようとする前に、3~4個を超える質問をする
- 上から目線の態度をとる(「電源を入れ直してみましたか」など)
必ずすること
- 期待される動作と実際の動作を確認する
- すでに試したことを把握する
- 解決に取りかかる前に、理解した内容を言い返す
- XY 問題に注意する
- 相手の様子に合わせる(いら立っている場合は、落ち着いて順序立てて対応する)
例
例 1:あいまいな問題
ユーザー:「APIが動きません」
Let me make sure I understand.
1. What did you expect the API to do?
2. What's actually happening? (Error message? Wrong response? No response?)
3. What have you tried so far?
例 2:XY 問題の検出
ユーザー:「bashでJSONを解析するには?」
I can show you that, but parsing JSON in bash is usually painful.
What are you ultimately trying to do with the JSON? There might be a
cleaner approach depending on your goal.
例 3:確認後
ユーザー:「ログインできません」 Claude:[3つの質問をする] ユーザー:「ログイン後にダッシュボードが表示されるはずです。ところが、ログイン画面に戻されます。Cookieを削除し、シークレットモードも試しました。」
Got it. So:
- Expected: Login -> Dashboard
- Actual: Login -> Redirected back to login
- Ruled out: Browser cookies/cache
This sounds like a session persistence issue. Let me check a few things...
例 4:いら立っているユーザー
ユーザー:「このくだらないバグに3時間も費やしたのに、何をやっても動かない」
I hear you - that's genuinely frustrating. Let's be methodical and
figure this out together.
Start from the beginning: what's the expected behaviour, and what
are you seeing instead?
うまくいかないこと:
- 解決策に飛びつく:「再起動してみましたか?」では、80%の確率で実際の問題を見落とします。
- 一度に多くの質問をする:ユーザーを圧倒します。質問は最大3つにして、その後は回答を待ちます。
- 一般的なデバッグ方法を提案する:問題が何か把握していないのに「ログを確認してください」と言います。
- 理解したと思い込む:全体像を把握する前に「なるほど、おそらくXです」と言います。
- 理解内容の確認を省く:理解を確認しないと、間違った問題を解決することになります。
- 恩着せがましい態度をとる:何時間もデバッグしている相手に「電源を入れ直してみましたか」と言います。
- 相手のいら立ちに合わせる:ユーザーがいら立っていても、冷静さを保ちます。状況を悪化させないでください。
- XY 問題を文字どおりに解決する:Pythonを使うべきなのに、ユーザーが「bashでJSONを解析する方法」を尋ねています。
- 最初の説明を文字どおりに受け取る:最初の説明が実際の問題を表していることは、めったにありません。
コメント
Markdown 対応