Redmine へチケットを起票するボタンを追加 #1

Merged
yoshikazu merged 1 commits from redmine-issue-button into main 2026-09-02 06:03:04 +00:00
Owner

ヘッダに「Redmine へ起票」ボタンを追加し、作業の記録を Redmine のチケットにまとめて登録できるようにした。

方針の変更

これまで CLAUDE.md / README.md に「外部通信しない」と書いていたが、**「外部通信は Redmine 連携だけ」**に改訂した。この機能を使わなければ、従来どおりローカルの jsonl を読むだけでどこにも接続しない。標準ライブラリのみという制約は維持(urllib / ssl / subprocess)。

使い方

下書きを作る → 中身を確かめる → 起票する の 3 段。取得元は 2 つ。

取得元 内容
タスクから 一覧のタスクを選んで 1 タスク = 1 チケット。本文は期間・全体/作業時間・往復数と、やりとりの一覧
git 履歴から リポジトリと期間を指定してコミットをまとめる。日ごと / 日 × 種別 / 期間一括

git 履歴のまとめ方は件名の prefix と日付だけを見た機械的なもので、中身の判断はしない。

手作業で踏んだ落とし穴を織り込んである

実際に 37 件を手で起票したときに引っかかった点を、コードと CLAUDE.md に残した。

  • 作成時の status_id が無視される(既定の New で入る)→ 作成直後に PUT /issues/<id>.json で付け直す
  • 連続アクセスに 403 を返す(Apache 側の制限)→ クライアント単位で 1 件ごとに間隔をあける(既定 7 秒)
  • 自己署名証明書が普通 → 既定は検証なし、設定で切替可
  • 件数 × 間隔ぶん時間がかかる → HTTP を掴まず、ジョブにして進捗を取りに来てもらう

API キーの扱い

  • redmine.json に保存し、.gitignore に追加
  • GET /api/redmine/config はキーの有無だけ返す(値は返さない)
  • 保存時にキーが空なら既存のキーを残すので、UI が値を持ち回らなくて済む

追加した API

ルート 内容
GET/POST /api/redmine/config 接続設定の取得 / 保存
GET /api/redmine/meta プロジェクト・トラッカー・ステータス・自分の情報
POST /api/redmine/draft 下書きを作る
POST /api/redmine/issues 起票をジョブとして開始
GET /api/redmine/job?id= 進捗と結果

do_POST はこの系統でのみ使う。

検証

**実 Redmine には 1 件も送っていない。**偽 Redmine をモックとして立て、実物と同じ「作成時の status_id を無視する」振る舞いをさせて通した。

  • 作成リクエストと、その直後のステータス更新リクエストの中身を確認
  • 起票先未指定・キー未設定・存在しないリポジトリのエラー経路を確認
  • UI はブラウザで両タブを操作(下書き生成・チェック除外・本文展開・起票ボタンの無効化)

注意

常用中のインスタンスは再起動しないとボタンが出ない。

🤖 Generated with Claude Code

ヘッダに「Redmine へ起票」ボタンを追加し、作業の記録を Redmine のチケットにまとめて登録できるようにした。 ## 方針の変更 これまで CLAUDE.md / README.md に「外部通信しない」と書いていたが、**「外部通信は Redmine 連携だけ」**に改訂した。この機能を使わなければ、従来どおりローカルの jsonl を読むだけでどこにも接続しない。標準ライブラリのみという制約は維持(`urllib` / `ssl` / `subprocess`)。 ## 使い方 **下書きを作る → 中身を確かめる → 起票する** の 3 段。取得元は 2 つ。 | 取得元 | 内容 | | --- | --- | | タスクから | 一覧のタスクを選んで 1 タスク = 1 チケット。本文は期間・全体/作業時間・往復数と、やりとりの一覧 | | git 履歴から | リポジトリと期間を指定してコミットをまとめる。日ごと / 日 × 種別 / 期間一括 | git 履歴のまとめ方は件名の prefix と日付だけを見た機械的なもので、中身の判断はしない。 ## 手作業で踏んだ落とし穴を織り込んである 実際に 37 件を手で起票したときに引っかかった点を、コードと CLAUDE.md に残した。 - **作成時の `status_id` が無視される**(既定の New で入る)→ 作成直後に `PUT /issues/<id>.json` で付け直す - **連続アクセスに 403 を返す**(Apache 側の制限)→ クライアント単位で 1 件ごとに間隔をあける(既定 7 秒) - **自己署名証明書**が普通 → 既定は検証なし、設定で切替可 - 件数 × 間隔ぶん時間がかかる → HTTP を掴まず、ジョブにして進捗を取りに来てもらう ## API キーの扱い - `redmine.json` に保存し、`.gitignore` に追加 - `GET /api/redmine/config` は**キーの有無だけ**返す(値は返さない) - 保存時にキーが空なら既存のキーを残すので、UI が値を持ち回らなくて済む ## 追加した API | ルート | 内容 | | --- | --- | | `GET/POST /api/redmine/config` | 接続設定の取得 / 保存 | | `GET /api/redmine/meta` | プロジェクト・トラッカー・ステータス・自分の情報 | | `POST /api/redmine/draft` | 下書きを作る | | `POST /api/redmine/issues` | 起票をジョブとして開始 | | `GET /api/redmine/job?id=` | 進捗と結果 | `do_POST` はこの系統でのみ使う。 ## 検証 **実 Redmine には 1 件も送っていない。**偽 Redmine をモックとして立て、実物と同じ「作成時の status_id を無視する」振る舞いをさせて通した。 - 作成リクエストと、その直後のステータス更新リクエストの中身を確認 - 起票先未指定・キー未設定・存在しないリポジトリのエラー経路を確認 - UI はブラウザで両タブを操作(下書き生成・チェック除外・本文展開・起票ボタンの無効化) ## 注意 常用中のインスタンスは再起動しないとボタンが出ない。 🤖 Generated with [Claude Code](https://claude.com/claude-code)
yoshikazu added 1 commit 2026-09-02 06:03:00 +00:00
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>
yoshikazu merged commit 7490e31076 into main 2026-09-02 06:03:04 +00:00
yoshikazu deleted branch redmine-issue-button 2026-09-02 06:03:04 +00:00
Sign in to join this conversation.
No Reviewers
No labels
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: yoshikazu/chktime#1