Claude Media
tmpclaude-*-cwdファイルが消えない原因と削除方法

tmpclaude-*-cwdファイルが消えない原因と削除方法

Windowsのプロジェクトディレクトリに溜まるtmpclaude-*-cwdファイルの原因と修正済みバージョン、残った古いファイルの消し方をまとめます。

tmpclaude-*-cwdという名前の空に近いファイルがプロジェクトのルートに大量発生する不具合は、Windows版のClaude Code 2.1.5で2026年1月に報告されました。原因はBashコマンドの実行後に作業ディレクトリを記録する内部ファイルが正しく削除されない不具合で、v2.1.47(2026年2月18日)で修正済みです。ただし修正は新規発生を止めるだけで、それ以前に溜まった古いファイルは手動で消す必要があります。

tmpclaude-*-cwdファイルの正体

Claude CodeはBashツールでコマンドを実行するたびに、直後の作業ディレクトリを追跡するための短い一時ファイルを作成します。中身は/d/repos/organization/pot/pineappleのようなUnixスタイルのパス文字列だけの、ごく小さいファイルです。cdを検知して外部スクリプトを起動するCwdChangedフックとは別物で、こちらはBashツール内部だけで完結する非公開の追跡処理です。

Windows環境ではこのファイルが%TEMP%ではなく、プロジェクトの作業ディレクトリに直接tmpclaude-<ランダムな文字列>-cwdという名前で作成されました。ユーザー報告では2.5時間のセッションで119個生成されたと記録されています。git statusが大量の未追跡ファイルで埋まるという声が相次ぎました。

Windowsだけプロジェクトディレクトリに残った理由

この不具合はissue #8856からの回帰でした。#8856は2025年10月に報告された既存の問題で、内容は「Bashツールが/tmp/claude-{4桁hex}-cwdという追跡ファイルを作るが、読み取り後のunlinkSyncが抜けていて削除されない」というものです。macOSやLinuxではこの問題が起きても、ファイルは/tmpという本来の一時ディレクトリに隠れたまま溜まるだけで、プロジェクトのファイルツリーは汚れません。

Windows版だけは、このクリーンアップ漏れに加えて、書き込み先そのものが%TEMP%ではなくカレントの作業ディレクトリになってしまう追加の不具合を抱えていました。掃除されないファイルが、よりによって目に入りやすい場所に生成され続けたことが、この報告に多くのコメントが集まった要因です。

プラットフォームによって症状は次のように分かれます。

項目macOS / LinuxWindows
生成場所macOS / Linux/tmp(本来の一時ディレクトリ)Windowsプロジェクトの作業ディレクトリ直下
見え方macOS / Linux隠れて溜まるだけでgit statusには出ないWindowsgit statusが未追跡ファイルで埋まる
対応するissuemacOS / Linux#8856(2025年10月〜、オープン継続)Windows#17600(2026年1月〜2月、修正済み)

同じ2026年1月12日前後には、ほぼ同時期に#17568#17589という2件の重複報告も立っています。数時間のうちに独立した報告が3件並んでおり、複数のWindowsユーザーがほぼ同時に同じ不具合を踏んでいました。

v2.1.47で修正 — 5週間かかった経緯

Anthropicのスタッフは2026年2月17日に「次のリリースで修正される」とコメントし、issueは翌2月18日にクローズされました。同日リリースのv2.1.47の変更履歴には次の1行があります。

Windows: Fixed CWD tracking temp files never being cleaned up,
causing them to accumulate indefinitely (anthropics/claude-code#17600)

報告(2026年1月12日)から修正リリースまでは約5週間です。VS Code拡張経由やGitHub Copilotからの委譲セッションでも同じ現象が報告されており、影響はターミナル単体の利用に限りませんでした。

v2.1.47以降のバージョンにアップグレードすれば新規のファイルは作られなくなりますが、修正はそれ以前に溜まったtmpclaude-*-cwdを自動削除するものではありません。古いファイルは手動で消す必要があります。Windows版では他にも、設定ファイルが同時書き込みで壊れる不具合がv2.1.61で修正されています。ファイルI/O周りのWindows固有の不具合は、こうして個別にバージョンを重ねて潰されてきた経緯があります。

CLAUDE_CODE_TMPDIRを設定しても消えない

同じv2.1.5ではCLAUDE_CODE_TMPDIR環境変数も追加されており、Claude Codeが内部で使う一時ファイルの保存先を変更できます。この不具合の報告者の一人は、この変数を設定してもtmpclaude-*-cwdファイルの生成場所は変わらなかったと2026年1月12日にコメントしています。CLAUDE_CODE_TMPDIRは一時ファイル全般の保存先を切り替える環境変数ですが、この特定の不具合に対しては無効な回避策でした。作業ディレクトリ絡みの環境変数としては、起動ロゴのパス表示を隠すCLAUDE_CODE_HIDE_CWDもありますが、これも今回のファイル生成には関係しません。混同して設定変更だけで様子を見てしまうと、実際にはv2.1.47へのアップグレードが必要な状態のまま放置することになります。

既に溜まったファイルを消す

修正済みのバージョンにアップグレードした後も、過去のセッションで生成されたファイルはプロジェクトディレクトリに残っています。PowerShellでは次のコマンドでまとめて削除できます。

Get-ChildItem -Recurse -Filter "tmpclaude-*-cwd" | Remove-Item

Git Bash環境であればfindでも同様に削除できます。

find . -name 'tmpclaude-*-cwd' -delete

大量に溜まっていて今すぐ整理する時間がない場合は、.gitignoretmpclaude-*を1行追加するとgit statusのノイズだけは即座に消えます。ただしこれはファイルそのものを削除するわけではないので、ディスク上には残り続けます。

Stop hookで再発を防ぐ運用

v2.1.47以降であれば通常は不要ですが、社内配布のバイナリが古いままだったり、複数マシンでバージョンがまちまちになりやすい環境では、Stopフックで自動削除する運用が使えます。

{
  "hooks": {
    "Stop": [
      {
        "hooks": [
          {
            "type": "command",
            "command": "bash -c \"find . -maxdepth 1 -name 'tmpclaude-*-cwd' -delete 2>/dev/null; exit 0\""
          }
        ]
      }
    ]
  }
}

Stopフックはセッション終了時ではなく、メインエージェントが1回の応答を返し終えるたび(ターンごと)に発火します。応答が止まった時点、つまりBashコマンドが実行中でないタイミングで毎回掃除が走るため、ファイルが積み上がるのを防げます。exit 0を明示しているのは、削除コマンドの結果に関わらず応答の終了自体をブロックしないためです。セッション終了そのものを起点にした片付けをしたい場合は、代わりにSessionEndフックを使います。

根本のクリーンアップ漏れはまだ残っている

Windows版でプロジェクトディレクトリを汚す症状はv2.1.47で解消しましたが、根本原因であるissue #8856はクローズされていません。2025年10月の報告以降も再現コメントが続き、直近では2026年8月18日にも新しいコメントが付いています。macOSやLinuxでは/tmpという本来の置き場所に作られるため実害が見えにくいものの、/tmpをtmpfs(メモリ上のファイルシステム)で運用している環境では、消えないファイルがそのままメモリ消費として積み上がるという指摘です。

これとは別に、v2.1.238(2026年8月20日)では「Bashコマンドが強制終了・タイムアウト・中断されたときに/tmp/claude-*-cwdが残る」という、より限定的なケースへの修正が入りました。ただしこれは中断時の取りこぼしに対する修正であり、#8856が指摘する「通常終了時の掃除漏れ」そのものを閉じるものではありません。Windows表層の症状は直っても、追跡ファイルの後始末は、#8856がオープンのまま残っている以上、まだ終わっていません。

「nul」ファイルは別の不具合

同じissueのコメント欄では、tmpclaude-*-cwdと並んで空のnulという名前のファイルが生成され、しかも削除できないという報告も複数寄せられていました。これはWindowsで予約デバイス名(nulconprnなど)をファイル名として扱おうとしたときに起きる別種の不具合で、v2.1.47の変更履歴にもこのnulファイルへの言及はありません。tmpclaude-*-cwdを消したのにnulという名前のファイルだけ削除できずに残っている場合、それは同じ修正では解決しません。

よくあるつまずき

  • CLAUDE_CODE_TMPDIRを設定すれば直ると思い込む: 前述の通り、この変数はこの不具合に対しては効果がありませんでした。バージョンを上げることが唯一の恒久対策です
  • アップグレードすれば古いファイルも消えると思い込む: v2.1.47は新規発生を止めるだけで、既存のファイルは残ります。手動またはStop hookでの削除が必要です
  • Bashコマンドの実行中に手動で一括削除する: コマンドが動いている最中にまとめて消すと、そのコマンドが参照している最新の追跡ファイルまで巻き込んで消してしまう可能性があります。Stopフックは応答が止まりコマンドが実行中でないタイミングで発火するため、この意味では手動での実行中削除より安全です

まとめ

tmpclaude-*-cwdファイルは、Bashコマンド実行後の作業ディレクトリを追跡するための内部ファイルが、Windows版でクリーンアップされないまま作業ディレクトリ直下に生成され続けていた不具合の産物です。v2.1.47(2026年2月18日)以降であれば新規には発生しません。すでに古いバージョンで溜まったファイルが残っている場合は、PowerShellやfindでまとめて削除し、.gitignoreへの追記やStopフックでの自動掃除を組み合わせておくと、以後の運用でファイルが視界に入ることはなくなります。

この記事を共有:XはてブLinkedIn