開発チームへの生成AI導入の効果は、「利用・速度・品質・費用・体感」の5層の指標を、導入前と同じ方法で測って比べることで判断します。 利用者数や生成行数だけを見ると「使われているか」までしか分からず、PR件数だけを見ると品質の変化を見落とします。層を分けて並べると、どこが良くなり、どこに負担が移ったかが読めます。

この記事では、指標の定義と計算式の一覧、git log と gh の出力から集計するPython、導入前後を比べるSQL、金額への換算、月次報告のひな形を、貼って使える形で載せます。

確認環境(確認日 2026年10月7日):Ubuntu 24.04、Python 3.11.15、SQLite 3.45.1、git 2.43.0、GitHub CLI 2.45.0。スクリプトとSQLはこの環境で実行し、出力をそのまま載せています。入力は、gh pr list --json の出力と同じ形に作った架空のサンプルデータ(58件)と、ローカルに作ったGitリポジトリの git log です。金額・人数・時間もすべて架空の例です。

生成AI導入の効果測定KPI早見表

層 指標 計算式 取得元 読むときの注意
利用 利用者の割合 期間内の利用者数 ÷ ライセンス数 各ツールの管理画面 1回だけの利用も含まれる。週次で見る
利用 日次利用者数 1日に利用した人数 Copilot metrics、Claude Code analytics 休日・連休で下がる
利用 受入率 受け入れた提案 ÷ 提示された提案 同上 高いほど良いとは限らない。後で消した分は引かれない
利用 AI利用PRの割合 AI利用のPR ÷ マージしたPR ラベル、Claude Code analytics 帰属の数え方がツールごとに違う
速度 PRリードタイム中央値 作成からマージまでの時間の中央値 gh pr list、Copilot metrics 平均ではなく中央値。75%点も見る
速度 変更リードタイム 最初のコミットから本番反映まで Git、デプロイ記録 デプロイの頻度に左右される
速度 デプロイ頻度 期間内の本番反映回数 デプロイ記録 リリース計画の影響を受ける
速度 1人あたりマージPR数 マージPR数 ÷ 利用者数 gh pr list PRが細かくなるだけで増える
品質 変更失敗率 障害・修正を伴った反映 ÷ 全反映 障害記録、デプロイ記録 「失敗」の定義を先に決める
品質 取り消し率 Revertコミット数 ÷ マージ数 git log 取り消し以外の直し方は数えられない
品質 レビュー差し戻し率 修正依頼を受けたPR ÷ マージしたPR gh pr list の reviews レビューの厳しさが変わると動く
品質 レビュー指摘数 PR1件あたりの指摘コメント数 GitHub 指摘の重さは分からない
品質 差分行数の中央値 追加+削除の中央値 gh pr list 大きくなるとレビューの負担が増える
費用 ライセンス費 単価 × 人数 × 月数 契約・請求 使っていない席を含む
費用 従量課金(トークン費) 月ごとの請求額 各ツールの利用レポート 月による変動が大きい
費用 利用者1人あたり費用 費用合計 ÷ 利用者数 上の2つ 利用者数は実際に使った人で割る
体感 時間短縮の自己申告 アンケートの中央値 アンケート 実測とずれることがある。単独で使わない
体感 満足度・負担感 5段階の分布 アンケート 平均ではなく分布で見る

本記事の内容は、ご自由にお使いください。
ご利用の際は、出典として本ページへのリンクを記載いただけますようお願いします。

(記載例)出典:株式会社RJC「生成AI導入の効果測定KPI|開発チーム向け指標一覧と計算式・集計コード」

ツールの管理画面で取れる指標の定義

利用層の指標は、ツールごとに数え方が決まっています。同じ「受入率」でも対象が違うため、ツールをまたいで数字を比べず、同じツールの中で推移を見ます。

GitHub Copilot の利用状況メトリクス

GitHub Docs の「Copilot usage metrics」に載っている区分です(2026年10月7日閲覧)。

区分 内容
採用(Adoption) ライセンスを持つ開発者のうち、実際に使っている人数。日次・週次の利用者数
エンゲージメント 利用の頻度と幅。例:利用者1人あたりのチャット要求数
受入率 提案を開発者が受け入れた割合
コード行数 エディタ内で提案・追加・削除された行数。方向を見るための値
PRライフサイクル PRの作成数・マージ数、マージまでの時間の中央値

データは、集計が締まってから丸2日以内に利用できるようになると案内されています。

Claude Code の分析ダッシュボード

Claude Code Docs の「Track team usage with analytics」に載っている指標です(2026年10月7日閲覧)。

指標 定義
Lines of code accepted 利用者がセッション内で受け入れた行数の合計。却下した提案は含まず、後からの削除は追跡しない
Suggestion accept rate コード編集の提案(Edit、Write、NotebookEdit)を受け入れた割合
日次利用者数・セッション数 1日に利用した人数と、セッションの数
PRs with CC Claude Code で書いた行を1行以上含む、マージ済みPRの数
PRs with Claude Code (%) マージ済みPR全体に占める上記の割合
PRs per user 1日のマージPR数 ÷ 日次利用者数

PRへの帰属については、次のように説明されています。

項目 記載
数え方の方針 意図的に控えめで、関与の確度が高い行とPRだけを数える
対象期間 PRのマージ日の21日前から2日後までのセッション
書き換えた行 開発者が20%を超えて書き換えた行は帰属しない
除外 ロックファイル、生成コード、ビルド成果物、1,000文字を超える行など
ラベル 該当するマージ済みPRに claude-code-assisted が付く
提供範囲 貢献メトリクスは Teams/Enterprise プラン向けのパブリックベータで、GitHub連携の設定が必要

同じページは、これらの指標をDORAメトリクスやスプリントのベロシティなど、ほかの開発指標と合わせて使うことを勧めています。ツールが出す数字は「利用」の層で、速度と品質は自分たちのリポジトリから測ります。

git log と gh の出力からPR指標を集計する

入力データを取得する

GitHub CLI でマージ済みPRをJSONで取り出し、git log でコミットの一覧を取り出します。

gh pr list --state merged --limit 1000 \
  --json number,title,createdAt,mergedAt,additions,deletions,labels,reviews > prs.json

git log --pretty=format:'%H%x09%cI%x09%s' > gitlog.tsv

--json に指定できる項目名は、gh pr list --json を引数なしで実行すると一覧が表示されます(GitHub CLI 2.45.0 で createdAt・mergedAt・additions・deletions・labels・reviews が含まれることを確認)。--limit の既定値は30件のため、期間をまたいで集計するときは大きめの値を指定します。

この記事で使ったサンプルの prs.json は次の形です(スクリプトが読む項目だけにしています)。

[
  {
    "number": 158,
    "title": "機能158の変更",
    "createdAt": "2026-09-02T16:00:00Z",
    "mergedAt": "2026-09-05T16:00:00Z",
    "additions": 20,
    "deletions": 5,
    "labels": [],
    "reviews": [
      {"author": {"login": "reviewer1"}, "state": "CHANGES_REQUESTED", "submittedAt": "2026-09-03T16:00:00Z"},
      {"author": {"login": "reviewer1"}, "state": "APPROVED", "submittedAt": "2026-09-05T15:30:00Z"}
    ]
  },
  {
    "number": 157,
    "title": "機能157の変更",
    "createdAt": "2026-09-26T17:00:00Z",
    "mergedAt": "2026-09-26T20:00:00Z",
    "additions": 40,
    "deletions": 10,
    "labels": [{"name": "ai-assisted"}],
    "reviews": [
      {"author": {"login": "reviewer1"}, "state": "CHANGES_REQUESTED", "submittedAt": "2026-09-26T18:00:00Z"},
      {"author": {"login": "reviewer1"}, "state": "APPROVED", "submittedAt": "2026-09-26T19:30:00Z"}
    ]
  }
]

gitlog.tsv は、ハッシュ・コミット日時・件名のタブ区切りです。

0d2654a35d0045a536d7c364beb32a15dc65efd6    2026-09-30T16:00:00+00:00   Merge pull request #152 機能152の変更
b69bfa5ba8976cc3146116dc7065d1b33cf3db98    2026-09-30T12:00:00+00:00   Merge pull request #130 機能130の変更
7bce74d7e0f9f62f4b55bd722368473d23ed6066    2026-09-28T00:00:00+00:00   Merge pull request #147 機能147の変更

AIを使ったPRの目印は、ここでは自分たちで付ける ai-assisted ラベルとしています。Claude Code の貢献メトリクスを有効にしている場合は、自動で付く claude-code-assisted に読み替えてください。

集計スクリプト(Python)

導入日を境に、導入前と導入後の指標を並べます。標準ライブラリだけで動き、SQLで使うための prs.csv も出力します。

"""gh と git log の出力から、導入前後のPR指標を集計する。

入力の作り方:
  gh pr list --state merged --limit 1000 \
    --json number,title,createdAt,mergedAt,additions,deletions,labels,reviews > prs.json
  git log --pretty=format:'%H%x09%cI%x09%s' > gitlog.tsv

使い方:
  python3 pr_metrics.py prs.json gitlog.tsv 2026-08-01
"""
import csv
import json
import statistics
import sys
from datetime import datetime


def hours(start: str, end: str) -> float:
    fmt = "%Y-%m-%dT%H:%M:%SZ"
    return (datetime.strptime(end, fmt) - datetime.strptime(start, fmt)).total_seconds() / 3600


def main(pr_path: str, log_path: str, split: str) -> None:
    with open(pr_path, encoding="utf-8") as f:
        prs = json.load(f)

    rows = []
    for p in prs:
        rows.append({
            "number": p["number"],
            "created_at": p["createdAt"],
            "merged_at": p["mergedAt"],
            "lead_h": round(hours(p["createdAt"], p["mergedAt"]), 1),
            "lines": p["additions"] + p["deletions"],
            "ai_assisted": int(any(lb["name"] == "ai-assisted" for lb in p["labels"])),
            "changes_requested": int(any(r["state"] == "CHANGES_REQUESTED"
                                         for r in p["reviews"])),
        })

    # SQLで使えるようにCSVも出力する
    with open("prs.csv", "w", encoding="utf-8", newline="") as f:
        w = csv.DictWriter(f, fieldnames=list(rows[0]))
        w.writeheader()
        w.writerows(rows)

    # git log からマージコミットと Revert コミットを数える
    merges = {"導入前": 0, "導入後": 0}
    reverts = {"導入前": 0, "導入後": 0}
    with open(log_path, encoding="utf-8") as f:
        for line in f:
            _sha, date, subject = line.rstrip("\n").split("\t", 2)
            period = "導入前" if date[:10] < split else "導入後"
            if subject.startswith("Revert "):
                reverts[period] += 1
            elif subject.startswith("Merge pull request"):
                merges[period] += 1

    print("指標\t導入前\t導入後\t差")
    groups = {
        "導入前": [r for r in rows if r["merged_at"][:10] < split],
        "導入後": [r for r in rows if r["merged_at"][:10] >= split],
    }
    b, a = groups["導入前"], groups["導入後"]

    def line(name, fb, fa, unit="", nd=1):
        print(f"{name}\t{fb:.{nd}f}{unit}\t{fa:.{nd}f}{unit}\t{fa - fb:+.{nd}f}{unit}")

    line("マージしたPR数", len(b), len(a), "件", nd=0)
    line("リードタイム中央値", statistics.median(r["lead_h"] for r in b),
         statistics.median(r["lead_h"] for r in a), "h")
    line("リードタイム75%点", statistics.quantiles([r["lead_h"] for r in b], n=4)[2],
         statistics.quantiles([r["lead_h"] for r in a], n=4)[2], "h")
    line("差分行数の中央値", statistics.median(r["lines"] for r in b),
         statistics.median(r["lines"] for r in a), "行", nd=0)
    line("レビュー差し戻し率", 100 * sum(r["changes_requested"] for r in b) / len(b),
         100 * sum(r["changes_requested"] for r in a) / len(a), "%")
    line("取り消し率(Revert)", 100 * reverts["導入前"] / merges["導入前"],
         100 * reverts["導入後"] / merges["導入後"], "%")
    line("AI利用ラベルの割合", 100 * sum(r["ai_assisted"] for r in b) / len(b),
         100 * sum(r["ai_assisted"] for r in a) / len(a), "%")


if __name__ == "__main__":
    main(sys.argv[1], sys.argv[2], sys.argv[3])

サンプルデータ(導入前:2026年6〜7月の24件、導入後:8〜9月の34件)での実行結果です。

python3 pr_metrics.py prs.json gitlog.tsv 2026-08-01
指標  導入前 導入後 差
マージしたPR数    24件 34件 +10件
リードタイム中央値   23.0h   29.0h   +6.0h
リードタイム75%点  50.0h   72.0h   +22.0h
差分行数の中央値    100行    112行    +12行
レビュー差し戻し率   20.8%   35.3%   +14.5%
取り消し率(Revert)   8.3%    14.7%   +6.4%
AI利用ラベルの割合  0.0%    58.8%   +58.8%

このサンプルは、PR数は24件から34件に増えた一方で、リードタイム中央値は6時間延び、差し戻し率と取り消し率も上がっている、という傾向になるように作ってあります。PR数だけを報告すると「42%増」という見出しになりますが、5つの指標を並べると「出す量は増えたが、レビューと手直しに負担が移っている」と読めます。

指標の定義 このスクリプトでの数え方
リードタイム mergedAt − createdAt(時間)。下書きの期間を除きたい場合はレビュー依頼の時刻を起点にする
レビュー差し戻し率 reviews に CHANGES_REQUESTED が1件以上あるPRの割合
取り消し率 件名が Revert で始まるコミット数 ÷ Merge pull request で始まるコミット数
差分行数 additions + deletions

スカッシュマージやリベースマージを使っているリポジトリでは、マージコミットの件名が変わります。その場合は分母を prs.json のマージ済みPR数に置き換えてください。

導入前後を比べるSQL(SQLite)

スクリプトが出力した prs.csv を読み込み、期間別・月別に集計します。

-- prs.csv を読み込み、導入前後を比べる(SQLite)
.mode csv
.import prs.csv prs
.mode table

-- 1. 件数・平均・差し戻し率
SELECT CASE WHEN substr(merged_at, 1, 10) < '2026-08-01' THEN '1_導入前' ELSE '2_導入後' END AS period,
       COUNT(*)                                        AS prs,
       ROUND(AVG(lead_h), 1)                           AS avg_lead_h,
       ROUND(100.0 * SUM(changes_requested) / COUNT(*), 1) AS changes_req_pct,
       ROUND(100.0 * SUM(ai_assisted) / COUNT(*), 1)   AS ai_pct
FROM prs
GROUP BY period
ORDER BY period;

-- 2. リードタイムの中央値(件数が偶数なら中央2件の平均)
WITH ranked AS (
  SELECT CASE WHEN substr(merged_at, 1, 10) < '2026-08-01' THEN '1_導入前' ELSE '2_導入後' END AS period,
         CAST(lead_h AS REAL) AS lead_h,
         ROW_NUMBER() OVER (PARTITION BY CASE WHEN substr(merged_at, 1, 10) < '2026-08-01'
                                              THEN 1 ELSE 2 END
                            ORDER BY CAST(lead_h AS REAL)) AS rn,
         COUNT(*) OVER (PARTITION BY CASE WHEN substr(merged_at, 1, 10) < '2026-08-01'
                                          THEN 1 ELSE 2 END) AS cnt
  FROM prs
)
SELECT period, cnt AS prs, ROUND(AVG(lead_h), 1) AS median_lead_h
FROM ranked
WHERE rn IN ((cnt + 1) / 2, (cnt + 2) / 2)
GROUP BY period
ORDER BY period;

-- 3. 月ごとの推移(1か月だけの上下で判断しないため)
SELECT substr(merged_at, 1, 7)                          AS month,
       COUNT(*)                                         AS prs,
       ROUND(AVG(lead_h), 1)                            AS avg_lead_h,
       ROUND(100.0 * SUM(changes_requested) / COUNT(*), 1) AS changes_req_pct
FROM prs
GROUP BY month
ORDER BY month;
sqlite3 metrics.db < compare.sql
+--------+-----+------------+-----------------+--------+
| period | prs | avg_lead_h | changes_req_pct | ai_pct |
+--------+-----+------------+-----------------+--------+
| 1_導入前  | 24  | 31.2       | 20.8            | 0.0    |
| 2_導入後  | 34  | 37.9       | 35.3            | 58.8   |
+--------+-----+------------+-----------------+--------+
+--------+-----+---------------+
| period | prs | median_lead_h |
+--------+-----+---------------+
| 1_導入前  | 24  | 23.0          |
| 2_導入後  | 34  | 29.0          |
+--------+-----+---------------+
+---------+-----+------------+-----------------+
|  month  | prs | avg_lead_h | changes_req_pct |
+---------+-----+------------+-----------------+
| 2026-06 | 13  | 33.5       | 23.1            |
| 2026-07 | 11  | 28.4       | 18.2            |
| 2026-08 | 14  | 39.1       | 28.6            |
| 2026-09 | 20  | 37.0       | 40.0            |
+---------+-----+------------+-----------------+

中央値(23.0時間・29.0時間)はPythonの結果と一致しました。平均(31.2時間・37.9時間)は中央値より大きく、長くかかった少数のPRに引っ張られていることが分かります。リードタイムのように偏りのある値は、平均ではなく中央値と75%点で見ます。 確認環境の SQLite 3.45.1 では median() が使えなかったため、順位を振って中央の行を取り出す書き方にしています。

導入前後比較の設計

数字を集める前に、比べ方を決めておきます。

決めること 決め方 理由
基準期間 導入直前の2〜3か月。繁忙期や大型リリースを含むなら注記する 1か月だけでは偶然の上下が大きい
導入後の期間 基準期間と同じ長さ。最初の2〜4週間は別に集計する 慣れるまでの期間は数字が安定しない
対象チーム 同じチーム・同じリポジトリで前後を比べる チームが違うと題材の差が混ざる
比較対象 可能なら、導入していないチームの同じ期間も並べる 全社的な変化(体制、時期)を切り分ける
指標の定義 計算式と取得コマンドを文書に残す 途中で数え方が変わると比べられなくなる
同時に起きた変化 人数の増減、レビュー体制の変更、リリース時期を記録する 数字の動きをAI以外でも説明できるようにする

比べない指標、単独では判断に使わない指標も決めておきます。

指標 単独で使わない理由 一緒に見る指標
生成行数・受入行数 行数が多いことは価値を示さない。後で消した行も含む 差分行数の中央値、取り消し率
PR件数 細かく分ければ増える リードタイム、差し戻し率
受入率 受け入れた後に直した量が分からない レビュー差し戻し率
個人別の順位 題材と役割が違う。数字を上げる行動を招く チーム単位の推移
自己申告の短縮時間 実測とずれることがある PRリードタイム、作業時間の記録
AI利用PRと非利用PRの比較 AIを使う題材と使わない題材がそもそも違う 同じチームの前後比較

個人別の数字は、評価のためではなく、うまく使えている人のやり方をチームで共有するための手がかりとして扱うと、測定そのものが前向きに受け止められます。

行数・PR件数だけで判断した報告を直した例

【直す前】
生成AIツール導入の効果(8〜9月)
・AIが生成したコード:42,000行
・マージしたPR:24件 → 34件(42%増)
・利用者アンケート:85%が「生産性が上がった」と回答
→ 生産性が大幅に向上。全社展開を提案します。
気になる点 読み手に起きること 直し方
行数を成果として書いている 量と価値の区別がつかない 行数は利用の指標として書き、成果には使わない
PR件数だけで速度を語っている 品質の変化が見えない リードタイム・差し戻し率・取り消し率を並べる
体感をそのまま結論にしている 実測との差が分からない 実測と体感を別の行に書く
費用が無い 投資判断ができない 費用と金額換算を入れる
条件と次の一手が無い 展開の是非を決められない 分かったこと・分からないこと・次に確かめることを書く
【直した後】
生成AIツール導入の効果(導入前 6〜7月/導入後 8〜9月、開発チームA・同一リポジトリ)

1. 利用
   利用者 18/20人(90%)。AI利用ラベルの付いたPRは 58.8%。

2. 速度
   マージしたPR:24件 → 34件(+10件)
   PRリードタイム中央値:23.0時間 → 29.0時間(+6.0時間)

3. 品質
   レビュー差し戻し率:20.8% → 35.3%(+14.5ポイント)
   取り消し率:8.3% → 14.7%(+6.4ポイント)

4. 体感
   アンケートでは 85%が「速くなった」と回答。実測のリードタイムとは方向が異なる。

5. 読み取り
   出すPRは増えたが、レビューでの差し戻しとマージまでの時間が増えている。
   作成が速くなった分、確認の負担がレビュー側に移っていると考えられる。

6. 次に確かめること
   ・PRの大きさに上限を設けた場合の差し戻し率(10月)
   ・テストの自動判定を追加した場合の取り消し率(10〜11月)
   全社展開の判断は、上の2点を見たうえで12月に行う。

直した後は、良い数字とそうでない数字の両方が並び、次に何をするかが書かれています。

体感と実測がずれる根拠と、判断基準

自己申告だけで効果を判断しない理由を、公開されている調査で確認します(いずれも2026年10月7日閲覧)。

調査 内容
METR の無作為化比較試験(2025年7月10日) 経験豊富なオープンソース開発者16人・246件の課題で、AI利用を許可した課題は完了まで19%長くかかった。開発者は事前に24%の短縮を予想し、終了後も20%短縮したと感じていた
DORA 2025年版レポート(2025年9月23日発表) 約5,000人の調査。回答者の90%が仕事でAIを使い、80%超が生産性が上がったと感じている。AI利用はスループットと正の関係、デリバリーの安定性と負の関係。AIは組織の強みと弱みを増幅する
GitKraken の調査(@IT が2026年9月に紹介、回答554人) 84%が「AIで生産性が向上した」と回答。一方で効果を測定している組織は20%、39%は測定する手段がなく、33%は開発者の報告をそのまま採用

METR の著者は、この結果が「多くの開発者でAIが速度を上げない」ことを示すものではないと明記しています。読み取れるのは、「速くなった」という感覚と、時計で測った結果は別のものとして扱う必要があるという点です。

場面 自己申告の扱い 合わせて使う実測
導入直後の定着確認 使いにくい点・困りごとの把握に使う 利用者の割合、日次利用者数
効果の報告 「体感」として別の行に書く PRリードタイム中央値、差し戻し率
金額換算 単独では使わない 作業時間の記録、同種タスクの前後比較
展開範囲の判断 参考にとどめる 対象チームの前後比較、費用
研修・支援の計画 主な材料として使える 利用の少ない人・機能の把握

体感を集めるアンケートのひな形です。実測と並べやすいよう、時間は数値で聞きます。

■ 生成AIツール利用アンケート(月次・5分)

Q1. この1か月、AIツールを使った日はどのくらいですか。
    ほぼ毎日 / 週に2〜3日 / 週に1日程度 / 月に数回 / 使っていない

Q2. AIツールによって、1週間あたり何時間くらい短くなった(または長くなった)と感じますか。
    (   )時間 短くなった / (   )時間 長くなった / 変わらない

Q3. 短くなったと感じる作業を選んでください(複数可)。
    調査・既存コードの理解 / 実装 / テスト作成 / レビュー / 文書作成 / その他(  )

Q4. 時間が増えたと感じる作業を選んでください(複数可)。
    生成結果の確認 / 指示の書き直し / レビュー / 手直し / 特になし / その他(  )

Q5. AIが生成したコードを、内容を理解したうえで取り込めていますか。
    いつも / たいてい / ときどき / あまり

Q6. 困っていること、チームで共有したい使い方があれば書いてください。
    (自由記述)

時間削減を金額に直す換算表

効果を金額で示すときは、減った時間だけでなく、増えた時間(レビュー・検証)と費用を同じ表に入れます。

項目 式 例の数字 年間の金額
削減時間 人数 × 週数 × 週の削減時間 × 時間単価 20人 × 46週 × 1.5時間 × 4,000円 5,520,000円
増えたレビュー・検証 人数 × 週数 × 週の増加時間 × 時間単価 20人 × 46週 × 0.4時間 × 4,000円 −1,472,000円
ライセンス 単価 × 人数 × 12 5,000円 × 20人 × 12 −1,200,000円
従量課金 月額 × 12 60,000円 × 12 −720,000円
集計・管理 月の時間 × 12 × 時間単価 4時間 × 12 × 4,000円 −192,000円
初期費用 設定・ルール作成・説明会 一式 −600,000円

削減時間は、アンケートの値ではなく、同じ種類の作業を導入前後で記録した値を使います。時間単価は社内で決められた換算単価を使ってください。

効果を10割・7割・5割で見るスクリプト

"""時間の変化を金額に直し、効果を100%・70%・50%で見た場合を並べる。"""
USERS = 20              # 利用者数(人)
WEEKS = 46              # 年間の稼働週
RATE = 4_000            # 時間単価(円)社内の換算単価を使う
SAVED_H = 1.5           # 実測した削減時間(時間/人・週)
REVIEW_H = 0.4          # 増えたレビュー・検証の時間(時間/人・週)
LICENSE = 5_000         # ライセンス(円/人・月)
TOKEN = 60_000          # 従量課金の月額(円)
ADMIN_H = 4             # 集計・管理の時間(時間/月)
INITIAL = 600_000       # 初期費用(設定・ルール作成・説明会)

saved = USERS * WEEKS * SAVED_H * RATE
review = USERS * WEEKS * REVIEW_H * RATE
running = USERS * LICENSE * 12 + TOKEN * 12 + ADMIN_H * 12 * RATE

print(f"削減時間の金額換算   : {saved:>10,.0f} 円/年")
print(f"増えたレビューの金額 : {review:>10,.0f} 円/年")
print(f"年間運用費           : {running:>10,.0f} 円/年")
print(f"初期費用             : {INITIAL:>10,.0f} 円")
print()
print("効果の見込み\t年間効果\t年間の純額\t1年目の純額\t回収")
for ratio in (1.0, 0.7, 0.5):
    effect = saved * ratio - review          # 増えた時間は割り引かずに引く
    net = effect - running
    first = net - INITIAL
    payback = f"{INITIAL / net * 12:.1f}か月" if net > 0 else "回収に至らない"
    print(f"{ratio:.0%}\t{effect:,.0f}\t{net:,.0f}\t{first:,.0f}\t{payback}")
削減時間の金額換算   :  5,520,000 円/年
増えたレビューの金額 :  1,472,000 円/年
年間運用費           :  2,112,000 円/年
初期費用             :    600,000 円

効果の見込み  年間効果    年間の純額   1年目の純額  回収
100%    4,048,000   1,936,000   1,336,000   3.7か月
70% 2,392,000   280,000 -320,000    25.7か月
50% 1,288,000   -824,000    -1,424,000  回収に至らない

この例では、効果が見込みの7割だと年間の純額は28万円で、初期費用の回収に約26か月かかります。5割では運用費を下回ります。 増えたレビュー時間は見込みではなく実際に発生している時間のため、割り引かずにそのまま引いています。「削減時間」の測り方が結果を大きく左右することが分かります。

ROI・回収期間の計算表への記入例

投資判断の資料では、初期費用・年間運用費・年間効果を年ごとに並べる計算表がよく使われます。上の結果(効果7割の場合)を入れるとこうなります。

項目 0年目 1年目 2年目 3年目
初期費用 600,000 0 0 0
年間運用費 0 2,112,000 2,112,000 2,112,000
年間効果(7割) 0 2,392,000 2,392,000 2,392,000
純額 −600,000 280,000 280,000 280,000
累計 −600,000 −320,000 −40,000 240,000

累計がプラスに転じるのは3年目です。AIツールは料金体系や性能の変化が速いため、評価期間は長く取りすぎず、半年〜1年ごとに実測値で表を更新する前提で示すと、判断する側が受け取りやすくなります。年間効果の行には「削減時間の金額 × 見込みの割合 − 増えたレビューの金額」を入れ、運用費と二重に引かないようにします。

経営向け月次報告のひな形

1ページに収まる形です。【 】を書き換えて使います。

# 生成AIツール 利用状況と効果(【2026年9月】)

対象:【開発チームA、20人、リポジトリ shop】 基準期間:【2026年6〜7月】

## 1. 今月の要点(3行)
- 【利用は定着(利用者90%)。マージしたPRは増加】
- 【レビュー差し戻し率が上昇。確認の負担がレビュー側に移っている】
- 【10月はPRの大きさの上限と自動判定の追加を試す】

## 2. 指標
| 層 | 指標 | 基準期間 | 今月 | 見方 |
|---|---|---|---|---|
| 利用 | 利用者の割合 | 【—】 | 【90%】 | 【定着】 |
| 利用 | AI利用PRの割合 | 【0%】 | 【58.8%】 | 【—】 |
| 速度 | マージしたPR数(月平均) | 【12件】 | 【17件】 | 【増加】 |
| 速度 | PRリードタイム中央値 | 【23.0時間】 | 【29.0時間】 | 【延びた】 |
| 品質 | レビュー差し戻し率 | 【20.8%】 | 【35.3%】 | 【上昇】 |
| 品質 | 取り消し率 | 【8.3%】 | 【14.7%】 | 【上昇】 |
| 体感 | 「速くなった」と回答 | 【—】 | 【85%】 | 【実測と方向が異なる】 |

## 3. 費用
| 項目 | 今月 | 累計 |
|---|---|---|
| ライセンス | 【100,000円】 | 【200,000円】 |
| 従量課金 | 【60,000円】 | 【115,000円】 |
| 合計 | 【160,000円】 | 【315,000円】 |

## 4. 金額換算(年換算・見込み)
| 効果の見込み | 年間効果 | 年間の純額 |
|---|---|---|
| 10割 | 【4,048,000円】 | 【1,936,000円】 |
| 7割 | 【2,392,000円】 | 【280,000円】 |
| 5割 | 【1,288,000円】 | 【−824,000円】 |

## 5. 分かったこと・まだ分からないこと
- 分かったこと:【PRの作成は速くなった。差し戻しは増えた】
- まだ分からないこと:【差し戻しの増加が一時的なものか。障害件数への影響】

## 6. 来月の取り組みと判断事項
- 取り組み:【PRの差分行数に上限を設定/テストの自動判定を追加】
- 判断をお願いしたいこと:【なし(展開範囲の判断は12月に提案)】

## 7. 測定方法(変更があれば記載)
- PR指標:GitHubのマージ済みPRを月初に取得し、同じスクリプトで集計
- 利用指標:ツールの管理画面の値
- 同時に起きた変化:【9月に2名が加入】

よくある質問

Q. 最初に測るべき指標は、どれですか? A. 導入前の値が後から取れるものを優先します。PRリードタイム、差し戻し率、取り消し率はGitHubとGitの履歴から過去にさかのぼって計算できます。利用者数や受入率は導入後にしか存在しないため、導入前の基準が要る速度・品質の指標から先に定義を決めます。

Q. 導入前のデータを取っていませんでした。どうすればよいですか? A. PRとコミットの履歴が残っていれば、この記事のスクリプトで導入前の期間を集計できます。作業時間の記録のように履歴が無いものは、これから「AIを使わない同種の作業」と「使う作業」を並べて記録し、基準を作ります。

Q. 受入率が低いのは、良くない状態ですか? A. 低いこと自体は判断材料になりません。提案をよく読んで選んでいる結果かもしれず、高い場合も、受け入れた後の手直しは数字に表れません。受入率は推移を見る指標として使い、差し戻し率や取り消し率と並べて読みます。

Q. どのくらいの期間で効果を判断できますか? A. 基準期間と同じ長さ(2〜3か月)を導入後にも取り、最初の2〜4週間は慣れの期間として分けて見るのが目安です。月ごとの推移を並べ、1か月だけの上下で結論を出さないようにします。

まとめ

  • 指標は「利用・速度・品質・費用・体感」の5層で並べる。1つの層だけで結論を出さない
  • PRリードタイムは平均ではなく中央値と75%点で見る。サンプルでは平均31.2時間に対し中央値は23.0時間だった
  • PR件数と行数は単独で使わない。差し戻し率と取り消し率を必ず並べる
  • ツールの管理画面の数字は「利用」の層。数え方はツールごとに違うため、同じツールの推移で読む
  • 体感と実測は別の行に書く。METRの試験では、19%長くかかっていた開発者が20%短縮したと感じていた
  • 金額換算では、増えたレビュー時間と費用を引き、効果7割・5割の場合も示す
  • 比べ方(基準期間・対象・定義)を先に文書にすると、後から数字を説明できる

参考・出典

いずれも2026年10月7日に閲覧しました。

  • GitHub Docs「GitHub Copilot usage metrics」 https://docs.github.com/en/copilot/concepts/copilot-usage-metrics/copilot-metrics
  • Claude Code Docs「Track team usage with analytics」 https://code.claude.com/docs/en/analytics
  • GitHub CLI マニュアル「gh pr list」 https://cli.github.com/manual/gh_pr_list
  • METR「Measuring the Impact of Early-2025 AI on Experienced Open-Source Developer Productivity」(2025年7月10日) https://metr.org/blog/2025-07-10-early-2025-ai-experienced-os-dev-study/
  • DORA「State of AI-assisted Software Development 2025」 https://dora.dev/research/2025/dora-report/
  • Google Cloud Blog「Announcing the 2025 DORA Report」(2025年9月23日) https://cloud.google.com/blog/products/ai-machine-learning/announcing-the-2025-dora-report
  • @IT(GitKraken の調査の紹介記事) https://atmarkit.itmedia.co.jp/ait/articles/2609/23/news011.html

本記事の内容は、ご自由にお使いください。
ご利用の際は、出典として本ページへのリンクを記載いただけますようお願いします。

(記載例)出典:株式会社RJC「生成AI導入の効果測定KPI|開発チーム向け指標一覧と計算式・集計コード」

株式会社RJC ― SI事業・SES事業・AI駆動開発。RJCは一緒に成長を楽しめる会社です。

WE ARE HIRING

RJCで一緒に開発しながら、
成長を楽しみませんか?

RJCは、Web・モバイル・AIを活用した開発プロジェクトで、テックリードやPM・PMOも活躍するシステム開発会社です。会社を知る、待遇を確かめる、話を聞いてみる。気になるところ見てみてください!

  • 127日年間休日
  • 12時間平均残業時間
  • 毎日ガチャ遊びココロも大切にする福利厚生。アマギフなどの賞品ラインナップ!

ほかにも、チケットレストラン、書籍読み放題、2年ごとの慰労報奨(休暇 or 金一封)、11期連続の黒字決算。

ABOUT RJC RJCがどんな会社か知る 考え方、研修、働き方、福利厚生、社員の前職まで。RJCのことが丸わかり! RJC丸わかりページへ JOB DESCRIPTION 仕事内容・待遇を見てみる 仕事内容、給与・待遇、選考の流れ。経験者も未経験も!応募前に知りたいこと、まとめました! 募集要項を見る ENTRY エントリーする エントリーは1〜2分・履歴書不要です。まずは話を聞いてみたい、という方でも歓迎です! エントリーフォームへ

RJCで一緒に開発しながら、 成長を楽しみませんか?