Claude Media
Claude CodeでWindowsのウィンドウが点滅する原因と切り分け

Claude CodeでWindowsのウィンドウが点滅する原因と切り分け

Windowsでツールを実行するたびに黒いコンソールウィンドウが一瞬現れ、フォーカスを奪う症状の原因と、報告されている回避策の効き方をバージョン別にまとめます。

Claude CodeをWindowsで使っていると、BashやGrepなどのツールが動くたびに黒いコンソールウィンドウが一瞬開き、入力中のキーストロークを取りこぼすことがあります。原因は、Claude Codeが子プロセスを起動するときの設定漏れです。報告されている回避策は、症状の出どころによって効くものと効かないものが分かれます。

この記事では、点滅の正体、バージョンごとの修正状況、出どころの切り分け方、回避策の効き方を順に示します。

点滅の正体は子プロセスのコンソール割り当て

Windowsでは、コンソールアプリ(node.exe、bash.exe、git.exeなど)を子プロセスとして起動すると、既定で新しいコンソールウィンドウが割り当てられます。これを抑えるには、Node.jsならchild_process.spawn()のwindowsHide: true、Win32のAPIならCREATE_NO_WINDOWフラグを指定します。

Claude Codeのissue #14828(2025年12月に起票、ラベルはbug・platform:windows)は、この指定が足りない箇所を指摘する報告です。再現条件は単純です。

  • Windows Terminalで、どのツールでもよいので実行させる
  • Bash、Grep、Glob、Readなど、ツールの種類を問わずウィンドウが一瞬現れる

起票者が示した修正案もCREATE_NO_WINDOWかSTARTF_USESHOWWINDOWの指定です。つまり、ユーザー側の設定ミスではなく、起動側の実装の問題として扱われています。

修正の経緯 — v2.1.27、v2.1.45、v2.1.271

changelogには、この症状に関する修正が2回あります。

バージョンchangelogの記載範囲
v2.1.27changelogの記載Windows: Fixed console windows flashing when spawning child processes範囲CLI
v2.1.271changelogの記載[VSCode] Fixed console windows flashing on Windows when the extension runs background commands such as git, ripgrep, and the sign-in status check範囲VS Code拡張

v2.1.27はCLIの子プロセス起動全般への修正です。それでもissueが開いたままなのは、後のバージョンで再発したと報告されているからです。

コメントの一つは、v2.1.42では点滅せず、v2.1.47で再発したと報告しています。投稿者は、v2.1.45で入ったシェルのスナップショット機構が新しい起動経路を作り、windowsHideの指定が抜けたのではないかと推測しています。これは投稿者の推測であり、原因が確定したわけではありません。同じ投稿によると、別のissueではwindowsHide: trueがバイナリ内の12か所で指定されているのに、ConPTYと単一実行ファイルの文脈ではconhostが割り当てられるという調査も出ています。

VS Code拡張については、v2.1.271でバックグラウンドのgit、ripgrep、サインイン状態の確認が点滅する問題が直りました。拡張を使っていて、それ以前の版なら、まずここを疑えます。

別のコメントには、v2.1.50でwindowsHide: trueが効いていて点滅しなくなったという報告もあります。ただしこれは1人の環境(Windows 11、npm版のCLI、管理者でないアカウント)の報告で、他の人は同じ版でも点滅が続くと書いています。同じバージョン番号でも環境で結果が割れる、というのがこの問題の厄介な点です。

どの操作で点滅するか — 出どころ別の切り分け

issueのコメントを読むと、点滅の出どころは少なくとも4つに分かれます。どれに当たるかで、効く手が変わります。

切り分け

点滅の出どころ

  • ツール実行(Bash・Grep・Readなど)

    起票時の症状です。ツールを呼ぶたびに1回現れます。

  • フック

    SessionStart、PostToolUse、Stopなどでnodeやbunを起動するフックが、実行のたびに窓を出します。

  • MCPサーバーの起動

    stdio型のMCPサーバーをnpxなどで起動するとき、セッション開始時にまとめて現れます。

  • 内部の補助コマンド

    gitやghの状態確認、プラグイン確認などが、フックを全部止めても続きます。

内部の補助コマンドについて、あるコメントはProcess Monitorで起動イベントを取っています。Claude Desktop上でgit status --porcelainが約10秒おきに走り、gitからconhost.exe、gitと3プロセスが連なる様子が記録されています。新しい会話の開始時には、500ミリ秒ほどの間に10〜15個のプロセスが起動し、python --versionの確認が約260ミリ秒で5回走る例も示されています。投稿者はその環境でフックを全部無効にしても点滅は残ったと書いており、フックが原因とは限らない根拠になります。

切り分けは、次の順で絞ると手戻りが少なくなります。

  1. すべてのフックとプラグインを一時的に外し、ツールを1つ実行する
  2. 点滅が消えれば、フックかプラグインが出どころ。1つずつ戻して特定する
  3. 消えなければ、ツール実行そのものか内部コマンド。後述のシェル設定を試す

フックの仕組みはPostToolUse hookやPreToolUse hookの記事に詳しくまとめています。

フックの点滅 — 複数起動を減らす

issueには、フックでの点滅に対する実体験がいくつもあります。報告者の一人は、フックを減らして頻度を落としました。

  • 7つのフックを2つの統合スクリプトにまとめ、ツール1回あたりの起動数を約6割減らした
  • PreToolUseのmatcherからReadを外し、呼び出しを約半分にした
  • 3つのStopフックを1つにまとめた

ただし、同じ報告者は「完全には直せない」とも書いています。残ったフックの起動はそのまま点滅するためです。別のコメントは、フックでuv runのようにコンソールアプリを新しく起動すると窓が出る一方、echoやpythonのようにbashの中で完結する命令は点滅しなかった、と書いています。フックから別の実行ファイルを呼ぶ回数を減らす、が効く方向です。

フックの定義を整理するときは、settings.jsonで次のようにmatcherを絞ります。ここではEdit|Writeのときだけ動かし、読み取りでは動かさない例です。

{
  "hooks": {
    "PostToolUse": [
      {
        "matcher": "Edit|Write",
        "hooks": [
          { "type": "command", "command": "node .claude/hooks/format.js" }
        ]
      }
    ]
  }
}

シェル設定で試せる回避策と、効かなかった報告

issueに出ている回避策を、効いた報告と効かなかった報告に分けて並べます。

回避策結果の報告
envのSHELLにscoop版Git Bashのbash.exeを指定結果の報告点滅が止まったという報告あり。同じ手で効かなかった報告もあり
CLAUDE_CODE_GIT_BASH_PATHをC:\Program Files\Git\bin\bash.exeに指定結果の報告一部のユーザーで効いたという整理
バージョンをv2.1.42に固定し、自動更新を止める結果の報告点滅しないという報告。ただし新機能と修正を取り込めない
WSLで動かす結果の報告点滅しないが、作業環境が変わる
サブエージェントに作業を任せる結果の報告点滅が出なかったという1人の報告

CLAUDE_CODE_GIT_BASH_PATHは、Git Bashを見つけられないときのために用意された変数で、点滅対策として設計されたものではありません。Windowsのbash.exeかsh.exeを指すように設定し、存在しないパスや別名のファイルは無視される、という仕様です。settings.jsonのenvに次のように書きます。

{
  "env": {
    "CLAUDE_CODE_GIT_BASH_PATH": "C:\\Program Files\\Git\\bin\\bash.exe"
  }
}

一方、CLAUDE_CODE_SHELLをPowerShellやpwshにしても効かなかった、という報告があります。Windows Terminalを既定のターミナルアプリにする、pwshから起動する、といった手も同じ報告者は試して効果を得られていません。Claude Desktopの報告では、SHELLをcmd.exeやPowerShellに変えても、WSL上の作業ディレクトリでgit判定のbashウィンドウが毎メッセージで出続けたとあります。

環境ごとに結果が割れるので、1つずつ試して、変えた直後の点滅の有無で判断するのが確実です。Git Bashまわりの別の落とし穴はGit Bashでコマンドが約8KBで切れる原因にまとめています。

PowerShellツールへ寄せる場合の注意

公式のセットアップ手順によると、Git for Windowsが入っていない環境では、シェルコマンドはPowerShellツールで実行されます。Git for Windowsがある環境では、Bashツールが使われ、PowerShellツールも並んで使えます。CLAUDE_CODE_USE_POWERSHELL_TOOLで有効・無効を切り替えられます。

この切り替えが点滅を止めるかどうかは、issueの報告からは分かりません。PowerShellツールのコマンドは、既定ではcmd.exeのランチャー経由で起動されます。これを止めるCLAUDE_CODE_DISABLE_WINDOWS_SHELL_LAUNCHERは、バックグラウンド実行の引き継ぎを失う代わりに直接起動する設定で、詳しくはランチャーを止める設定の記事にあります。点滅への効果を示す報告はissueにありません。

Claude Desktopの場合 — 別のissueで追われている

Claude Desktop上のClaude Codeセッションでの同症状は、issue #66540で別に報告されています。環境はWindows 11、Claude Codeのバージョンは2.1.165です。MCPのstdioサーバーの起動、Bashツール、サブエージェントの起動のいずれでもconhostとcmd.exeかbash.exeのウィンドウが出て、複数セッションを並行させると点滅がほぼ途切れなくなる、という内容です。

  • 起票者の見立ては、windowsHide: trueが足りないというもの
  • セッション数×MCPサーバー数に比例して窓が増える、という数え方も示されている

CLI版のissueとは別に追う必要があります。CLIでの回避策が、Desktopで同じように効くとは限りません。

点滅が続くときの確認手順

次の順に確認すると、報告済みの症状のどれかに当てはめやすくなります。

  1. claude --versionで版を確認する。VS Code拡張なら、v2.1.271より前かどうかを見る
  2. 起動元を決める(CLI、VS Code拡張、Claude Desktop)。別々のissueで追われているため
  3. フックとプラグインを外して、点滅が残るかを見る
  4. 残るなら、CLAUDE_CODE_GIT_BASH_PATHを明示して、点滅の有無を確かめる
  5. それでも続くなら、v2.1.42への固定かWSLを、機能と引き換えの手として検討する

バージョン固定は、DISABLE_AUTOUPDATER=1で自動更新を止めることとセットで報告されています。

まとめ

点滅は、Claude Codeが子プロセスを起動するときのウィンドウ抑制が一部の経路で効いていない、という問題として追われています。CLIのissue #14828は開いたままで、changelogに載った修正はCLI全般(v2.1.27)とVS Code拡張(v2.1.271)の2回です。出どころは、ツール実行、フック、MCPの起動、内部の補助コマンドの4つに分かれ、フックだけは自分で数を減らせます。 環境ごとに効く手が割れる以上、症状のログを取りながら1つずつ試すのが近道です。

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