# chktime Claude Code の **タスク(セッション)ごとのチャットのやりとりの時刻**を一覧表示するローカル Web アプリ。 `~/.claude/projects/<プロジェクト>/<セッションID>.jsonl`(Claude Code の会話ログ)を解析して、 「いつ何を頼んで、返事が来るまで何秒かかって、その作業が何分続いたか」を表にします。 外部通信なし・追加ライブラリなし(Python 3.9+ の標準ライブラリのみ)。 ## 起動 ```bash python chktime.py ``` ブラウザで が開きます。 デスクトップに以下のショートカットを作成済みです。 | ショートカット | 動作 | | --- | --- | | **chktime 起動** | `pythonw chktime.py` をコンソールなしで起動し、ブラウザを開く。すでに起動中ならタブを開くだけ | | **chktime 停止** | `stop.cmd` を実行。`chktime.py` を実行中の python/pythonw を終了(結果を2秒表示) | `run.bat`(コンソール表示・ログを見たい時用)と `stop.cmd` は直接ダブルクリックでも使えます。 ※ `.cmd` / `.bat` は cmd の既定コードページで読まれるため、中身は ASCII のみにしています。 | オプション | 既定 | 説明 | | --- | --- | --- | | `--port` | 8787 | ポート番号 | | `--host` | 127.0.0.1 | 待ち受けアドレス | | `--dir` | `~/.claude/projects` | ログの置き場所 | | `--no-browser` | – | ブラウザを自動で開かない | ## 画面 - **左:プロジェクト** — 作業ディレクトリごと。タスク数・ログ容量・最終更新。先頭の **▦ すべてのプロジェクト** を選ぶと横断モードになります。 - **中央:タスク一覧** — 1 セッション = 1 行。タイトル(`/title` 指定 → AI 命名 → 最初のプロンプトの順)、開始日時、往復数、全体時間、作業時間。上の検索窓でタイトル/プロンプト本文を絞り込み。横断モードでは全プロジェクトのタスクを開始日時の新しい順に並べ、各行にプロジェクトを表示します(検索はパスにも効きます)。 - **右:やりとりの時刻** — 1 ターン(あなたの発言 → Claude の応答一式)が 1 行。ヘッダの **やりとり / 日別集計 / ガント** タブで表示を切り替えます。 ### 右ペインの列 | 列 | 意味 | | --- | --- | | 発言時刻 | あなたが送信した日時 `MM/DD hh:mm:ss.s`(ヘッダの「経過時間で表示」で、セッション開始からの相対表示に切替) | | 空き | 前のターンが終わってから次の発言までの間隔。前の応答中に送信した場合は **並行** | | 初回応答 | 送信から Claude の最初のメッセージが返るまで | | 応答時間 | 送信からそのターンの最後のメッセージ(ツール実行・サブエージェント含む)まで | | 完了時刻 | そのターンの応答が終わった時刻(相対表示時はセッション開始からの経過) | | タイムライン | 灰=空き、青=初回応答待ち、緑=応答中 | | 内訳 | そのターンの応答メッセージ数 / ツール呼び出し回数 | | やりとり | 送信内容(クリックで全文展開)と使用ツールの内訳 | 上部サマリの **作業時間合計** は各ターンの応答時間の合計(=実際に Claude が動いていた時間)、 **全体** は最初から最後までの経過時間です。放置時間が長いと両者は大きく離れます。 ### 日別集計タブ ターンをローカル日付で集計し、日ごとの **作業時間 / 往復数 / タスク数** を棒グラフと表で出します。 - 表示範囲は **14日 / 30日 / 90日 / 全期間**。活動のない日も 0 の列として並ぶので、間隔がそのまま日付軸になります。 - 横断モードでは棒を**プロジェクト別の積み上げ**にします(作業時間上位 7 件に色、残りは「その他」)。単一プロジェクト選択時は 1 色。 - 棒にカーソルを当てると、その日の内訳(プロジェクト別の作業時間)が出ます。土日は背景を薄く敷いています。 - 棒の高さは応答時間の合計なので、**セッションを並行して動かした日は 24 時間を超えることがあります**。 ### ガントタブ タスク(セッション)を 1 行ずつ、時間軸に並べたガントチャートです。 - **薄いバー** = 開始から終了までの全体、**濃い部分** = 実際に応答が動いていた区間(各ターンの発言〜応答完了。1 秒以内の隙間は繋げています)。放置していた時間がそのまま隙間として見えます。 - 表示範囲は **1日 / 3日 / 7日 / 14日 / 30日 / 全期間**。1〜3日なら軸が時刻目盛りに切り替わります。土日の帯・日境界の線・現在時刻の点線付き。 - 横断モードでは行の色がプロジェクトを表します(凡例は作業時間上位 7 件)。 - 行にカーソルを当てるとタイトル・プロジェクト・開始→終了・全体/作業/往復数、クリックするとそのタスクの「やりとり」を開きます。 - 同じ時間帯に複数のバーが重なっていれば、セッションを並行して動かしていた時間です。 `CSV` ボタンでタスク一覧・ターン一覧・日別集計・ガントのタスク一覧をそれぞれ書き出せます(Excel 用 BOM 付き UTF-8)。 横断モードのタスク一覧 CSV にはプロジェクト列が付きます。日別集計 CSV はプロジェクトごとの列を持つ横持ち形式です。 ## 解析の仕様(ざっくり) - ターンの起点は「人間の発言」。ツール実行結果・システム挿入・サブエージェントの発言は起点にしません。 - `/model` などのスラッシュコマンドは `command`、コンパクト後の自動継続は `resume` とラベル表示します。 - `[Request interrupted...]`(Esc 中断)が含まれるターンには ⚠ を付けます。 - セッション再開時に書かれるメタ行(attachment / system / mode 等)は、ターンの所要時間には数えません。 - 解析結果はファイルの更新時刻+サイズでキャッシュします。ログを更新したらヘッダの **再読込** を押してください。 ## ファイル ``` chktime.py サーバ + jsonl 解析 web/index.html 画面 web/app.js 表示ロジック web/style.css スタイル ```