Docs

GitHub 連携と実績記録

GitHub をつなぐと、いま手をつけるべき issue・PR が右ペインの「作業キュー」に並ぶ。 そこからカレンダーへ置けば予定になり、▶ を押せば実績になる。 記録は同じ issue/PR ごとにまとまり、合計時間として見られる。

GitHub をつなぐ

GitHub 連携は Google アカウントのログインとは別物で、ログイン済みのプロファイルに 後からぶら下げる。まだログインしていないなら先に Google でログインしておくこと(はじめかた)。

  1. 設定から連携する

    画面右上の設定(歯車アイコン)を開き、「GitHub」セクションの「+ GitHub と連携」を押す。GitHub の認可画面へ移動する。

  2. 読ませるリポジトリを選ぶ

    GitHub 側で、kichijitsu をどこに入れるか(すべてのリポジトリか、選んだリポジトリだけか)を決める。 ここで選んだ範囲が、milestone の期日・リリース・自分の commit・CI/Actions 実行を読む対象になる。権限は読み取りのみで、issue や PR の内容を書き換えることはない。

  3. 左ペインで確認する

    戻ってくると、左のカレンダー一覧に「GitHub」の見出しと @あなたのログイン名 と連携中 が出る。ここで「実績オーバーレイ」(自分の commit をグリッドに薄く重ねる)と「CI/Actions 実行」の表示を切り替えられ、 「作業キュー(右ペインを開く)」で右ペインが開く。

連携すると、次のものがカレンダーに現れる。予定そのもの(Google の予定)とは別のデータで、GitHub 側へ書き戻すことはない。

  • 終日レーン — open な milestone の期日と、その milestone に属する issue/PR、公開済みリリース。 レーンの左端の「GitHub」を押すと畳める。畳んでいる間は日ごとの件数だけが残るので、 どの日に何件あるかは畳んだままでも分かる。開閉の状態はこの端末に残る。 件数が多くてレーンが画面の高さの 3 割を超えるときは、レーンの中を縦にスクロールできる (溢れたぶんが消えるわけではない)。
  • 実績オーバーレイ — 表示中の期間にある自分の commit。
  • CI/Actions 実行 — ワークフローの実行。
  • 作業キュー — 右ペインに並ぶ、いま自分に関係している issue/PR。

認可が切れると、作業キューに「GitHub の認可が切れました。」と再連携ボタンが出る。設定の GitHub セクションからも再連携できる。連携解除も同じ場所にある。

デスクトップ版(Tauri)には、Worker 経由の連携の代わりに手元の gh コマンドの認証をそのまま使う経路がある。OAuth アプリのインストールが許可されていない org でも GitHub を表示できる(デスクトップ版と PWA)。

作業キュー

作業キューは右ペイン(GitHub ペイン)の中のセクションの一つ。左ペインの「作業キュー(右ペインを開く)」で開く。ボタンの右の数字がキューの件数。

右ペインは上から次の並びになっている。

  • 実行中 — いま計測している作業。既定で開いている。
  • 作業キュー — まだ計測していない issue/PR。既定で開いている。
  • 実績を手動で記録 — 後から実績を足すフォーム。既定で閉じている。
  • 実績履歴 — 記録済みの実績。既定で閉じている。
  • いちばん下に「詳細レポート(予定 vs 実績)を開く」ボタン。

ペインの見出しにあるピンのアイコンで、右から被せるオーバーレイと、グリッドの右に居座る常設(ドッキング)を切り替えられる。オーバーレイは外側クリックや Escape で閉じるが、常設は閉じるボタンだけで閉じる。画面が狭いときは常に オーバーレイになり、切り替えボタン自体が出ない。

何が並ぶか

キューは GitHub の検索を3本投げて作る。中身は open な issue/PR だけで、区分ごとに見出しが分かれる。並びはこの順で固定。

見出し 対象 検索条件
レビュー依頼 自分にレビューが依頼されている PR is:open is:pr review-requested:@me
自分の担当 自分が assignee の issue is:open is:issue assignee:@me
自分の issue/PR 自分が作成した issue と PR is:open author:@me

自分の issue がキューに出ないときは、まずこの3条件のどれかに当てはまっているかを見る。closed のものは出ない。担当の割り当てが外れている issue は「自分の担当」には出ないが、自分が立てたものなら「自分の issue/PR」に出る。1件が複数の条件に当てはまるとき(自分で立てて自分で担当している issue など)は、まとめずにそれぞれの見出しの下に重ねて出す

各区分の取得は更新の新しい順に50件まで。それを超える分は切り捨てるので、放置している古い issue はキューから落ちることがある。各区分の中の並びも更新が新しい順。

見出しの右の で取り直せる。行をクリックすると GitHub の該当ページが新しいタブで開く。計測を始めた item はキューから消えて「実行中」へ移る —— 同じものが二か所に並ばないようにするため。

カレンダーに置く(予定ブロック)

キューの行をつかんでカレンダーのグリッドへドラッグすると、予定ブロックになる。「この issue を何時から何時までやるつもり」という置き場所で、後で実績と突き合わせるときの「予定」側になる。

  • 落としただけなら長さは1時間。開始位置は15分単位に吸着する。
  • 置いた後はドラッグで移動、下端をつかんでリサイズできる。
  • ブロックにも / が付いていて、そこから計測を始められる。
  • オーバーレイ表示の右ペインはグリッドに被さっているので、ドラッグを始めると自動で閉じる。

予定ブロックは kichijitsu の中だけのデータで、Google カレンダーには書き戻さない。端末のブラウザに保存され、他の端末には出ない(データの扱い)。実績のほうはサーバーに保存されるので、端末をまたいで見られる。

計測を始める・止める

作業キューの行、または予定ブロックの を押すと計測が始まる。このとき記録されるのは「開始した」ということだけで、終わりの時刻はまだ入らない —— この開きっぱなしの区間をオープン区間と呼ぶ。

実行中は3か所から見える・止められる。

  • 右ペインの「実行中」セクション(経過時間 + )。
  • ヘッダーのタイマーのバッジ。数字は走っている本数で、押すと一覧が開き、個別に止められる。
  • カレンダー上の予定ブロックの

を押すと終了時刻が入って実績として確定し、実績履歴とレポートに現れる。 押し間違いで0分の記録ができないよう、1分に満たない区間は1分として保存する。

同時に走らせる

本数の制限は無く、別々の issue/PR を何本でも並行して計測できる。ただし同じリポジトリの同じ番号は1本まで。すでに走っているものの をもう一度押しても2本目にはならない。 は押した対象だけを止め、他の並行分には触れない。

実行中の一覧はサーバーに保存されていて、45秒ごとに取り直している。別の端末やエージェント経由で始めた計測も、少し待てばここに出る。

止め忘れたとき

開いたままのオープン区間は、サーバー側の定期処理(6時間おき)が拾って、開始から12時間を超えていれば「開始 + 12時間」で閉じる。止め忘れても無限に伸び続けることはないが、代わりに実際とは違う長さの実績が残る。そのときは実績履歴から時刻を直せばよい。

停止したのに対応する開始が見つからない場合(すでに止まっている、別経路で閉じられた など)は、何も記録しない。0分の実績が勝手に増えることはない。

手動で記録する

タイマーを使わなかった作業は、右ペインの「実績を手動で記録」から後追いで足せる。入力は上から org、repo、issue/PR、開始、終了、agent。

  • org / repo — 連携先のリポジトリ一覧を取得できていれば、org を選ぶとその org の repo だけが絞り込まれるプルダウンになる。一覧を取得できないとき(未連携・オフライン・デスクトップ版で gh にログインしていない など)はテキスト入力に切り替わり、過去の実績や予定ブロックに出てきた org / repo をサジェストする。候補に無いものも自由に打てる。
  • issue/PR — 任意。repo を選ぶと、その repo の open な issue/PR がプルダウンに並ぶ。一覧が取れないときや open なものが1件も無いときは、番号を直接入力できる欄になる。
  • 開始 / 終了 — 日時を選ぶ。入力した時刻は、いま表示しているタイムゾーンのローカル時刻として解釈する。
  • agent — 任意。空のままなら manual が入る。この値は実績履歴でバッジとして出て、手で入れた記録とエージェントが入れた記録の区別に使われる。

repo は必須で、開始が終了より前でなければ保存できない。条件を満たしていないときはフォームにエラーが出る。「実績を追加」を押すと保存され、フォームは空に戻る。

同じ issue/PR でまとまる

右ペインの「実績履歴」は、記録を時系列でだらだら並べるのではなく、同じ issue/PR の記録をひとまとまりにして出す。見出しには参照(repo #番号)、分かればその issue のタイトル、合計時間、記録の件数、いちばん新しい記録の日時が並ぶ。見出しを押すと中の記録が開く。

まとまりは日付や連続性を見ない。朝に30分・午後に別の作業を挟んで・夕方にまた1時間という付き合いかたをしても、同じ issue の記録なら1グループに入り、合計は 1h 30m になる。グループの並びは「最後に手をつけた順」、グループの中は新しい順。

issue の書きかたが揃っていなくてもまとまる。UI のタイマーや手動入力は 12 のような素の番号を記録し、エージェント経由では owner/repo#12 という完全な参照で記録されることがあるが、どちらも「その issue の所属リポジトリ + 番号」に正規化してから突き合わせる。実装したリポジトリと issue のあるリポジトリが違っても、同じ issue なら1つのグループになる。

issue/PR を指定していない記録は、リポジトリごとの「issue 無し」グループにまとまる。

セクションの見出しには、全グループを通した合計時間と記録数が出る。個々の記録は「編集」で時刻・repo・issue・agent を直せ、「削除」で消せる(確認が1回入る)。手で入れた記録もエージェントが入れた記録も同じように扱える。

終了が開始より前になってしまった記録は、合計時間には足さない。ただし一覧からは消さない —— 直すか消すかを自分で決められるようにするため。

集計を見る・出す

右ペイン下部の「詳細レポート(予定 vs 実績)を開く」、または左ペインの「時間記録 → レポート」で、issue/PR ごとに予定と実績を突き合わせた表が開く。GitHub 未連携でもレポート自体は開ける。

中身
予定 カレンダーに置いた予定ブロックの合計。
計測中 いま走っているタイマーの経過。止めると「実績」へ移る。
実績 保存済みの作業時間。タイマーの停止・手動記録・エージェントからの記録をまとめた値。
推定 PR の自分の commit 時刻から推し量った参考値。commit の間隔が90分を超えたら別のセッションとみなし、各セッションに commit 前の作業として30分を足す。issue には commit が無いので常に「—」。
比率 予定と実績(計測中 + 実績)の長さを2本のバーで比べる。

「実績」と「推定」は別物として扱い、混ぜて表示しない。推定には が付く。値が無い欄の「—」は0分ではなく「該当なし・未取得」を意味する。

行は「予定ブロックのあるもの ∪ 計測中のもの ∪ 実績のあるもの」で、予定を立てずに記録だけした issue も並ぶ。並び順は実績の合計が多い順。

CSV で出す

右上の「CSV」でファイル(kichijitsu-report.csv)としてダウンロード、「コピー」で同じ内容をクリップボードへ。列は次のとおりで、時間の単位は

repo,number,type,title,planned_min,actual_manual_min,actual_hook_min,estimate_min

表と CSV は同じ行から作るので、内容がずれることはない。「該当なし」の欄は空セルのままにしてあり、表計算ソフトで0分と取り違えずに済む。

このレポートに並ぶのは、issue/PR の番号が数値として取れる記録だけ。番号を付けずに記録したものやブランチ名だけの記録は表に出ないが、実績履歴のほうには「issue 無し」グループとして残っている。

エージェントから記録する

実績は画面からだけでなく、Claude のようなエージェントや、Claude Code の hook のような非対話のスクリプトからも記録できる。接続手順とトークンの発行は MCP 接続ガイドにまとめてある。

ツール 用途
log_work_interval 開始と終了が分かっている区間を、まとめて1件記録する。
start_work_interval 計測を開始する(オープン区間を立てる)。画面の と同じ。
stop_work_interval 対応するオープン区間を閉じて実績を確定する。画面の と同じ。
work_summary 記録済みの実績を repo + issue 単位で集計して返す。

シェルから直接叩くなら、同じ処理を POST /api/work-intervals(まとめて記録)と /start/stop でも呼べる。認証は MCP トークンの Bearer で、書き込み先は画面から記録したときとまったく同じ場所。

エージェントが始めた計測も、画面の「実行中」セクションとヘッダーのバッジに出る(作業キューにも予定ブロックにも無い issue のときは repo #番号 の見出しになる)。 で画面から止めてよい。work_summary が返す数字と実績履歴のグループは同じ集計を使っているので、両者が食い違うことはない。