Redmine へチケットを起票するボタンを追加
chktime のタスクと git 履歴から下書きを作り、まとめて Redmine へ登録できる ようにした。外部通信はこの機能を使ったときだけで、使わなければ従来どおり ローカルの jsonl を読むだけ。 - Redmine の REST API を叩く最小クライアント (標準ライブラリのみ) - 下書きは「タスクから」(1タスク=1チケット) と「git 履歴から」 (日ごと / 日 x 種別 / 期間一括) の 2 系統 - 起票は件数 x 間隔ぶん時間がかかるのでジョブにし、進捗だけ見に行く - 作成時の status_id は Redmine 側で無視されるため、作成後に付け直す - 連続アクセスに 403 を返すサーバがあるので 1 件ごとに間隔をあける (既定 7 秒) - 自己署名証明書が普通なので、既定は証明書の検証なし - API キーは redmine.json に置き、git 管理外にする Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
@@ -4,7 +4,10 @@ Claude Code の **タスク(セッション)ごとのチャットのやり
|
||||
|
||||
`~/.claude/projects/<プロジェクト>/<セッションID>.jsonl`(Claude Code の会話ログ)を解析して、
|
||||
「いつ何を頼んで、返事が来るまで何秒かかって、その作業が何分続いたか」を表にします。
|
||||
外部通信なし・追加ライブラリなし(Python 3.9+ の標準ライブラリのみ)。
|
||||
追加ライブラリなし(Python 3.9+ の標準ライブラリのみ)。
|
||||
|
||||
外部への通信は **[Redmine へ起票](#redmine-へ起票)** を使ったときだけです。それ以外は
|
||||
ローカルの jsonl を読むだけで、どこにも接続しません。
|
||||
|
||||
## 起動
|
||||
|
||||
@@ -30,6 +33,7 @@ python chktime.py
|
||||
| `--host` | 127.0.0.1 | 待ち受けアドレス |
|
||||
| `--dir` | `~/.claude/projects` | ログの置き場所 |
|
||||
| `--interval` | 2.0 | ログ更新を見に行く間隔(秒)。自動追従の反応速度 |
|
||||
| `--redmine-config` | `redmine.json` | Redmine 連携の設定ファイル |
|
||||
| `--no-browser` | – | ブラウザを自動で開かない |
|
||||
|
||||
## 画面
|
||||
@@ -105,6 +109,38 @@ python chktime.py
|
||||
- オフの間に増えたぶんは、次にオンにした時点でまとめて取り込みます。
|
||||
- オフのときは従来どおり **再読込** ボタンで更新します(解析キャッシュも捨てる強制再読込)。
|
||||
|
||||
## Redmine へ起票
|
||||
|
||||
ヘッダの **Redmine へ起票** で、作業の記録を Redmine のチケットにまとめて登録できます。
|
||||
**このアプリで唯一、外部へ通信する機能**です。使わなければ一切接続しません。
|
||||
|
||||
### 準備
|
||||
|
||||
ダイアログ右上の **設定** で、Redmine の URL と API アクセスキーを入れて保存します。
|
||||
キーは Redmine の「個人設定 → API アクセスキー」で表示できます。
|
||||
|
||||
- 設定は `redmine.json`(`--redmine-config` で変更可)に保存されます。**キーが平文で入るので git 管理外**です。
|
||||
- 社内 Redmine のような自己署名証明書のサーバでは「証明書を検証する」を**外して**ください。
|
||||
- **間隔(秒)** は 1 件ごとに空ける待ち時間です。連続アクセスに 403 を返すサーバがあるため既定 7 秒。速いサーバなら短くできます。
|
||||
|
||||
### 起票する
|
||||
|
||||
**下書きを作る → 中身を確かめる → 起票する** の 3 段です。取得元は 2 つあります。
|
||||
|
||||
| 取得元 | 内容 |
|
||||
| --- | --- |
|
||||
| **タスクから** | 中央の一覧に出ているタスクから選び、1 タスク = 1 チケットにします。本文は期間・全体/作業時間・往復数・ツール呼び出し数と、やりとりの一覧(発言時刻・要約・応答時間、最大 60 件)。開始日/期日はタスクの開始・終了日 |
|
||||
| **git 履歴から** | 指定したリポジトリのコミットをまとめてチケットにします。本文はコミットの一覧(日付・短縮ハッシュ・件名、最大 80 件) |
|
||||
|
||||
git 履歴のまとめ方は **日ごと / 日 × 種別(`feat:` `fix:` `docs:` …)/ 期間まとめて 1 件** から選びます。
|
||||
分類は**件名の prefix と日付だけを見た機械的なもの**で、中身の判断はしません。期間は空にすると全履歴です。
|
||||
|
||||
下書きは件名をクリックすると本文を確認でき、チェックを外せば除外できます。
|
||||
起票先のプロジェクト・トラッカー・ステータス・担当・進捗 100% はダイアログ上部で指定します(次回も同じ値で開きます)。
|
||||
|
||||
- 起票は 1 件ずつ間隔を空けて流すので、**数十件だと数分かかります**。進捗と結果(チケット番号/失敗理由)はダイアログに出ます。実行中もダイアログは閉じられます。
|
||||
- Redmine は**作成時の状態指定を無視する**ため、状態を指定した場合は作成直後に更新をもう 1 回投げて付け直します(1 件あたり 2 回アクセスします)。
|
||||
|
||||
## 解析の仕様(ざっくり)
|
||||
|
||||
- ターンの起点は「人間の発言」。ツール実行結果・システム挿入・サブエージェントの発言は起点にしません。
|
||||
@@ -117,8 +153,9 @@ python chktime.py
|
||||
## ファイル
|
||||
|
||||
```
|
||||
chktime.py サーバ + jsonl 解析
|
||||
chktime.py サーバ + jsonl 解析 + Redmine 連携
|
||||
web/index.html 画面
|
||||
web/app.js 表示ロジック
|
||||
web/style.css スタイル
|
||||
redmine.json Redmine 連携の設定(APIキーを含む。git 管理外・自動生成)
|
||||
```
|
||||
|
||||
Reference in New Issue
Block a user