~/.claude/projects の会話ログ (jsonl) を解析し、タスク(セッション)ごとの やりとりの時刻を一覧表示するローカル Web アプリ。標準ライブラリのみで動作する。 - プロジェクト / タスク / ターンの3ペイン表示 - ターンごとに 発言時刻・空き時間・初回応答までの待ち・応答時間・完了時刻・ ツール呼び出し内訳を表示、タイムラインバー付き - 絶対時刻と経過時間の切替、絞り込み、CSV書き出し - ファイルの更新時刻+サイズでの解析キャッシュ、tool_result 行はパースを省略 - デスクトップ用の起動 (pythonw) / 停止 (stop.cmd) スクリプト Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
74 lines
4.2 KiB
Markdown
74 lines
4.2 KiB
Markdown
# chktime
|
||
|
||
Claude Code の **タスク(セッション)ごとのチャットのやりとりの時刻**を一覧表示するローカル Web アプリ。
|
||
|
||
`~/.claude/projects/<プロジェクト>/<セッションID>.jsonl`(Claude Code の会話ログ)を解析して、
|
||
「いつ何を頼んで、返事が来るまで何秒かかって、その作業が何分続いたか」を表にします。
|
||
外部通信なし・追加ライブラリなし(Python 3.9+ の標準ライブラリのみ)。
|
||
|
||
## 起動
|
||
|
||
```bash
|
||
python chktime.py
|
||
```
|
||
|
||
ブラウザで <http://127.0.0.1:8787/> が開きます。
|
||
|
||
デスクトップに以下のショートカットを作成済みです。
|
||
|
||
| ショートカット | 動作 |
|
||
| --- | --- |
|
||
| **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 が動いていた時間)、
|
||
**全体** は最初から最後までの経過時間です。放置時間が長いと両者は大きく離れます。
|
||
|
||
`CSV` ボタンでタスク一覧・ターン一覧をそれぞれ書き出せます(Excel 用 BOM 付き UTF-8)。
|
||
|
||
## 解析の仕様(ざっくり)
|
||
|
||
- ターンの起点は「人間の発言」。ツール実行結果・システム挿入・サブエージェントの発言は起点にしません。
|
||
- `/model` などのスラッシュコマンドは `command`、コンパクト後の自動継続は `resume` とラベル表示します。
|
||
- `[Request interrupted...]`(Esc 中断)が含まれるターンには ⚠ を付けます。
|
||
- セッション再開時に書かれるメタ行(attachment / system / mode 等)は、ターンの所要時間には数えません。
|
||
- 解析結果はファイルの更新時刻+サイズでキャッシュします。ログを更新したらヘッダの **再読込** を押してください。
|
||
|
||
## ファイル
|
||
|
||
```
|
||
chktime.py サーバ + jsonl 解析
|
||
web/index.html 画面
|
||
web/app.js 表示ロジック
|
||
web/style.css スタイル
|
||
```
|