OLTA TECH BLOG

テクノロジーと好奇心で事業を成長させる

TECH BLOG

DevLake + Grafana で開発生産性を可視化する ― ツール選定から指標設計まで

はじめに

開発組織が成長するにつれて、「チームのパフォーマンスをどう計測するか」は避けて通れないテーマになります。

OLTA株式会社では開発生産性を定量的に可視化する基盤を Apache DevLake + Grafana で構築しました。本記事では、ツール選定の判断基準、GCE + Docker Compose + Cloud SQL によるインフラ設計、そして指標設計の考え方までを紹介します。

背景・課題

開発チームが複数のプロダクトを並行開発する体制の中で、以下の課題がありました。

  • 開発組織のキャパシティがブラックボックスになっている
  • 「どれくらいの時間で、どれくらいのアウトカムが出せるのか」の共通認識がない
  • PR のサイクルタイムやスループットが感覚値でしか把握できていない
  • 経営層への報告で定量的な説明ができない

「計測できないものは改善できない」という前提のもと、まずは計測基盤を構築することにしました。

ツール選定

検討した選択肢

ツール 判断 理由
Apache DevLake Apache 財団傘下で開発強度が高い。GitHub Delpoyment, Issueとの連携が標準サポート。DORA メトリクスのダッシュボードが同梱されており、Grafana ベースでカスタマイズ性も高い。OSS のため無料で始められる
開発生産性 SaaS 個人スタッツや DevOps 分析など機能や導入に向けたサポート体制は充実している。ただ「どの指標を見るべきか」が定まっていない段階で SaaS に投資するのは時期尚早と判断し却下。予算に余裕がある場合には間違いない選択肢になりうる
Middleware DevLake と同様のアーキテクチャ構成(Python + Flask + TypeScript + Postgres)だが、2025 年にリリースが 2 回のみと開発強度が低く、長期的なメンテナンスリスクが高い
自作 (GitHub API + BigQuery + dbt) 柔軟性は最も高いが、データモデルの設計・メンテナンスコストが大きい。DevLake のデータモデルで十分な要件をカバーできた

選定のポイント

決め手は 「開発強度」と「最速で Four Keys を可視化できること」 の2点でした。

開発生産性 SaaS は完成度が高く、PR のマージ数からチームのスループットを把握したり、個人スタッツを 1on1 で活用するなど、導入後のユースケースも明確でした。しかし、まず無料で小さく始めて指標の有用性を検証し、可視化の文化が定着してから SaaS への移行を検討する方が合理的と判断しました。

Middleware は DevLake と同等の機能を持つ OSS ですが、開発コミュニティの活発さで大きな差がありました。OSS ツールの選定では「今の機能」だけでなく「将来のメンテナンス」も重要な判断基準です。

アーキテクチャ

GitHub (データソース)
  ↓ GitHub App 経由で収集

┌─────────────────────────────────┐
│ Cloud Load Balancer             │
│  (HTTPS / Google マネージド証明書) │
└──────────────┬──────────────────┘
               │
          ┌────▼────┐
          │   IAP   │ ← 社内ドメインのみ許可
          └────┬────┘
               │
┌──────────────▼──────────────────┐
│     GCE e2-medium               │
│   ┌──────────────────────────┐  │
│   │     Docker Compose       │  │
│   │  ┌────────┐ ┌─────────┐ │  │
│   │  │devlake │ │config-ui│ │  │
│   │  │ :8080  │ │  :4000  │ │  │
│   │  └────────┘ └─────────┘ │  │
│   │  ┌────────┐             │  │
│   │  │grafana │             │  │
│   │  │ :3000  │             │  │
│   │  └────────┘             │  │
│   └──────────────────────────┘  │
└──────────────┬──────────────────┘
               │ Private IP (VPC 内通信)
        ┌──────▼──────┐
        │  Cloud SQL  │
        │  MySQL 8.0  │
        │ db-f1-micro │
        └─────────────┘

DevLake の設定画面

Grafana で可視化された PR Opened / Merged の数

なぜ GKE ではなく GCE + Docker Compose か

比較対象 不採用理由
GKE 社内ツールに対してオーバーエンジニアリング。Helm チャートの管理やリソース設計が不要なシンプルさを優先
Cloud Run DevLake のデータ収集は長時間実行されるため、60 分のタイムアウト制限に抵触するリスクがある。コストも +$30/月ほど増加

GCE + Docker Compose であれば、cloud-init で初期化を自動化でき、最小構成で立ち上げられます。 また何より公式の Release に docker-compose.yml が用意されてるので、Claude Code を使えば数十分構築できます。

なぜ Cloud SQL か

比較対象 不採用理由
GCE 内 MySQL コンテナ ディスク拡張が手動、バックアップ設定を自前で管理する必要がある

Cloud SQL にすることで、自動バックアップ(7日間保持)と自動ストレージ拡張が得られます。将来 GKE 等へ移行する場合にもデータベースをそのまま使えます。

なぜ GitHub App か

比較対象 不採用理由
Personal Access Token (PAT) 退職時のリスク、権限が過剰になりやすい、監査が困難

GitHub App は組織に紐づくため、個人の退職に影響されません。権限も必要最小限(Read-only)に設定できます。

構築のポイント

1. Docker Compose の構成

DevLake 公式の docker-compose.yml をベースに、MySQL コンテナを除外し、Cloud SQL に Private IP で接続する構成にしています。

services:
  devlake:
    image: apache/devlake:latest
    environment:
      DB_URL: "mysql://devlake:xxx@<CLOUD_SQL_PRIVATE_IP>:3306/lake"
    ports:
      - "8080:8080"

  config-ui:
    image: apache/devlake-config-ui:latest
    ports:
      - "4000:4000"

  grafana:
    image: apache/devlake-dashboard:latest
    ports:
      - "3000:3000"

Cloud SQL Proxy ではなく、GCE と Cloud SQL を同一 VPC 内に配置して Private IP で直接接続しています。cloud-init でVM 初回起動時に Docker のインストールとコンテナの起動を自動化しています。

2. IAP による認証

VPN を使わず、Load Balancer + IAP で社内メンバーのみがアクセスできるようにしています。自社ドメインのユーザーだけが認証を通過できる設定です。

3. GitHub App の権限設定

データ収集に必要な権限はすべて Read-only に設定しています。

Repository permissions (Read-only): - Contents, Pull requests, Commit statuses, Deployments, Actions, Checks, Issues, Metadata, Administration

Organization permissions (Read-only): - Members

4. シークレット管理

GitHub App の Private Key、App ID、DB パスワード、暗号化キーはすべて GCP Secret Manager で管理しています。

指標設計

可視化する指標

指標 見たいこと データソース 自動/手動
PR マージ数/週 チームのスループット GitHub 自動
平均サイクルタイム PR 作成〜マージまでの速さ GitHub 自動
投資配分 何にどれだけ時間を使っているか GitHub (PR ラベル) ラベル付与は手動 or CI

ローカル検証の段階で、平均サイクルタイム 7.56 時間という実データが取れており、DevLake のデータモデルで十分な精度が出ることを確認しています。

投資配分の計測

PR に featurebugfixhotfix などのラベルを付与し、ラベルごとに集計することで「チームが何にどれだけの時間を使っているか」を可視化します。

例: 今月の PR 内訳
  feature:  60%  → 新機能開発
  bugfix:   25%  → バグ修正
  chore:    15%  → 技術的負債の返済

これにより「新機能開発にどれくらいの投資ができているか」が定量的に把握でき、経営層との対話に使えます。

ラベルの付与は手動だと信頼性が低いため、GitHub Actions で PR タイトルから自動判定する仕組み、あるいは Claude Code でのPR 作成時に自動付与する仕組みを検討中です。

指標設計で意識したこと

「指標は改善のきっかけであり、個人の評価ではない」 という方針を最初に明文化しました。

開発生産性の数値を個人評価に使うと、数字のゲーミング(PR の細分化、形式的なレビューなど)が発生します。Grafana のダッシュボードへのアクセスもリード以上のエンジニアに限定し、あくまでチーム単位のトレンドを見てプロセス改善の議論に使う、という位置づけを組織内で合意しています。

計画達成率は別の仕組みで

DevLake は GitHub のメトリクス収集には強い一方、Asana や Notion などのプロジェクト管理ツールとの連携は現時点でサポートされていません。「計画に対してどれだけ達成できたか」は別の枠組みで計測する必要があります。

コスト

項目 月額 (USD)
GCE e2-medium ~$25
Cloud SQL db-f1-micro ~$15
Load Balancer ~$20
Persistent Disk 20GB SSD ~$2
Static IP ~$3
合計 ~$65/月(約 1 万円)

年間約 $780(約 12 万円)です。開発生産性 SaaS と比較すると、桁が違うコストで同等の基本機能が得られます。

今後の展望

短期

  • 経営層への定期報告フローの確立
  • PR ラベルの自動付与(GitHub Actions or Claude Code)
  • Grafana アラートの設定(サイクルタイムの閾値超過を Slack 通知)

中期

  • DORA Four Keys の変更失敗率・復旧時間を計測するため、インシデント管理ツールとの連携
  • チームごとのダッシュボード分割

長期

  • DevLake のデータを BigQuery にエクスポートし、事業 KPI との相関分析
  • AI を活用した開発の生産性向上効果の定量測定(例: コミット量の増加とレビュー指摘数の減少の相関)

まとめ

DevLake は Apache 財団傘下の OSS でありながら、DORA Four Keys の可視化を最速で立ち上げられるツールです。GCE + Docker Compose + Cloud SQL という構成で月額 $65 程度に抑えつつ、IAP と GitHub App で適切なセキュリティを確保できます。

重要なのはツール自体ではなく、可視化した指標をどう使うかです。個人の評価ではなくチームのプロセス改善に使うという方針を先に決めたこと、そしてアクセス権限をリード以上に限定したことで、組織への導入がスムーズに進みました。

開発生産性の可視化はゴールではなくスタートです。まずは OSS で小さく始めて、データに基づいた改善サイクルを回していく ― その第一歩として DevLake は良い選択肢だと考えています。