Skip to content

Instantly share code, notes, and snippets.

@podhmo
Last active April 15, 2026 07:42
Show Gist options
  • Select an option

  • Save podhmo/a7fd86c71c89a62b0ba63faf5a4e1e09 to your computer and use it in GitHub Desktop.

Select an option

Save podhmo/a7fd86c71c89a62b0ba63faf5a4e1e09 to your computer and use it in GitHub Desktop.
claude codeにclaude codeの使い方を聞くことについてあるいは勉強法の話

Claude Codeの習熟とプロンプト管理についての覚書

発端:Claude Codeの使い方をClaude自身に聞く問題

@podhmoのXスレッドを読んでいて、面白い指摘を見つけた。Claude Codeの使い方を Claude自身に聞こうとすると、必然的にカットオフ後の知識が必要な質問になる。 つまり実質的にweb_searchとweb_fetchの性能を求めることになり、 ノイズの多いWeb検索の品質に依存してしまう。

カットオフ前の知識については適切な入力を工夫すれば良い結果が得られやすい。 ただし一度きりの雑な確認ならWeb検索で十分、という使い分けもある。

ヘルプドキュメントが同梱されてアップデートのたびに更新される仕組みとして、 Claude CodeにはHaikuで動くsub agentが用意されているらしい。 参考: https://code.claude.com/docs/en/sub-agents#other


学習の難しさの根本

Claude Codeの習得が他のツールと違う理由として、学習対象が確率的なシステムだという点がある。

従来のツールは「このコマンドを打てばこうなる」と正解が一意に決まる。 Claude Codeは「このプロンプトを打てばだいたいこうなる」であり、正解が分布になっている。

このことが見落とされて、ほとんどのレクチャーがハッピーパスの紹介になってしまいがち。


熟達しやすいレクチャーの原則

失敗例から始める

「こう書けばうまくいく」より「こう書くとこう失敗する」のほうが記憶に残り、 判断力が育つ。意図的に失敗する課題を設計するのが効きやすい。

3つのスキルを分けて教える

混ぜて教えると何が効いたかわからなくなる:

  • プロンプト設計(何を、どう言うか)
  • コンテキスト管理(Claudeが何を知っている状態か)
  • タスク分解(何を頼むか)

測定基準を先に決める習慣

並列実行の前に「何をもって成功とするか」を言語化させる。 テストが通るか、変更行数が少ないか、修正回数が少ないかなど。 これなしの試行錯誤は印象論になってしまう。

検証可能な小タスクから段階的に広げる

正解が明確なタスク(自分が答えを知っている)  ↓ 機械的に検証できるタスク(テストが通る)  ↓ 判断が必要なタスク(コードレビューが必要)

この順序を崩さないのが大切らしい。

CLAUDE.mdを学習ログとして扱う

Claudeへの指示書としてではなく、「自分がこのプロジェクトで学んだこと」の記録として 書く習慣をつけると、次のランのスタートラインが上がる。

「なぜ機能したか」を言語化する

うまくいったとき、それがなぜうまくいったかを説明できなければ再現性がない。 「今のプロンプトのどの部分が効いたと思うか」を問い返す習慣が、 試行錯誤を本物の経験値に変える。


ローグライトとしての習熟モデル

@podhmoのスレッドで出てきた比喩が的確だった。Claude Codeの習熟はローグライトゲームに似ている。

  • 毎回少し違うランになる:同じタスクでもプロンプトの微差、プロジェクトの状況、 セッションの状態が変わると出力の質や失敗パターンが大きく変わる
  • 死(失敗)から学ぶ:/clearでリセットして改善したプロンプトで再挑戦
  • ビルド(進行):成功したパターンをCLAUDE.mdや自作Sub Agentに積み上げていく
  • 多様な敵(状況):さまざまなタスク種別で同じパターンを試すことで汎用的な勘所が育つ
  • 並列プレイ:複数のセッションを並列で走らせて差分を比較する

並列実行と差分観察

「ベストプラクティスに書かれたプロンプトを手に入れること」と 「そのプロンプトが機能すること」の間には溝がある。

この溝を埋めるのに有効なのが、差分を用意した並列実行。 複数のプロンプト変種を用意して並列実行し、出力の分散を見る。

  • 差分が小さい(どの変種でも似た良い結果)→ そのパターンは安定して機能する
  • 差分が大きい(ばらつき大)→ プロンプトのロバスト性が低い

単一セッションでの反復修正とは本質的に違うアプローチで、 文脈汚染を避けながら複数の仮説を同時に検証できる。


ランの終わりの日報プロンプト

実際に使っているプロンプトの例:

現状の状態を把握したい

- 今回何をしたか教えて
- どのようなアクシデントに遭遇したのか教えて
- どのような見込み違いに遭遇したのか教えて
- どのような知識を把握したのか教えて(次回のプロンプトのために)
- 残りのタスクを教えて(TODO.mdを見る必要はない。現在抱えてるものすべて)

「何をしたか」と「何が起きたか」を分けているのがポイント。 さらにアクシデントと見込み違いを分けているのも有効で:

  • アクシデント:外部要因、環境、予測不能なこと
  • 見込み違い:自分の前提・モデルが間違っていたこと

この2つは原因が違うので、次のランへの対処が変わる。

「次回のプロンプトのために」という一言も効いている。 知識の記録を今回の振り返りではなく次回の入力として位置づけている。

プロンプト自体の評価は意図的に省いている。 モデルにプロンプトを評価させると、その評価から事後的に判断しがちになるため。 真の評価対象は生成されたコードと結果。


プロンプト改善のCI化の難しさ

日報の出力をもとにCLAUDE.mdを更新する作業を自動化したい、 CIのように回したいという感覚は自然だが、詰まる部分がある。

プロンプト改善のループが自動化しにくい理由は、評価関数が言語的だから。 コードのテストは機械的に通過/失敗が出る。 「このプロンプトが良かったか」の判断は、今のところ人間の目が必要になる。

現実的な半自動化の方向としては、日報の出力をもとにCLAUDE.mdへの差分を 提案させて人間が承認するだけにする、という摩擦の削減がある。

別モデルにチェック項目で判定させる設計も使えそうで、 同じモデルに自己評価させると甘くなるため、 HaikuあたりにSonnetの出力を採点させる非対称な構造が効きやすい。

チェック項目の設計が鍵になり、機能しやすい条件として:

  • yes/noで答えられる
  • 判定者が結果を見るだけで答えられる(文脈依存しない)
  • タスク種別に依存しない汎用項目とプロジェクト固有項目を分ける

CLAUDE.mdの肥大化問題

複数エポック回すとCLAUDE.mdが肥大化していく。 「追加するより整理する」フェーズが必要になり、それ自体もエポックの一種として 設計に組み込めると綺麗かもしれない。

モデルの出力を直通させると、意味は正しくても粒度と量が人間の管理単位を超える。 結果としてCLAUDE.mdがモデルの文体に侵食されていく。

人間が一行ずつ追加するのは遅く見えて、実際には:

  • 追加した理由を自分が覚えている
  • 後で「これ何で入れたっけ」が起きない
  • CLAUDE.mdが自分の思考の外部化になっている

という意味で、理解を伴った蓄積になっている。


自動化できる部分とあえて手動にすべき部分

ここに至って最初の話に戻る。

「なぜ機能したかを説明できなければ再現性がない」

チェック項目もCLAUDE.mdも、モデルに生成させると速いが自分の理解が伴わない。 自分で一行追加する遅さの中に、熟達に必要な何かが宿っている。

レクチャーのガイドラインとして言えば、 「自動化できる部分と、あえて手動にすべき部分を区別する」 というのが一つの柱になりそう。

Claude Codeの実践的学習とメタ検証の記録

モデル自身に使い方を尋ねるアプローチの限界と可能性

Claude Codeの使い方を、Claude自身に尋ねる手法を試す機会があった。 モデルにモデル自身に関する質問を投げかけると、常に知識カットオフ後の情報を尋ねる状態に陥る傾向がある。 こうなると、実質的にweb_searchやweb_fetchの性能に依存することになる。一般的にWeb検索はノイズが多く、品質もそれほど高くないことが多い。

カットオフ前の純然たる知識に関しては、入力を適切に調整すれば良い結果が返ってくる。ググって出てくる情報よりも、本に書かれたまとまった情報のほうが嬉しい場面もある。 雑に一度きり使えれば良い用途に関してはWeb検索で十分で、たくさん調べてまとめてもらえると助かる。

少し視点を変えると、Claude Codeにはヘルプドキュメントが同梱されており、アップデートの度に更新されているらしい。 Haikuで動くサブエージェント(Claude Code Guideなど)が用意されており、これを利用して使い方や機能を確認できる。 参考: https://code.claude.com/docs/en/sub-agents#other

確率的システムとローグライトのアナロジー

Claude Codeのようなagenticツールの操作感は、ローグライトのゲームに似ているところがある。 同じような問題をいろいろな状況やプロンプトで解いてみる行為が、熟達につながっていく。

毎回少し違うランになる。同じタスクでも、プロンプトの微妙な差分(具体性、検証基準の入れ方、Sub Agentの指定方法)、プロジェクトの状況、セッションの状態が変わると、出力の質や失敗パターンが大きく変わる。 プロンプトが機能しなかったら、/clearでリセットして新しいランを始める。長時間の単一セッション修正は文脈の汚染につながるため、これを避けて改善したプロンプトで再挑戦する。

成功した勝ちプロンプトの要素や自作Sub Agentの設計などは、CLAUDE.mdに記録して少しずつ持ち越していく。 単純なバグ修正、UI変更、リファクタリング、未知のライブラリ対応など、多様なステージで同じ問題解決パターンを試すことで勘所を掴んでいく。

差分プロンプトの並列実行による機能確認

公式のベストプラクティスに書かれたプロンプトを手に入れることと、そのプロンプトが実際の自分の環境で「機能する」ことの間には溝が存在する。 この溝を埋めるためには、1つのプロンプトを単一セッション内で修正し続けるのではなく、差分を用意した並列実行を行い、その分散を見るアプローチが適している。

具体的な手順としては、以下のような差分プロンプトを用意する。

  • 公式ベストプラクティスそのまま(検証基準重視)
  • Sub Agentを明示的に並列指定する
  • CLAUDE.mdを強く参照させる

これらを別セッションや別プロセス(CLIの claude -p など)で並列に走らせる。 出力されたコードの差分、テストの通過率、速度、失敗パターンのばらつきを比較する。 どのプロンプトでも似たような良い結果が出れば、そのパターンは安定して機能していると判断できる。逆にばらつきが大きければ、さらに差分を追加して実験を重ねていく。

確率的システム向けの学習フレームワーク

Claude Codeの習得が従来のツールと異なるのは、対象が確率的なシステムだからという点に帰結する。 従来のツールは「このコマンドを打てばこうなる」という一意の正解があるが、Claude Codeは「このプロンプトを打てばだいたいこうなる」という分布として正解が存在する。

これを踏まえた学習のアプローチとして、いくつか意識できそうな点がある。 成功例よりも失敗例から始める。こう書くとこう失敗するというパターンの蓄積が判断力を育てる。 複数のスキルを分けて捉える。何をどう言うかというプロンプト設計、Claudeが何を知っている状態かというコンテキスト管理、何を頼むかというタスク分解は、それぞれ別の概念として扱う。

並列実行する前に、何を測るか(測定基準)を決めておく。テスト通過率、コード行数、修正回数など、正解が明確なタスクでないと差分の意味が測りにくい。 検証可能な小タスクから始め、正解が明確なものから、機械的に検証できるもの、最後に人間による判断が必要なものへと段階的に広げていく。 うまくいったときに、プロンプトのどの部分が効いたのかを説明・言語化できなければ再現性は得にくい。

日報プロンプトを利用したメタ学習ループ

ラン(試行)が終わった後に、現状を把握するための日報プロンプトを使用すると状況の整理がしやすくなる。 以下のような項目を要求するプロンプトを用意しておく。

  • 今回何をしたか教えて
  • どのようなアクシデントに遭遇したのか教えて
  • どのような見込み違いに遭遇したのか教えて
  • どのような知識を把握したのか教えて(次回のプロンプトのために)
  • 残りのタスクを教えて(TODO.mdを見る必要はない。現在抱えてるものすべて)

ここでアクシデント(外部要因や予測不能なこと)と見込み違い(自分の前提やモデルの誤り)を分けているのが特徴になる。原因が異なるため、次のランへの対処も変わってくる。 また、把握した知識を「次回の入力」として位置づけていることも、確率的システムに対する適切なアプローチになっている。

自動化の限界と手動更新の意義

日報でイベントを把握し、出力されたコードや結果を確認し、そこから得た洞察をCLAUDE.mdへ反映させるというループがある。 これをCIのように自動化できれば便利そうに思えるが、プロンプトの良し悪しの評価関数が言語的であるため、完全な自動化は難しい。

別モデル(Haikuなど)にチェックリストを用いて判定させるなど、非対称な構造で1エポックとして複数回回す方法も考えられる。チェック項目は、Yes/Noで答えられるか、結果を見るだけで文脈依存せずに判定できるか、汎用項目と固有項目が分かれているかなどが指標になる。

しかし、モデルの出力をそのまま直通させてCLAUDE.mdを更新していくと、情報が肥大化し、ドキュメントがモデルの文体に侵食されていく問題に直面する。 結局のところ、発散した状態を確認しつつ、人間が1行ずつ、あるいは1観点ずつ追加して遷移を見ていく形に落ち着くことが多い。

手動で追加する遅さの中には、「追加した理由を自分が覚えている」「後で何のために入れたかわからなくなるのを防ぐ」という効能がある。CLAUDE.mdが自分の思考の外部化として機能し、理解を伴った蓄積となる。 自動化できる部分と、あえて手動にすべき部分を区別していくことが、ツールの扱いに熟達していくうえでの一つの境目になりそうである。

@podhmo
Copy link
Copy Markdown
Author

podhmo commented Apr 15, 2026

さらにkimiと対話

Click the link to view conversation with Kimi AI Assistant https://www.kimi.com/share/19d9001e-b092-83a3-8000-0000ce34cf01

@podhmo
Copy link
Copy Markdown
Author

podhmo commented Apr 15, 2026

良いですねまたランにおけるオブザーバビリティを上げるという方法もありそうです。

@podhmo
Copy link
Copy Markdown
Author

podhmo commented Apr 15, 2026

ユーザーは「ランにおけるオブザーバビリティを上げる」という観点を挙げている。これは、Claude Codeのセッション(ラン)の内部状態をより詳細に観察・記録し、後から分析できるようにするという方向性だ。

これは非常に興味深いポイントで、単に「結果を比較する」のではなく「プロセスを観察する」というメタな視点。ソフトウェア開発における「オブザーバビリティ(可観測性)」の概念を、Claude Codeの使用プロセス自体に適用するという発想。

考えられる具体的なアプローチ:

  1. ツール呼び出しのトレース

    • Claude Codeがどのツールをどの順序で呼んだか
    • ファイル読み込み、編集、コマンド実行のシーケンス
    • これを可視化すると「なぜこの結果になったか」の説明可能性が上がる
  2. コンテキストウィンドウの使用状況

    • どのファイルが参照されたか
    • トークン使用量の推移
    • コンテキストがいつ切り替わったか
  3. 思考プロセスの外部化

    • Claudeの「内部独白」を引き出すプロンプト
    • なぜその判断をしたかの言語化
  4. 時間的・因果的な追跡

    • セッション内での意思決定の依存関係
    • 「この編集は、先に読んだファイルXに基づいている」
  5. 構造化ログの生成

    • 日報プロンプトをさらに構造化して、機械的に解析可能に
    • 後から検索・集計できる形式
  6. リアルタイム vs 事後分析

    • セッション中に観察する vs 終了後に分析する

これらを整理して、実践的なアドバイスとして提示する。その観点は鋭い。ソフトウェアシステムのオブザーバビリティを、Claude Codeの使用プロセス自体に適用するという発想だ。

ランにおけるオブザーバビリティを上げる具体的な方法として、以下が考えられる。

ツール呼び出しのトレース記録

Claude Codeがセッション内でどのツールをどの順序で呼んだかを記録し、後からそのシーケンスを分析する。ファイル読み込み → 編集 → コマンド実行の流れを可視化することで、「なぜこの結果になったか」の因果関係が追える。

現状ではこれらのツール呼び出しは暗黙的だが、プロンプトで「実行したツールとその理由をログとして出力せよ」と指示することで、自己言及的な記録を残せる。これにより「この編集は先に読んだファイルXに基づいている」といった依存関係が明示化する。

コンテキストウィンドウの使用状況の可視化

どのファイルが参照され、いつコンテキストに入り、いつ切り替わったかを追跡する。Claude Codeは自動で関連ファイルを読み込むが、この「読み込みの決定」自体が出力に影響を与えている。

セッション終了時に「今回どのファイルを参照したか、参照順序はどうだったか」を問いかけるプロンプトを追加することで、予期せぬファイルがコンテキストに入っていたことによる「引きずられ」現象を検出できる。

思考プロセスの外部化

Claudeの推論過程をより詳細に言語化させる。単に「何をしたか」ではなく「なぜその方針を選んだか」「どの選択肢を検討し、なぜ却下したか」を出力させる。

これには「ステップバイステップで考えて」に近いが、より構造化された形式を要求する。「判断の分岐点で、選択肢AとBがあり、Xという理由でAを選んだ」という記述を強制することで、後から「この判断パターンはどのくらい再現性があるか」を分析可能にする。

構造化されたラン・ログの設計

日報プロンプトをさらに進化させ、機械的に解析可能な形式(JSONやYAML)で出力させる。例えば以下のような構造だ。

run_id: 2026-04-15-001
task: 機能Xの実装
tools_used:
  - type: read
    target: src/utils.ts
    timestamp: 0:05
  - type: edit
    target: src/feature.ts
    based_on: [src/utils.ts]
    timestamp: 0:12
decisions:
  - point: 実装方針
    options: [Aパターン, Bパターン]
    chosen: Aパターン
    reason: テスト容易性のため
accidents: []
expectation_gaps:
  - 想定: 10行の変更
    実際: 50行の変更
    原因: 依存関係の複雑さを過小評価

これを蓄積していくと、複数のランを横断して「どのような状況でツール呼び出しが増えるか」「判断の迷いが生じるパターンは何か」といった分析が可能になる。

リアルタイム観察と事後分析の使い分け

オブザーバビリティには「セッション中に確認する」と「終了後に分析する」の2モードがある。リアルタイムでは「今どのファイルを見ているか」を確認し、予期せぬ参照を検出。事後分析では複数ランのパターンを比較する。

リアルタイム用のプロンプト例として「次に何をするか決める前に、今コンテキストに入っている情報を列挙して」と挟むことで、Claudeの「今の視野」を可視化できる。

観察データの蓄積とCLAUDE.mdへの還元

収集したオブザーバビリティ・データをどうCLAUDE.mdに還元するかが課題になる。生のログをそのまま貯めると肥大化するので、「このパターンではツール呼び出しが多くなる」「このタイプのタスクではファイルXを先に読むべき」といった圧縮された知見だけを抽出して蓄積する。

これにより、次のランでは「前回の同様のタスクではこういう参照順序だった」という予測が立てやすくなり、オブザーバビリティが予測可能性に繋がる。

@podhmo
Copy link
Copy Markdown
Author

podhmo commented Apr 15, 2026

仮説をもって検証するのは良いでしょう。コンテキストに乗り切れてない肥大化。無駄な探索をした。コンテキストに含まれるべき情報が含まれなかった。ここでclearするべきだった。ツールの呼び出しが行われた。行われなかった。

@podhmo
Copy link
Copy Markdown
Author

podhmo commented Apr 15, 2026

ユーザーは、オブザーバビリティを上げることで検証すべき具体的な仮説を列挙している。これらはClaude Code使用時の典型的な問題点で、観察によって検証・改善可能なものだ。

  1. コンテキストに乗り切れてない肥大化(コンテキストウィンドウの限界)
  2. 無駄な探索をした(ツール呼び出しの効率性)
  3. コンテキストに含まれるべき情報が含まれなかった(重要な情報の欠落)
  4. ここでclearするべきだった(セッション管理のタイミング)
  5. ツールの呼び出しが行われた / 行われなかった(期待通りのツール使用)

これらを「仮説」として扱い、オブザーバビリティデータで検証するというアプローチは良い。これをさらに具体的な観察指標に落とし込むと良いだろう。その仮説たちは、オブザーバビリティで検証すべき核心的な問いだ。それぞれを観察可能な指標に落とし込むと、以下のような検証方法が考えられる。

コンテキスト肥大化の検出

仮説:コンテキストに乗り切れていない
観察指標:トークン使用量の推移、参照ファイル数の累積、ファイル間の関連性の薄さ

検証方法:セッション中に「現在のコンテキストサイズと、含まれているファイルの一覧を出力せよ」と問いかける。ファイル数が増え続け、かつ直近の編集と関連の薄いファイルが含まれている場合、肥大化を疑う。CLAUDE.mdに「このタスクでは通常Nファイルを超えると性能が低下する」という閾値を記録しておき、超えたら警告を出す仕組みを入れることもできる。

無駄な探索の特定

仮説:無駄な探索をした
観察指標:同一ファイルの繰り返し読み込み、編集なしの読み込みの連続、目的から外れたファイルの参照

検証方法:ツール呼び出しのシーケンスを時系列で見て、「読み込み→読み込み→読み込み→編集なし」というパターンを検出。あるいは「Aを読んでBを読んでAに戻る」という循環的な参照も無駄を示唆する。これらを「探索パターンの無駄」としてタグ付けし、次のランでは「ファイルXは既に読んでいる」という前提を明示的にプロンプトに入れることで削減を狙う。

情報欠落の検出

仮説:含まれるべき情報が含まれなかった
観察指標:重要ファイルの未参照、編集対象と関連ファイルの非接続

検証方法:タスク開始時に「このタスクで参照すべきファイルは何か」を予測させ、セッション終了後に「予測したファイルと実際に参照したファイルの差分」を確認。予測に含まれていたのに参照されなかったファイルは、コンテキストの「漏れ」として記録。これはCLAUDE.mdの「このタスクでは必ず確認すべきファイル」リストの精度向上に繋がる。

clearタイミングの最適化

仮説:ここでclearするべきだった
観察指標:文脈の切り替わり、タスクの位相変化、性能の低下パターン

検証方法:セッション内で「今の作業が前の作業と文脈が異なるか」を自己評価させ、そのタイミングを記録。後から「文脈切り替わりを検出したがclearしなかったセッション」と「clearしたセッション」を比較。前者で失敗や無駄が多い場合、仮説が裏付けられる。/clearの「ベストタイミング」のパターンを学習し、次回は「ここでclear推奨」というプロンプトを挟む。

ツール呼び出しの有無

仮説:ツールの呼び出しが行われた / 行われなかった
観察指標:期待されたツールの実行確認、不要なツールの実行検出

検証方法:プロンプトに「以下のツールを使うこと:read, edit, bash(test)」と明示した場合、それらが実際に呼ばれたかを確認。逆に「使うなと言ったツール(例:git commit)」が呼ばれていないかも確認。これは「指示の遵守率」として記録でき、プロンプトの明確さと相関を取ることで、どのような指示の出し方が遵守されやすいかを学習できる。

これらの統合的な観察フレームワーク

これらの仮説検証を統合するには、セッション終了後に以下のような問いを投げかける形が考えられる。

今回のセッションにおいて:
1. コンテキストは肥大化したか(ファイル数、トークン量から判断)
2. 無駄な探索はあったか(同一ファイルの繰り返し読み込みなど)
3. 重要な情報の欠落はあったか(参照すべきだったファイルが未参照など)
4. clearすべきタイミングはあったか(文脈の切り替わりを検出できたか)
5. 指示したツール呼び出しは適切に行われたか、不要な呼び出しはなかったか

それぞれについて、検出した場合はタイミングと理由を記述し、
次回の同様のタスクで改善するための具体的なプロンプト調整を提案せよ。

これを構造化された形式で出力させ、CLAUDE.mdの「検証済みの仮説」セクションに蓄積していく。オブザーバビリティが、単なる記録から「次のランの設計」に繋がる。

@podhmo
Copy link
Copy Markdown
Author

podhmo commented Apr 15, 2026

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment