Claude Codeに一時ファイルを片付けさせるプロンプトの書き方
Claudeはコード作業中、検証用の一時ファイルをスクラッチパッドとして作ることがあります。プロンプトに一文加えて片付けさせる書き方と、CLAUDE.mdへ定着させる方法をまとめます。
Claude Codeがコーディング中に一時ファイルを作る理由
Claudeはコードを書くタスクで、検証用のPythonスクリプトやテスト用ファイルを作業の途中に新規に作ることがあります。公式のプロンプトエンジニアリングガイドは、この振る舞いを「最終出力を保存する前の一時的なスクラッチパッド」として使っていると説明しています。
これはバグではなく、意図された挙動です。同ガイドは一時ファイルの活用が「特にエージェント的なコーディングのユースケースで結果を改善する」とも述べています。試行と検証を挟むほど、最終的な出力の質が上がりやすいという理屈です。
一方で、リポジトリに検証用ファイルが残り続けるのは避けたい状況です。差分に無関係なファイルが混ざると、レビューやコミットの際に見分ける手間が増えます。公式ガイドはこのトレードオフを踏まえたうえで、新規ファイル作成を抑えたい場合の対処として、プロンプトに一文を加える方法を提示しています。
プロンプトに一文加えて片付けさせる
やり方はシンプルです。作業を依頼するプロンプトの末尾に、後片付けを指示する一文を足します。公式ガイドが示すサンプルは次の一文です。
If you create any temporary new files, scripts, or helper files for iteration, clean up
these files by removing them at the end of the task.日本語で書くなら「検証やイテレーションのために一時ファイル・スクリプト・ヘルパーファイルを作った場合は、タスクの最後にそれらを削除してください」という指示になります。ポイントは2つです。
1つ目は、削除対象を「一時ファイル・スクリプト・ヘルパーファイル」と具体的に書くことです。「ファイルを片付けて」だけでは、テスト用に作ったファイルなのか意図して残した成果物なのかをClaudeが判断しにくくなります。2つ目は「タスクの最後に」という実行タイミングの指定です。作業の途中で消してしまうと、後続のステップで同じファイルを再利用できなくなります。
この一文は、単発のタスクを頼むときのプロンプトにそのまま貼り付けて使えます。毎回同じ指示を書くのが手間なら、次に扱うCLAUDE.mdへの記載が向いています。
後片付けをさらに徹底したい場合は、一時ファイルの置き場所自体を限定する一文を重ねる方法もあります。「検証用のファイルは専用のスクラッチディレクトリにだけ作成し、タスクの最後にそのディレクトリを削除する」という指示にすれば、片付けを確認する箇所が1つのフォルダに絞られます。リポジトリ内の他のファイルと混ざる心配も減ります。この指示は、後述するscratchpad_dirをhookから削除する構成と組み合わせて使えます。
この一文はClaude Code固有の機能ではありません。Claudeモデル全般に向けた公式のプロンプトエンジニアリングガイドに載っている指示です。Anthropic APIを直接呼ぶ場合や、Claude Codeとは別のエージェント基盤でClaudeを動かす場合でも同じ一文が使えます。プロンプト自体の効き方は呼び出し方によって変わりませんが、次に扱うCLAUDE.mdへの記載はClaude Code固有の永続化手段です。
CLAUDE.mdに書けば毎回言わなくて済む
Claude Codeには、プロジェクトの永続的な指示を書いておくCLAUDE.mdという仕組みがあります。公式ドキュメントは、これを「毎回言い直すはずのことを書いておく場所」と位置付けています。一時ファイルの後片付けは、まさに毎回繰り返す指示の典型です。
プロジェクトのCLAUDE.md(または./.claude/CLAUDE.md)に、次のような一文を追記します。
## 作業規約
- 調査・検証のために一時ファイルやスクリプトを作った場合は、タスクの最後に削除するCLAUDE.mdはセッション開始時に毎回読み込まれるため、この記載があればタスクごとにプロンプトへ書き足す必要がなくなります。公式ドキュメントは1ファイルあたり200行程度を目安に抑えることも推奨しています。指示が肥大化すると読み込む文脈量が増え、逆に指示への追従が弱くなるためです。一時ファイルの後片付けのような短い運用ルールは、既存のCLAUDE.mdに1〜2行足す程度で十分に収まります。
追記しても効いていないように見えるときは、まずファイル自体が読み込まれているかを確認します。公式ドキュメントは、セッション内で/contextを実行し、Memory filesの一覧にCLAUDE.mdが表示されるかを見るようにと案内しています。ここに出てこない場合、Claudeはそのファイルを認識していません。/memoryコマンドでCLAUDE.mdを開いて中身を確認・編集できます。
プロンプト・CLAUDE.md・hookの使い分け早見表
一時ファイルの後片付けには、指示の強さが異なる3つの手段があります。どれも「一時ファイルを消す」という結果は同じでも、効く範囲と保証の強さが違います。
| 方法 | 効く範囲 | 保証の強さ |
|---|---|---|
| プロンプトへの一文 | 効く範囲そのタスク・その会話だけ | 保証の強さClaudeの判断に委ねる(context) |
| CLAUDE.mdへの記載 | 効く範囲プロジェクトの全セッション | 保証の強さ同上(context) |
| SessionEnd hookでの削除 | 効く範囲実行自体はセッション終了・/clear・/resumeのタイミングで強制。ただし削除できるのはhookが指定したパス(scratchpad_dir配下など)だけ | 保証の強さ強制実行(対象は指定パスのみ) |
プロンプトとCLAUDE.mdはどちらも「文脈として読み込ませる指示」であって、設定として強制する仕組みではありません。公式ドキュメントは、Claudeの判断に関係なく振る舞いをブロックしたい場合の手段としてPreToolUse hookを挙げています。一時ファイルの削除を確実に実行させたいなら、一時ファイルの置き場所を先に指定したうえで、セッションが終わるタイミングで強制的に削除するSessionEnd hookを組み合わせる構成が有効です(後述のscratchpad_dirはこの組み合わせの一方を担います)。設定方法はSessionEnd hookでセッション終了時に後始末を自動化するにまとめています。
選び方の目安はシンプルです。単発の検証タスクを頼むだけならプロンプトへの一文で十分です。同じプロジェクトを継続して触るならCLAUDE.mdに書いておくと、以後のセッションでも指示を書き直さずに効き続けます。チームで運用ルールとして統一したい、あるいはClaudeの自己判断に頼らず確実に消したいという場合は、SessionEnd hookを併用する構成が選択肢になります。
scratchpad_dirを使ってhookから正確に狙う
プロンプトへの一文やCLAUDE.mdへの記載は、Claudeが「これは自分が作った一時ファイルだ」と自己判断することに依存します。判断の正確さを優先したいなら、Claude Code側が持つ別の仕組みと組み合わせる方法もあります。
Claude Code v2.1.257以降では、SessionEnd hookなどに渡される入力JSONにscratchpad_dirというフィールドが追加されています。これはリポジトリの外にある、そのセッション専用の一時ディレクトリの絶対パスです。セッションにスクラッチパッドが無い、または一時ディレクトリ自体が利用できない場合はこのフィールドは届きません。
{
"session_id": "abc123",
"hook_event_name": "SessionEnd",
"scratchpad_dir": "/tmp/claude-1000/-home-user-my-project/abc123/scratchpad"
}ここで注意が必要なのは、scratchpad_dirがリポジトリの外を指すという点です。hookがこのパスを削除しても、片付けられるのはscratchpad_dir配下に置かれたファイルだけで、記事の冒頭で問題にしていたリポジトリに残る検証用ファイルはそもそもこのディレクトリに入っていなければ対象になりません。
つまりscratchpad_dir単体では、プロンプトやCLAUDE.mdでの片付け指示を置き換えられません。確実さを上げたいなら、前述の「置き場所を限定する一文」(検証用ファイルは専用のディレクトリにだけ作成する、という指示)をCLAUDE.mdかプロンプトに書いてClaudeにscratchpad_dir配下へ一時ファイルを作らせ、その上でSessionEnd hookがscratchpad_dirを削除する構成にします。この2つが揃えば、Claudeが「これは一時ファイルだ」と認識しているかどうかに関係なく、scratchpad_dir配下は片付けられます。
hookの設定例です。.claude/settings.jsonにSessionEnd hookを1つ登録し、stdinのJSONからscratchpad_dirをjqで取り出して削除します。値が届かないケース(フィールド自体が無い、または空文字)に備えて、削除前に必ずガードを入れます。
{
"hooks": {
"SessionEnd": [
{
"hooks": [
{
"type": "command",
"command": "dir=$(jq -r '.scratchpad_dir // empty'); if [ -n \"$dir\" ]; then rm -rf \"$dir\"; fi"
}
]
}
]
}
}jq -r '.scratchpad_dir // empty'はフィールドが無いときに空文字を返すので、続くif [ -n "$dir" ]のガードでその場合だけ削除をスキップします。matcherを指定していないので、終了理由(clear・resume・logoutなど)を問わず毎回発火します。理由ごとに処理を分けたい場合や、より複雑な後始末を書く場合はSessionEnd hookでセッション終了時に後始末を自動化するを参照してください。
一時ファイルを消しすぎると起きること
後片付けの指示を書くときに気をつけたいのは、削除の範囲を広げすぎないことです。公式ガイドが述べているとおり、一時ファイルの活用自体はエージェント的なコーディングで結果を改善する側面があります。試行のたびにファイルを完全に消してしまうと、Claudeが検証の過程を残せず、同じ調査を繰り返すコストがかかることもあります。
指示を書くときは「タスクが完了した後に」という条件を必ず含め、作業の途中では消させない書き方にします。また、意図して残す成果物(設定ファイルや本番コードなど)まで一括で削除対象にしないよう、「テスト用・検証用に作ったファイルに限る」という範囲もセットで書いておくと事故を防げます。
たとえば大きめのリファクタリングで、途中経過を確認するための検証スクリプトを作ったとします。この一時ファイルをタスクの途中で消す指示になっていると、Claudeは検証のたびに同じスクリプトを作り直すことになり、トークンと時間の両方を余分に使います。「タスクの最後に」という条件を外さないことが、この再作業を避ける最も簡単な方法です。
なお、Claude Codeが自動で作る一時ファイルの中には、後片付け指示の対象にならない別種の問題も存在します。Windows環境でプロジェクトディレクトリに残るtmpclaude-*-cwdファイルはその一例で、原因と削除方法はtmpclaude-*-cwdファイルが消えない原因と削除方法で扱っています。セッション履歴やチェックポイントといった別種のデータ保持は、プロンプトではなくsettings.jsonのcleanupPeriodDaysが管轄しており、こちらはClaude Code cleanupPeriodDaysでデータの保持期間を変えるに整理してあります。
まとめ
Claudeがコーディング中に作る一時ファイルは、最終出力に至るまでのスクラッチパッドとして意図的に使われています。片付けさせたいだけなら、プロンプトに「タスクの最後に一時ファイルを削除する」という一文を加えるだけで済みます。毎回書き直すのが手間なチームは、同じ一文をCLAUDE.mdに移すと、以降のセッションで指示を繰り返す必要がなくなります。ただしプロンプトとCLAUDE.mdはどちらも文脈としての指示であり、Claudeの判断を介さずに強制する仕組みではありません。削除を確実に実行させたい場面では、SessionEnd hookのような仕組みと組み合わせる選択肢も検討する価値があります。書いた指示がどの範囲まで効くかを把握しておけば、一時ファイルの後片付けは運用ルールとして無理なく定着します。