AI駆動開発の生産性を計測する方法|Claude Code Hooks APIで可視化

目次

AI駆動開発の生産性、ちゃんと計れていますか?

「メンバー全員、Claude Code をもっと使うべきだ。MAX×20プランを使い切るぐらい活用してほしい」

上長からこう言われたとき、正直なところ返す言葉がありませんでした。チームに Claude Code の Max プランを導入して数ヶ月。「便利になった」「コードレビューが楽になった」という声は聞こえてきます。しかし、実際にどのメンバーがどれくらい使っていて、どんなタスクに活用しているのか——そのデータがどこにもなかったのです。

経験豊富な開発者16人を対象としたランダム化比較試験で、AIツール使用時に生産性が19%低下した。しかも開発者自身は「24%速くなった」と予想し、実験後も「20%速くなった」と感じていた。

― METR Measuring the Impact of Early AI Assistance on Software Development

体感と実態のギャップ——これは他人事ではありません。「なんとなく便利」では、投資対効果を示せません。チームの AI 活用を改善するには、まず計測できる状態を作る必要があります。

そこで構築したのが、Claude Code の Hooks API を使ったチーム利用状況の自動収集・可視化システムです。本記事では、AI駆動開発の生産性を計測するための KPI 設計から、データ収集アーキテクチャ、ダッシュボードの機能までを実例付きで解説します。

AI コーディングの効果測定で何を測るべきか——4ティアKPI体系

AI コーディングツールの効果をどう定義し、何を測るべきでしょうか。単純な「コード生成行数」や「使用時間」では本質を捉えられません。チーム運用の中で見えてきた計測軸を、4つのティアに体系化しました。

graph TD
    T1[Tier 1: セッション効率]
    T2[Tier 2: AI品質]
    T3[Tier 3: 自律性・成熟度]
    T4[Tier 4: コスト効率]

    T1 --> T2
    T2 --> T3
    T3 --> T4

    T1 --- T1D["ターン数/セッション<br/>トークン数/ターン<br/>セッション時間<br/>ツール呼出数/ターン"]
    T2 --- T2D["ファーストパス成功率<br/>コードチャーン率<br/>人的介入率<br/>提案採用率"]
    T3 --- T3D["自律度比率<br/>エスカレーション頻度<br/>自己修正率<br/>コンテキスト活用効率"]
    T4 --- T4D["成果物あたりコスト<br/>トークン効率比<br/>ROI"]

Tier 1: セッション効率——基礎的な利用状況の把握

最も基礎的な指標です。1セッションあたりのターン数が3〜8回なら効率的で、40回を超えると非効率なセッションの可能性があります。ツール呼出数が多ければ AI が自律的に作業を進めている証拠になります。

Tier 2: AI品質——提案精度を測る

AI の提案がどれだけ「一発で通る」かを測ります。ファーストパス成功率が60%を超えていれば良好です。コードチャーン率(AI が書いたコードが72時間以内に書き直される割合)が30%を超えていると要改善のサインです。

Tier 3: 自律性・成熟度——AI の自走力を評価

人間の介入なしに AI がどこまで自走できるかの指標です。自律度比率80%以上がエキスパートレベルとなります。

Tier 4: コスト効率——投資対効果の核心

成果物(PR・バグ修正等)あたりのコストや、トークン効率比(消費トークン÷採用されたコード行数)で測ります。AI駆動開発の生産性を経営層に示す際に最も重要な指標です。

レベル別ベンチマーク

レベルターン数/セッションファーストパス成功率自律度比率日次コスト目安
Expert3〜870%以上80%以上$4以下
Advanced9〜1550〜70%60〜80%$4〜8
Intermediate16〜2530〜50%40〜60%$8〜15
Beginner25以上30%未満40%未満$15以上
TIP

このベンチマークはチーム運用から得た実測値に基づいています。組織の開発スタイルに合わせて閾値を調整してください。

アーキテクチャ設計——Hooks API でデータを自動収集する仕組み

KPI を計測するには、まずデータを集める基盤が必要です。Claude Code の Hooks API を使えば、開発者の作業を妨げることなく、利用データを自動収集できます。

全体アーキテクチャ

graph LR
    subgraph "各メンバーPC"
        CC[Claude Code] -->|イベント発火| H[Hook Scripts<br/>6種]
    end

    subgraph "サーバー(Docker)"
        API[Express API<br/>6エンドポイント]
        DB[(MariaDB<br/>7テーブル)]
        DASH[Next.js<br/>ダッシュボード<br/>9ページ]
        AI[AI分析<br/>Claude Agent SDK]

        API -->|Prisma| DB
        DASH -->|18 API| DB
        AI -->|分析| DB
    end

    H -->|POST /api/hook/*| API
各メンバーの PC に配置した6種のフックスクリプトが、Claude Code のライフサイクルイベント(セッション開始・プロンプト送信・ツール実行・応答完了・セッション終了)を検知し、中央サーバーに自動送信します。メンバーは普段の開発作業をそのまま行うだけで、データが蓄積されていきます。

6種のフックイベントで網羅的にデータ収集

フックタイミング取得データ
SessionStartセッション開始モデル名、開始種別、Git リポジトリ・ブランチ
UserPromptSubmitプロンプト送信プロンプト全文
SubagentStartサブエージェント起動エージェント種別(Bash/Explore/Plan等)
SubagentStopサブエージェント終了トークン消費量、ツール使用記録
Stop応答完了トランスクリプト解析 → 全メトリクス
SessionEndセッション終了終了理由(user_exit/clear/logout)

最も重要なのは Stop フック です。Claude Code が応答を完了するたびに発火し、JSONL 形式のトランスクリプトファイルを解析して、セッション全体のトークン消費量・ツール使用・ファイル変更・エラー数などを一括で集計します。

データフロー: プロンプトからDB保存まで

sequenceDiagram
    participant Dev as 開発者
    participant CC as Claude Code
    participant Hook as Hook Script
    participant API as Express API
    participant DB as MariaDB

    Dev->>CC: プロンプト入力
    CC->>Hook: UserPromptSubmit イベント
    Hook->>API: POST /api/hook/prompt
    API->>DB: Turn レコード作成

    CC->>CC: ツール実行・コード生成
    CC->>Hook: Stop イベント
    Hook->>Hook: JSONL トランスクリプト解析
    Hook->>API: POST /api/hook/stop(全メトリクス)
    API->>DB: Session/Turn/ToolUse/FileChange 更新

DB スキーマ(7テーブル)

テーブル役割主なカラム
Memberメンバー情報git_email(主キー)、claude_account
Sessionセッション情報session_uuid、total_input_tokens、total_output_tokens、estimated_cost、turn_count
Turnターン情報prompt_text、duration_ms、input_tokens、output_tokens、model
Subagentサブエージェントagent_type、duration_seconds、input_tokens、output_tokens
ToolUseツール使用記録tool_name、tool_category、status、is_mcp、mcp_server
FileChangeファイル変更記録file_path、operation(read/write/edit)
SessionEventセッションイベントevent_type、event_data(JSON)

ワンコマンドでセットアップ完了

チームメンバーが簡単にセットアップできるインストーラを用意しました。

bash <(curl -s https://your-server/install.sh)
STEP
フックスクリプトの配置

6種のフックスクリプトを ~/.claude/hooks/ に自動配置します。

STEP
設定ファイルの生成

API接続先の設定ファイル(config.json)を生成します。

STEP
グローバル設定のマージ

Claude Code のグローバル設定(~/.claude/settings.json)にフック定義を安全にマージします。

STEP
疎通テストの実行

API サーバーへの疎通テストを自動実行し、接続を確認します。

NOTE

既存のフック設定がある場合も安全にマージされ、開発環境を壊さない設計になっています。

必要なキー設定

本システムを利用するには、以下の3つのキーを設定します。

キー用途設定場所
GitHub PAT(Personal Access Token)リポジトリ・ブランチ情報の取得、コード変更の追跡サーバー側環境変数
Claude Code 認証(2種から選択)ダッシュボードの AI 分析チャット・コーチング機能(Claude Agent SDK)サーバー側環境変数

Claude Code の認証は以下の2種類から選択できます:

  1. Max プランのサブスクリプション(OAuth ログイン)
  2. Anthropic API Key
  • GitHub PAT を設定すると、セッションごとのリポジトリ名・ブランチ名を自動取得し、リポジトリ分析ページでプロジェクト単位の AI 活用状況を可視化できます
  • Claude Code 認証 を設定すると、チーム概要・メンバー詳細ページの AI 分析チャットが利用可能になり、データに基づいた自然言語での質問や改善提案を受けられます。Max プランのサブスク契約があればそのまま利用でき、API Key でも同等の機能が使えます
TIP

GitHub PAT は repo スコープが必要です。Claude Code 認証は Max プランのサブスクリプションまたは Anthropic API Key のどちらか一方を設定してください。

実装のポイント——トランスクリプト解析とコスト計算

Prisma スキーマ

セッション単位でトークン消費量を追跡します。Anthropic のプロンプトキャッシュ機能に対応し、cache_creation_tokens と cache_read_tokens を分離して記録している点がポイントです。

model Session {
  id                       Int       @id @default(autoincrement())
  memberId                 Int?      @map("member_id")
  sessionUuid              String    @unique @map("session_uuid")
  model                    String?
  totalInputTokens         Int       @default(0) @map("total_input_tokens")
  totalOutputTokens        Int       @default(0) @map("total_output_tokens")
  totalCacheCreationTokens Int       @default(0) @map("total_cache_creation_tokens")
  totalCacheReadTokens     Int       @default(0) @map("total_cache_read_tokens")
  estimatedCost            Float?    @map("estimated_cost") @db.Double
  turnCount                Int       @default(0) @map("turn_count")
  toolUseCount             Int       @default(0) @map("tool_use_count")
  summary                  String?   @db.Text
  gitRepo                  String?   @map("git_repo")
  gitBranch                String?   @map("git_branch")

  member        Member?        @relation(fields: [memberId], references: [id])
  turns         Turn[]
  toolUses      ToolUse[]
  fileChanges   FileChange[]
  sessionEvents SessionEvent[]

  startedAt             DateTime? @map("started_at")

  @@index([memberId])
  @@index([startedAt])
  @@index([model])
  @@map("sessions")
}

トランスクリプト解析

Stop フックの核心は、Claude Code が出力する JSONL 形式のトランスクリプトファイルの解析です。JSONL の各行は assistantusersystemsummary のいずれかの type を持ちます。

function parseTranscript(transcriptPath) {
  const lines = fs.readFileSync(transcriptPath, 'utf8')
    .split('\n').filter(Boolean);

  for (const line of lines) {
    const obj = JSON.parse(line);

    if (obj.type === 'assistant') {
      // トークン数・モデル名を集計
      // tool_use ブロックからツール使用を抽出
      // Write/Edit ツールからファイル変更を記録
    }

    if (obj.type === 'user') {
      // tool_result でなければ新しいターン
      // tool_result のエラーをツール使用記録に反映
    }

    if (obj.type === 'system') {
      // turn_duration: ターンごとの所要時間
      // compact_boundary: コンテキスト圧縮イベント
    }
  }
}

ツール使用は7カテゴリに自動分類されます。

function getToolCategory(name) {
  if (/^(Read|Glob|Grep)$/.test(name)) return 'search';
  if (/^(Write|Edit|MultiEdit)$/.test(name)) return 'file_edit';
  if (name === 'Bash') return 'bash';
  if (name === 'Task') return 'subagent';
  if (/^(WebFetch|WebSearch)$/.test(name)) return 'web';
  if (/^mcp__/.test(name)) return 'mcp';
  return 'other';
}
TIP

MCP(Model Context Protocol)ツールは mcp__ プレフィックスで自動検出し、どの MCP サーバー経由の呼び出しかも記録します。

コスト計算

モデルごとの単価テーブルに基づき、セッション単位でコストを算出します。プロンプトキャッシュの書き込み・読み込みも個別単価で計算するため、キャッシュ効率の分析も可能です。

const COST_TABLE = {
  'claude-opus-4-6':          { input: 15,   output: 75, cacheWrite: 18.75, cacheRead: 1.50 },
  'claude-sonnet-4-5':        { input: 3,    output: 15, cacheWrite: 3.75,  cacheRead: 0.30 },
  'claude-haiku-4-5':         { input: 0.80, output: 4,  cacheWrite: 1.00,  cacheRead: 0.08 },
};

// 単位: USD per 1M tokens
function calculateCost(model: string, usage: TokenUsage) {
  const rates = COST_TABLE[model];
  return (usage.inputTokens / 1_000_000) * rates.input
       + (usage.outputTokens / 1_000_000) * rates.output
       + (usage.cacheCreationTokens / 1_000_000) * rates.cacheWrite
       + (usage.cacheReadTokens / 1_000_000) * rates.cacheRead;
}

ダッシュボードで AI 活用状況を可視化する

構築したダッシュボードは9つのページで構成されています。ここでは主要な機能をスクリーンショットとともにご紹介します。

チーム概要——全体の利用状況を俯瞰する

チーム概要の画面画像

チーム概要では、総セッション数・総トークン数・推定コスト(前週比トレンド付き)・アクティブメンバー数を KPI カードで表示します。日次トークン推移の折れ線グラフ、ツール使用ランキング Top 10、そして曜日×時間帯・リポジトリ×日付・メンバー×日付の3軸ヒートマップで、「いつ、誰が、どのリポジトリで作業しているか」がひと目でわかります。

AI分析チャット

AI 分析チャット機能の画面画像

チーム概要ページには AI 分析チャット機能が統合されています。ダッシュボードのデータをコンテキストとして、Claude Agent SDK を通じて自然言語で質問できます。「今週最もコスト効率が良かったメンバーは?」「Opus と Sonnet の使い分けに偏りはある?」といった分析クエリに即座に回答します。

メンバー詳細——個人の AI 活用パターンを深掘りする

メンバー詳細の画面画像

個人にドリルダウンした分析ページです。

  • セッション分類: Quick(短時間)/ Moderate(中程度)/ Complex(複雑)の3段階でセッションを自動分類
  • モデル使用内訳: Opus / Sonnet / Haiku の使い分けをドーナツチャートで表示
  • ツール使用ランキング: そのメンバーがよく使うツールの傾向
  • 週次トレンド: 日次の入出力トークン推移

AIコーチング

AIコーチングの画面画像

メンバー詳細ページにも AI 分析が統合されています。個人のデータに基づいた改善提案を受けられます。「セッション時間が長い傾向があります。タスクを細分化してみてはどうですか」「Opus の利用が多いですが、このタイプのタスクなら Sonnet でも十分かもしれません」——といった具体的なコーチングが可能です。

セッション詳細——ターン単位で原因を追跡する

セッション詳細の画面画像

1つのセッションを最も細かく分析するページです。

  • ターン別ツリー表示: 各ターンのプロンプト、AI の応答、ツール使用をツリー構造で展開
  • ツール使用記録: ツール名・カテゴリ・成否・エラーメッセージをすべて記録
  • サブエージェント: Task ツール経由で起動されたサブエージェントのモデル・トークン・コストを個別表示
  • ファイル変更: 操作種別(create/edit/delete/read)を色分けバッジで表示

「このセッションでなぜコストが高くなったのか」「どのツール呼び出しでエラーが発生したのか」をターン単位で追跡できます。

メンバー一覧——チーム内の利用格差を発見する

メンバー一覧の画面画像

メンバー全員のランキングと比較ができるページです。

  • ランクバッジ: トークン消費量でランキングを表示
  • 前週比変化率: 各メンバーの利用量が増加傾向か減少傾向かを可視化
  • メンバー×日付ヒートマップ: 誰がいつ活発に使っているかのパターンを発見

チーム内での利用格差や、活用が進んでいないメンバーを早期に発見できます。

その他のビュー

プロンプトフィード

プロンプトフィードの画面画像

チーム全員のプロンプトをリアルタイムで表示するタイムラインビューです。ユーザー → リポジトリ → ブランチ → セッション → プロンプトの階層構造で、15秒間隔で自動更新されます。「今、チームの誰がどんな作業をしているか」をリアルタイムで把握でき、ナレッジ共有のきっかけにもなります。

リポジトリ分析

リポジトリ分析の画面画像

リポジトリ単位で AI 活用状況を比較するページです。セッショ

トークン分析

トークン分析の画面画像

コスト最適化のためのページです。線形回帰による将来消費量の予測チャート、モデル別コスト分布、そしてモデルミックスシミュレーションが特徴的です。「Opus の利用を30%減らして Sonnet に振り替えたら月額いくら削減できるか」をインタラクティブにシミュレーションできます。

まとめ——「なんとなく便利」から「計測可能な生産性」へ

AI駆動開発の生産性は、感覚ではなくデータで語る時代に入っています。本記事で紹介した計測システムでできることをまとめます。

  • チーム全体の AI 活用状況を可視化 — 誰が、いつ、どのプロジェクトで、どのモデルを使っているか
  • コスト構造を把握 — モデル別・メンバー別・リポジトリ別のコスト配分と予測
  • セッション品質を分析 — ターン数・ツール使用・エラー率からセッションの効率を評価
  • リアルタイム監視 — プロンプトフィードでチームの活動状況をリアルタイム把握
  • AI による分析・コーチング — ダッシュボードデータに対する自然言語クエリと改善提案

この計測基盤があることで、「AI を使えているか」という曖昧な問いに対して、データに基づいた議論ができるようになります。

今後の展望として、CI/CD パイプラインの DORA メトリクス(デプロイ頻度・変更リードタイム等)との統合や、PR レビュー品質との相関分析を検討しています。AI の活用度と実際のデリバリー成果を結びつけることで、より説得力のある ROI の提示が可能になるはずです。

リポジトリは GitHub で公開しています。Claude Code を使っているチームで、AI コーディングの効果測定に興味がある方はぜひ試してみてください。


この記事の他媒体版

  • Qiita版(技術詳細・コード解説重視)
  • Zenn版(実装ガイド・設計思想重視)
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

目次