Claude Media
Claude Codeでリサイズすると履歴が重複表示される — Windows Terminalの原因と回避策

Claude Codeでリサイズすると履歴が重複表示される — Windows Terminalの原因と回避策

Windows Terminalのウィンドウをリサイズすると、クラシックレンダラーが会話履歴を丸ごと再出力します。報告された再現条件と、/tui fullscreenを軸にした回避策を示します。

履歴が二重に出たときにまず試すこと

Windows TerminalでClaude Codeを使っていて、ウィンドウの端をドラッグした直後に会話の履歴が丸ごと二重に出たなら、原因はクラシックレンダラーの再描画です。

最も確実な回避策は、/tui fullscreenでフルスクリーン表示に切り替えることです。報告者の環境では、これで重複が消えています。クラシックのまま使うなら、セッション中にウィンドウサイズを変えないのが唯一の予防策です。

会話の中身そのものは壊れていません。重複するのは画面とスクロールバックだけです。

どんな症状が報告されているか

anthropics/claude-codeのissue #98411には、リサイズで会話が二重に出る報告が4件あります。環境と症状が少しずつ違うので、先に並べます。

報告環境症状
issue本文環境Windows 11、Windows Terminal、PowerShell、v2.1.285症状履歴の全行が、元の出力の下にもう一度出る
WSL2の報告A環境WSL2(Ubuntu)上のWindows Terminal、v2.1.294症状全文ではなく断片が4〜5回繰り返される
WSL2の報告B環境WSL2上のWindows Terminal、v2.1.291症状過去の履歴が、ドラッグ中の再描画のたびにスクロールバックへ積み増される
macOSの報告環境macOS(zsh)症状リサイズなしでも起きる。画面外で出力が流れているときだと推測

最初の報告では、重複したブロックはステータス行から直前のユーザーメッセージまでです。起動時のバナーも一部だけが二重になり、Claude Code v2.1.285とSonnet 5 with xhigh effortの行は2回出ますが、cwdの行は1回です。

WSL2の報告Aのように断片だけが繰り返される形もあります。同じ文が回答の途中に何度も現れ、間にツール出力が挟まります。入力した自分のプロンプト行が2回出ることもあります。

macOSの報告だけは、リサイズが引き金とは限りません。Windows Terminal固有の問題と同一かどうかは、issueのやり取りからは分かりません。

再現条件 — 2ターン目の出力中にドラッグする

issue本文の再現手順は短く、毎回起きると書かれています。

手順

報告されている再現手順

  1. 1

    クラシックレンダラーで起動する

    Windows Terminal(PowerShellプロファイル)でclaudeを起動します。報告者のtui設定はdefaultで、クラシックレンダラーでした。

  2. 2

    1往復する

    メッセージを送って、返信を受け取ります。

  3. 3

    2ターン目の出力中にウィンドウの端をドラッグする

    返信がストリーミングされている最中に、ウィンドウの端をドラッグします。

  4. 4

    次の再描画で履歴が二重になる

    起動バナーから前のターンまでの全体が、元の下にもう一度出力されます。

報告者は2回再現し、2回目は意図的に2ターン目の途中でリサイズしています。リサイズが1回だけでも起きたことになります。

WSL2の報告Aの場合は、サイズやDPIが違うモニターの間でウィンドウを動かしたときです。ウィンドウが縮んで折り返しが変わり、返信の出力中に起きました。セッションが待機中のときも発生しましたが、重複したのは入力行と直前の返信の末尾だけでした。

なぜ重複するのか — 報告者の読み解き

issue本文には、報告者が2.1.285のバンドルを読んで突き止めた原因が書かれています。Anthropicの見解ではなく、報告者による解析である点に注意してください。

報告者によると、クラシックレンダラーはリサイズを受けると、幅が変わったか高さが縮んだ場合に「画面を消して新しい幅で描き直す」処理に入ります。このとき、端末のネイティブなスクロールバックへすでに確定させた履歴を、先頭から全部出し直すよう予約します。

Windows Terminalでは、この消去がずれます。

  • Claude Codeの消去コマンドは、レンダラーが自分で数えているカーソル位置に向けて送られる
  • Windows Terminalはリサイズの時点でスクロールバックを折り返し直しているので、実際のカーソル位置とは一致しない
  • 消去が見当違いの場所に当たり、再出力された履歴が元の履歴を置き換えず、後ろに追記される

その結果、きれいな描き直しではなく、逐語的な二重表示になります。issue本文は、リサイズ時の再描画の扱いに原因があるというWindows Terminal側の見方(microsoft/terminal#14448)とも整合すると書いています。

WSL2の報告Aは、WSL2での断片的な重複について別の仮説を出しています。再折り返しで描画領域がウィンドウより高くなり、すでにスクロールバックへ流れた行は消せなくなるため、再描画のたびにコピーが残るという推測です。本人も未検証と断っています。ドラッグ中はリサイズイベントが連続して届くので、コピーも増えるといいます。

いまのレンダラーを確かめる

回避策の前に、自分のセッションがどちらのレンダラーで動いているかを見ます。issue本文は「Windowsの既定はクラシック」としていますが、起動時のレンダラーはセットアップによって変わります。

/tui

引数なしの/tuiは、いま有効なレンダラーを表示します。入力欄がClaudeの作業中も動かず下に固定されていれば、フルスクリーンです。決まり方の全体はClaude CodeのTUI(フルスクリーン)とはにまとめています。

回避策1 — /tui fullscreenに切り替える

issue本文が「検証済み」としている回避策です。フルスクリーンはスクロールバックに履歴を積む仕組みを持たず、問題の再描画経路も通りません。

/tui fullscreen

会話を保ったまま再起動し、tui設定を保存します。設定ファイルに直接書くなら、キーはtuiで値は"fullscreen"です。

{
  "tui": "fullscreen"
}

切り替えると、使い勝手が変わる点があります。

  • 静的なClawdのバナーアートが描画されない(issue本文の報告)
  • Cmd+fやtmuxの検索は、会話がオルタネートスクリーンにあるため効かない。Ctrl+oで記録モードに入り、/で検索するか[でネイティブのスクロールバックに書き出す
  • 端末ネイティブのドラッグ選択ではなく、アプリ内の選択になる

マウス操作を戻したいときの設定や、スクロールの癖はフルスクリーンの解説記事にあります。

フルスクリーンでも断片が残るとき

Windows TerminalなどConPTYを使う端末では、フルスクリーン側にも別の癖があります。差分のセルだけを送る描画が正しくまとめられず、前の出力の断片がウィンドウをリサイズするまで残ることがあります。

この場合は、毎フレーム全セルを再描画するCLAUDE_CODE_ALT_SCREEN_FULL_REPAINT=1を設定して起動します。

$env:CLAUDE_CODE_ALT_SCREEN_FULL_REPAINT = "1"
claude

重複ではなく「古い文字が居残る」症状です。次の節の切り分けを参照してください。

回避策2 — クラシックのままリサイズを避ける

クラシックを使い続けたい場合の手は、実質的に1つです。

  • 起動前に、ウィンドウを使いたい大きさに合わせておく
  • セッション中にドラッグでサイズを変えない

issue本文は、これで引き金そのものを避けられると書いています。マルチモニターでウィンドウを動かすのも、サイズやDPIが変わるなら同じ引き金になります。

Ctrl+Lは効くのか

ここは情報が割れています。

出どころ内容
操作一覧の記述内容Ctrl+Lは画面全体を再描画し、入力と会話履歴は保つ
issue本文内容Chatコンテキストではctrl+lがchat:clearInputに割り当てられていて、chat:clearScreenも同じ処理に着く。クラシックにはユーザーが呼べる全面再描画のキーがない
WSL2の報告B内容Ctrl+Lで表示中の領域の崩れは直る。ただしスクロールバックに積まれた重複は残り、描画幅が次のキー入力まで古いままのこともある

issue本文の解析はバンドルの読み取りで、操作一覧とは食い違います。Ctrl+Lは見えている領域を直せることがあるが、重複そのものは消えない、と考えておくのが安全です。

すでに重複してしまった画面の後始末

履歴の中身は無事なので、画面だけ整えたいという状況です。報告された手はこうです。

  • /clearやclaude --continueは画面を片付けるが、スクロールバックの重複は消えない(WSL2の報告A)
  • 終了してclaude --resumeで入り直すと、スクロールバックもきれいになる(WSL2の報告B)

後者は、同じ端末のスクロールバックが別の物になるかどうかに依存する報告で、すべての環境で再現するとは限りません。

症状別の切り分け

リサイズ後の表示崩れには、似た症状が複数あります。

見えるもの疑うもの試すこと
履歴の全体、または断片が、元の下に追記される疑うもの本記事のクラシックレンダラーの再出力試すこと/tui fullscreen。クラシックのままならリサイズを避ける
古い入力欄の枠などが残って新しい描画と重なる疑うもの古い内容が居残る別症状(issue #83274)。サブエージェント切り替え時の再描画で報告試すこともう一度リサイズして全面再描画を促す
フルスクリーンで前の出力の断片が残る疑うものConPTY経由の差分描画のずれ試すことCLAUDE_CODE_ALT_SCREEN_FULL_REPAINT=1
リサイズをしていないのに重複する(macOSの報告)疑うもの別原因の可能性試すことissueへ環境を添えて報告する
リンクをCtrl+クリックするとブラウザが2回開く疑うものリサイズとは別の不具合試すことリンクが2回開く問題を参照

#83274の報告者は、サブエージェントの切り替え時に古い入力欄が重なり、再度リサイズするまで残ると書いています。重複ではなく居残りなので、同じトリガーでも対処は変わります。

報告するときに添える情報

issue #98411はopenで、修正したバージョンは示されていません。症状が出たら、次の情報をissueに足すと原因の絞り込みに役立ちます。

  • Claude Codeのバージョンと、tuiの設定値
  • Windows Terminalのバージョン、シェル(PowerShell 5.1か7、WSL2か)
  • 端末のサイズ(最初の報告は80x24)
  • 引き金(ドラッグ、モニター間の移動、出力中かどうか)
  • 重複の形(全文か断片か、スクロールバックまで及ぶか)

最初の報告では、PowerShell 5.1とpwsh 7.6.6の両方で観察され、Windows Terminalは1.24.11911.0と1.21.10351.0がインストールされていました。シェルを変えても避けられません。

まとめ

Windows Terminalでのリサイズによる履歴の重複は、クラシックレンダラーが履歴を出し直す処理と、リサイズ後のカーソル位置のずれが重なって起きると報告されています。回避策で検証されているのは/tui fullscreenだけです。クラシックを続けるなら、サイズ変更を起動前に済ませます。

フルスクリーンの副作用が気になるなら、バナーアートの欠落と検索手順の変更を許容できるかが判断の分かれ目です。スクロールバックが消える別の問題は、Claude Codeでスクロールバックが消える問題で扱っています。

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