- AI ⚙️
- マネジメント
生成AI導入の効果測定KPI|開発チーム向け指標一覧と計算式・集計コード
開発チームへの生成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期連続の黒字決算。