tui-troubleshooting について
TUI のフリーズ、無反応、画面の空白化、端末状態の破損を調査するスキルです。端末モードの設定と復元、stdin、初回描画、起動時のブロックなどのライフサイクル問題を優先し、復旧コマンドと診断手順を示します。
主な機能
- 01raw モードと端末モード復元の確認
- 02stdin と初回描画の追跡
- 03起動時のブロックや出力競合の特定
- 04SSH、tmux、Windows、CI での差異を診断
- 05端末復旧コマンドの提示
活用シーン
- 01アプリ終了後にエコーやカーソルが異常
- 02TUI が空白のまま、または応答しない
- 03SSH、tmux、CI でのみ障害が再現
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ josiahsiegel/ claude-plugin-marketplace --skill tui-troubleshootingインストール後、Claude Code で/tui-troubleshootingを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
references/diagnostic-playbook.mdfreeze-hang-diagnosis.mdterminal-state-corruption.md詳細
TUI のトラブルシューティング:フリーズ、ハング、画面の空白化、ターミナル状態の破損
ユーザーから TUI が「フリーズした」「ハングした」「ターミナルが真っ白になった」「入力を受け付けなくなった」「ターミナルが壊れたままになった」「あるターミナルでは動くが、別のターミナルでは動かない」と報告された場合は、このスキルを使用してください。原因が判明するまでは、ターミナルのライフサイクルに関する障害として扱ってください。
最初の応答でのルール
表面的なチェックリストを提示しないでください。障害の種類を特定し、起動とクリーンアップの順序を調べ、具体的なライフサイクル上のバグを探してください。
- アプリは raw モード、代替画面、マウス、フォーカス、またはブラケット付きペーストを有効にしますか?
- 通常終了、Ctrl-C、例外、パニック、Promise の拒否、早期リターンのそれぞれで、すべてのモードが復元されますか?
- ターミナルのセットアップ後も stdin から入力が流れていますか?
- 非同期処理や入力を待つ前に、アプリは少なくとも 1 フレームを描画してフラッシュしますか?
- ログ、stderr、バックグラウンドタスク、子プロセスが同じターミナル画面に書き込む可能性はありますか?
- バグは tmux、SSH、Windows/ConPTY、CI、または TTY ではないパイプでのみ再現しますか?
発生頻度の高いフリーズ原因
特殊なターミナルプロトコルの問題より先に、次の原因を優先して確認してください。
- raw モードを復元していない。 エコーが無効になり、行編集もできなくなるため、クラッシュや早期リターンの後にシェルがフリーズしたように見えます。
- 一時停止した stdin を再開していない。 Node では、
process.stdin.pause()の後にresume()せず raw モードにすると、dataイベントが発生しません。UI は応答を永久に待ち続ける可能性があります。 - 初回描画がない。 アプリが代替画面や raw モードに切り替えて非同期のステータス確認を開始しても、初期フレームをフラッシュしないため、ユーザーには空白の画面が表示されます。
- 起動時の処理がブロッキングしている。 最初の描画より前に同期的なファイル、ネットワーク、またはプロセス呼び出しを行うと、イベントループや描画ループが停止します。
- 入力モードが一致していない。 stdin が raw モードなのに行単位の入力を待っている、または cooked モードや一時停止中なのに raw キーイベントを待っている状態です。
- クリーンアップによるモードの漏れ。 終了後も代替画面、マウスレポート、フォーカスイベント、またはブラケット付きペーストが有効なままになります。
最小限の診断方針
次の情報を求めるか、確認してください。
- 言語/フレームワークとターミナルライブラリ。
- プロセス開始から初回描画までの起動シーケンス。
- クリーンアップ、ガード、finally、defer、Drop、atexit、シグナルハンドラー。
- stdin/stdout/stderr が TTY かどうか。
- ローカル、SSH 経由、tmux/screen/Zellij 内、Windows 上、または CI で問題が発生するか。
- raw モードでのターミナルの症状:エコーが無効、カーソルが非表示、代替画面が空白、ペースト用のラッパー、マウスクリックが無視される、シーケンスが文字化けする。
ユーザー向けの復旧コマンド
ターミナルが操作不能になった場合は、詳しいデバッグに進む前に、復旧方法をユーザーに伝えてください。
stty sane
reset
printf '\033[?1049l\033[?25h\033[?1000l\033[?1002l\033[?1003l\033[?1006l\033[?2004l\033[?1004l\033[0m'
Windows PowerShell では、子プロセスによって ConPTY の状態が壊れた場合、タブを閉じるのが最も手早い復旧方法となることがあります。
推奨する修正パターン
すべての TUI で、ライフサイクルを単一の管理主体に担わせてください。
- TTY であることを確認するか、非 TUI モードを選択します。
- 最初にクリーンアップガードを設定します。
- 代替画面/raw モードと、必要に応じてマウス/ペースト/フォーカスの各モードを有効にします。
- raw キーイベントが必要な場合は、stdin を再開/ref します。
- すぐに初期フレームを描画してフラッシュします。
- 初回描画の後に非同期処理を開始します。
- ログを、制御中のターミナル画面以外に出力します。
- モードを逆順に、必ず 1 回だけ復元します。
参考ファイル
references/freeze-hang-diagnosis.md- 起動時および実行中のハングについて、根本原因、症状、診断方法、修正例、予防パターンを説明します。references/terminal-state-corruption.md- 画面の文字化け、色の異常、カーソルの不具合、不完全な描画、書き込みの混在、リサイズと描画の競合を扱います。references/diagnostic-playbook.md- フリーズ、ターミナル状態の異常、入力がない問題、SSH/tmux、Windows、文字化けした出力について、具体的なコマンドを含む判断フローを示します。
コメント
Markdown 対応