はじめに
cacika は macOS で動く GitHub の集計ツールです。リポジトリの PR 数・コミット数・インシデント率を時系列で数え、スタンドアローンの HTML レポートとして出力します。数えられるのはアウトプットの量だけで、 その成果や生産性を測るものではありません(注意書き)。
動作環境
macOS
必要なもの
GitHub fine-grained PAT
ライセンス
月 ¥100 / 年 ¥1,000
必要な GitHub スコープ
| スコープ | 用途 |
|---|---|
repo | プライベートリポジトリを含む場合 |
public_repo | パブリックリポジトリのみの場合 |
セットアップ
インストールから最初のレポートが出るまでの手順です。順番どおりに進めれば 5 ステップで終わります。 cacika はメニューバーに常駐するアプリで、操作はすべて 画面右上のメニューバーアイコン(または Dock アイコンの右クリック)から開きます。
全体の流れ
ライセンス認証 → GitHub Token の登録 → config.yaml の作成 → インポート → データ取得とレポート出力
アプリを起動する
購入後にダウンロードした cacika.app を Applications フォルダへ移動して起動します。起動するとメニューバーに cacika のアイコンが追加されます。
初回起動時は ライセンス認証 のウィンドウが開きます。 購入時に発行されたライセンスキーを貼り付けて 「認証する」 を押してください。

認証が終わると、メニューの 「設定」 と「レポート出力」 が使えるようになります。 まだライセンスを持っていない場合は、同じ画面の「ライセンスキーを購入する」から購入できます。
GitHub Token を登録する
メニューバーアイコン → 設定 を開き、一般 タブに GitHub fine-grained PAT を入力して「保存」 を押します。 Token が未登録のままだと、他のタブは設定できません。

Token は 暗号化されてローカルに保存されるため、 設定ファイルに平文で記載する必要はありません。必要なスコープははじめに を参照してください。
config.yaml を作成する
設定の コンフィグ タブを開きます。初期状態では「config.yaml が設定されていません」 と表示され、 集計対象が何も決まっていない状態です。ここに読み込ませるconfig.yaml を、まずローカルで作成します。

以下のテンプレートを参考に作成してください。最低限必要なのはgithub_owner(Organization 名またはユーザー名)と、 集計対象を並べる github_repositories の 2 つです。 ファイル名は config.yaml、置き場所はどこでも構いません。
github_owner: "your-org"
github_repositories:
- name: "your-repo"
base_branch: "main"
incident_label: "incident"
github_members:
- "alice"
- "bob"チーム別の集計を出したいときはteam_members、 リリース進行レポートを使いたいときはrelease_progress を追加します。 全フィールドの説明と完全サンプルはconfig.yaml リファレンス にあります (アプリのコンフィグタブにある ? アイコンからも開けます)。
config.yaml をインポートする
設定の コンフィグ タブで「import」 を押し、作成したconfig.yaml を選択します。 読み込みに成功すると、下のように中身がそのまま表示され、どの設定が有効になっているかを確認できます。

設定を変えたいときは、手元のconfig.yaml を編集して もう一度 「import」 すれば上書きされます。 いま読み込まれている設定をファイルとして取り出したいときは「export」 を使います。
ここまででセットアップは完了です。あとはデータを取るだけです。
データを取得してレポートを生成する
メニューバーアイコン → レポート出力 を開きます。 まだ一度もデータを取得していない状態では、右側の実行履歴に「まだデータを取得していません」 と表示されます。

データを取得する
左下の 「取得範囲」 に、取得を開始したい日付を設定します (日付を押すとカレンダーが開きます)。この日付から現在までが集計の対象範囲です。
範囲を決めたら 「最新のデータを取得」 を押すと、GitHub からのデータ取得が始まります。 取得中はボタンが「データ取得中…」に変わり、その下に進行中のログが流れます。 完了すると右側の 実行履歴 に結果が並びます。
2 回目以降は前回の取得日が初期値として入るので、そのまま押せば差分だけを取り込めます。 初回や範囲が広いときは GitHub API の呼び出し数が増えるぶん時間がかかります。
レポートを出力する
取得が完了したら、左上の 「レポートを出力」 を押します。 生成が終わると保存ダイアログが開くので、保存先を選んでreport.html をダウンロードします。
出力されるのは 1 枚で完結する HTML ファイルです。サーバーは不要で、ブラウザで開くだけで閲覧できます。 中身の読み方は レポートの見方 を参照してください。
毎回手で取得するのが面倒なときは、設定の スケジュール タブで バックグラウンドの自動取得を有効にできます(自動スケジュール)。
config.yaml リファレンス
config.yaml はアプリの集計設定ファイルです。集計対象のリポジトリ・メンバー・チームを定義します。 アプリの 設定 → コンフィグ タブから import して読み込みます。
完全サンプル
# ── 必須 ─────────────────────────────────────────────
# GitHub の Organization 名またはユーザー名
github_owner: "your-org"
# 集計対象のリポジトリ(1 件以上)
github_repositories:
- name: "backend-repo"
base_branch: "main"
exclude_label: "dependencies" # このラベルが付いた PR を集計から除外
incident_label: "incident" # インシデントとして扱うラベル
exclude_prefix_pr_titles: # このプレフィックスで始まる PR を除外
- "Revert"
- "Reapply"
qafix_labels: # リリーステストの修正のPRを別集計したいときのラベル
- "qafix"
- name: "frontend-repo"
base_branch: "develop"
exclude_label: "dependencies"
incident_label: "hotfix"
# ── 任意 ─────────────────────────────────────────────
# 集計対象のメンバー(省略すると PR / コミットに現れたメンバーが対象)
github_members:
- "alice"
- "bob"
- "charlie"
# チーム構成。設定するとレポートの Teams ページが有効になる
team_members:
backend:
github_members:
- "alice"
- "bob"
frontend:
github_members:
- "charlie"
# GitHub API の取得上限
github_api_rate_limit:
default_max_get_pr_count: 500 # PR 取得の上限(デフォルト: 500)
default_max_commit_count: 1000 # コミット取得の上限(デフォルト: 1000)
# リポジトリ別に個別指定することも可能
# max_get_pr_counts:
# backend-repo: 1000
# max_commit_counts:
# backend-repo: 2000
# リリース進行レポート設定(GitHub Project V2 連携)
release_progress:
github_project_number: 1 # GitHub Project V2 の番号
github_project_owner: "your-org" # Project の所有者名
project_owner_type: "org" # "org" または "user"
spec_repositories: # 仕様記載 issue のリポジトリ
- "spec-repo"
dev_repositories: # 開発 issue のリポジトリ
- "backend-repo"
- "frontend-repo"
test_repositories: # テスト issue のリポジトリ
- name: "test-repo"
exclude_prefix_issue_titles: # 除外する issue タイトルのプレフィックス
- "[dev]"
何を設定すると、どのレポートに出るか
config.yaml の設定は、レポートの 3 つの集計に対応します。 「この集計で使うフィールドを見る」を押すと、下のフィールド一覧をその集計で使う項目だけに絞り込みます。


メンバー、チームの PR マージの集計
ベースブランチにマージされた PR とコミットを、メンバー別・チーム別に数えます。除外ラベルや除外プレフィックスで、集計に入れない PR を決められます。
詳しい集計の仕組みを表示詳しい集計の仕組みを閉じる
- 1
対象の PR を集める
github_repositoriesの各リポジトリについて、base_branchにマージ済みの PR を取得します。期間の判定に使うのは マージ日時 で、作成日ではありません。まだマージされていない PR は数えません。 - 2
二段階マージをほどく
中間ブランチにいったんマージし、そのブランチごと
base_branchに入れている場合、束ねている統合 PR は数えず、中に入っていた個々の PR に置き換えて数えます。逆にbase_branch自体を別ブランチへ流す PR(head がベースブランチ)は、作業が入ってくる PR ではないので除外します。 - 3
除外ルールを適用する
exclude_labelが付いた PR、exclude_prefix_pr_titlesのいずれかで始まるタイトルの PR(大文字小文字は区別しません)、qafix_labelsに該当する差し戻しの PR は、通常の集計から外します。 - 4
PR とコミットを数える
PR は作成者ごとに 1 件として数えます。コミットは、期間内の対象 PR にぶら下がるコミットだけを、コミットの作成者ごとに数えます。PR を通っていないコミットは数に入りません。
- 5
チームと 1 人あたりを出す
team_membersに書いたメンバーの数を合算してチームの数にします。1 人あたりは 合計 ÷ メンバー数 で、小数第 2 位までを切り捨てます。
数えているのはマージされた PR とそのコミットの件数だけです。変更行数・レビュー時間・難易度は見ていません。

障害発生の集計
インシデントラベルが付いた PR が全体の何割かを、期間ごとに出します。ラベル名はリポジトリごとに指定できます。
詳しい集計の仕組みを表示詳しい集計の仕組みを閉じる
- 1
母数は PR の集計と同じ
上の PR 集計と同じルール(マージ日時・二段階マージ・除外ラベル・除外プレフィックス)で絞り込んだ PR が、そのまま割合の分母になります。
- 2
障害の PR を見分ける
リポジトリごとに指定した
incident_labelが付いている PR を障害として数えます。見るのは PR に付いたラベルだけで、issue のラベルは見ません。 - 3
メンバー・チーム・推移
同じ計算をメンバー別とチーム別でも行います。推移のグラフは、選んだ期間を起点に直近 8 期間ぶんを並べます。
ラベルの付け忘れはそのまま数字に出ます。ラベル運用が揃っていないチーム同士の比較には向きません。

リリース進行の集計
GitHub Project V2 の仕様 issue から、開発 issue・開発 PR・テスト issue の階層をたどり、企画から開発・テストまでの所要日数を出します。
詳しい集計の仕組みを表示詳しい集計の仕組みを閉じる
- 1
基本的な設計
この機能は仕様、開発、テストをすべてGitHubのissueを使用している前提でのみ集計できる機能なのでご注意ください。
- 2
issue の階層をたどる
仕様 issue のタイムラインの相互参照から
dev_repositoriesの開発 issue(と、その sub-issue を最大 50 件)を拾い、その issue を閉じた PR、さらに PR のタイムラインからtest_repositoriesのテスト issue へたどります。exclude_prefix_issue_titlesで始まるテスト issue は除きます。 - 3
日数を出す
どの指標も issue の作成日時からクローズ日時までの差を日数(小数)で出します。企画開始〜リリースは仕様 issue の作成→クローズ、要件定義は仕様 issue の作成→最初の開発 issue の作成、開発とテストの全体期間は「いちばん古い作成日→いちばん新しいクローズ日」、個々の期間はその issue 自身の作成→クローズです。
- 4
終わっていないものの扱い
仕様 issue が open のままなら「進行中」として、平均の計算から外します。開発 issue・テスト issue が 1 つでも open だと、その全体期間は出しません(空欄になります)。
- 5
まとめかた
完了した仕様 issue について平均・最大・最小を出します。一覧は仕様 issue の作成日を基準に、今月末で終わる 3 ヶ月ごとの区切りでまとめます。
出るのは日数だけです。長い / 短いが良し悪しを表すわけではなく、issue の切り方や運用の違いでも簡単に変わります。
フィールド一覧
全 25 フィールドです。フィールド名・説明・表示画面の部分一致で絞り込めます。
github_ownerstring必須GitHub の Organization 名またはユーザー名。集計対象のリポジトリはこの owner 配下から取得します。
表示画面全画面github_repositorieslist必須集計対象のリポジトリのリスト。1 件以上の指定が必要です。
表示画面全画面github_repositories[].namestring必須リポジトリ名(org/name の name 部分)。
表示画面全画面github_repositories[].base_branchstring必須集計対象のベースブランチ名。このブランチへマージされた PR を数えます(例:main, master, develop)。
表示画面メンバーチーム障害発生github_repositories[].exclude_labelstring任意このラベルが付いた PR を集計から除外します(例:dependencies、集計除外)。
表示画面メンバーチーム障害発生github_repositories[].incident_labelstring任意インシデントとして扱うラベル。障害発生の集計に使われます(例:incident, hotfix)。
表示画面障害発生github_repositories[].exclude_prefix_pr_titlesstring[]任意このプレフィックスで始まるタイトルの PR を集計から除外します(例:Revert, Reapply)。
表示画面メンバーチーム障害発生github_repositories[].qafix_labelsstring[]任意QAテスト中の修正のPRを表す issue ラベル。PR が閉じる issue にこのラベルが付いている場合、その PR は通常の集計から除外し「QA Fix PR」として別に数えます。省略するとこのリポジトリではQAテスト中の修正のPRの検出を行いません。(QAテストで修正したPRを通常の集計から除外したい場合に設定)
表示画面メンバー詳細github_membersstring[]任意集計対象の GitHub ユーザー名のリスト。指定するとこのメンバーだけをレポートに表示します。
表示画面メンバーチームteam_membersmap任意チーム名をキーにしたチーム構成。1 チーム以上設定するとレポートの Teams ページが有効になります。
表示画面チームteam_members.<チーム名>.github_membersstring[]必須そのチームに所属する GitHub ユーザー名のリスト。チーム名は任意の文字列を使えます。
表示画面チームgithub_api_rate_limitobject任意GitHub API から取得する件数の上限設定。通常はデフォルト値のままで問題ありません。
表示画面全画面github_api_rate_limit.default_max_get_pr_countint任意デフォルト: 500PR 取得の上限数。全リポジトリ共通のデフォルト値です。
表示画面全画面github_api_rate_limit.default_max_commit_countint任意デフォルト: 1000コミット取得の上限数。全リポジトリ共通のデフォルト値です。
表示画面全画面github_api_rate_limit.max_get_pr_countsmap任意リポジトリ別の PR 取得上限(リポジトリ名: 上限数)。指定したリポジトリはデフォルト値より優先されます。
表示画面全画面github_api_rate_limit.max_commit_countsmap任意リポジトリ別のコミット取得上限(リポジトリ名: 上限数)。
表示画面全画面release_progressobject任意リリース進行レポートの設定。仕様 issue → 開発 issue → 開発 PR → テスト issue の階層をたどり、各フェーズの所要日数を集計します。リリース進行レポートを使うときだけ必要です。
表示画面リリース進行release_progress.github_project_numberint必須GitHub Project V2 の番号(Project の URL 末尾の数字)。1 以上の値が必要です。
表示画面リリース進行release_progress.github_project_ownerstring必須GitHub Project V2 の所有者名(Organization 名またはユーザー名)。
表示画面リリース進行release_progress.project_owner_type"org" | "user"必須Project の所有者の種別。Organization の Project なら org、個人の Project なら user を指定します。
表示画面リリース進行release_progress.spec_repositoriesstring[]任意仕様記載 issue を含むリポジトリ名のリスト。省略すると Project 内の全 issue を仕様 issue として扱います。
表示画面リリース進行release_progress.dev_repositoriesstring[]任意開発 issue を含むリポジトリ名のリスト。省略するとリポジトリ横断の開発 issue を絞り込みません。
表示画面リリース進行release_progress.test_repositorieslist任意テスト issue を含むリポジトリのリスト。省略すると PR 経由でひもづくテスト issue を絞り込みません。
表示画面リリース進行release_progress.test_repositories[].namestring必須テスト issue を含むリポジトリ名。
表示画面リリース進行release_progress.test_repositories[].exclude_prefix_issue_titlesstring[]任意このプレフィックスで始まるタイトルの issue を集計から除外します(例:[dev])。
表示画面リリース進行
一致するフィールドはありません
自動スケジュール
設定 → スケジュール タブで、データの自動取得スケジュールを設定できます。 バックグラウンドで定期的に GitHub からデータを収集します。
取得間隔
2 / 4 / 8 / 12 時間
バックグラウンドで自動実行
実行曜日
曜日を個別に指定
例:平日のみ実行
除外時間帯
時間帯を指定して除外
例:深夜〜早朝は実行しない
Tips
前回の自動取得日時は次回スケジュール実行時の起点として自動的に提案されます。 重複してデータが取得されることはありません。データ管理
収集したデータはローカルの SQLite データベースに保存されます。 JSON 形式でのバックアップ・復元と、データの完全削除をサポートしています。
エクスポート(バックアップ)
設定 → データ管理 からデータベースの内容を JSON ファイルとして書き出します。 リポジトリ・PR・コミット・実行履歴が含まれます。
対象テーブル
※ github_tokens はセキュリティのため除外されます
インポート(復元)
エクスポートした JSON ファイルからデータを復元します。2 つのモードがあります。
Upsert モード(デフォルト)
既存データを保持しながら新しいデータを追加・更新します。 段階的な復元や差分インポートに適しています。
Clean モード
既存データを削除してから JSON の内容で完全に置き換えます。 特定時点の状態に完全復元したい場合に使用します。
データリセット
収集したデータを削除します。削除前に確認ダイアログが表示されます。 テーブル単位での部分削除も可能です。
ライセンス管理
ライセンスキーは 1 台の Mac に登録して使います。 買い替えや故障で別の Mac に移すときは、先に元の Mac の登録を解除してください。
この Mac から解除する
メニューバー(または Dock)の cacika のメニューからライセンス情報 を開き、 「このデバイスのライセンスを解除する」を実行します。解除するとアプリは終了します。
Mac が故障して操作できない場合
アプリを起動できなくても、ライセンス管理ページから登録を解除できます。
- 1.ライセンス管理ページを開く
- 2. 購入時に使ったメールアドレスを入力する
- 3. 届いたワンタイムコードを入力してログインする
- 4. License Keys から、解除したい Mac の登録を Deactivate する
登録は Mac のコンピュータ名で表示されます。どれを解除するか分からない場合は、 今使っていない Mac の名前を選んでください。
新しい Mac で使い始める
解除が終わったら、新しい Mac で cacika を起動してライセンスキーを入力します。 解除せずに登録上限に達している場合は、認証画面にライセンス管理ページへのリンクが表示されます。
レポートの見方
生成された HTML ファイルはスタンドアローンで動作します。サーバー不要でブラウザで開くだけで閲覧でき、 日次・週次・月次・四半期など集計粒度を切り替えられます。
All Users ページ
全メンバーの PR 数とコミット数を一覧表示します。期間タイプ(日次〜年次)を選択でき、 前の期間との比較(増減率)も確認できます。
Teams ページ
チーム単位で集計した指標を表示します。config.yamlの team_membersを設定した場合に有効になります。
Incident Rate ページ
全 PR に対するインシデントラベル付き PR の割合を時系列で表示します。incident_labelで指定したラベルが付いた PR がインシデントとしてカウントされます。