【実務・中級編】Linear Data Exportと外部BI連携:BigQueryやLooker Studioでチームのパフォーマンス指標を独自ダッシュボード化する – プロジェクト・ナレッジ管理活用バイブル

Linear × BigQuery × Looker Studioで切り拓く、エンジニアリング組織の「真のメタデータ駆動開発」

テックリードやエンジニアリングマネージャー(EM)であるあなたなら、日々のスプリントレビューでこんなもどかしさを感じたことはないだろうか。

「Linearの標準Insights機能は綺麗だが、リードタイムの“外れ値”を除外した中央値が見たい」「シニアとジュニアでチケットの滞留傾向にどんな差があるか、クロス集計したい」「プロダクトごとの工数対効果を、経営陣が求める粒度でカスタムレポート化したい」

Linearはその圧倒的なUI/UXと爆速の動作速度で開発体験のデファクトスタンダードとなった。しかし、組織がスケールし、高度な開発生産性メトリクス(DORA指標など)を追いかけ始めるフェーズになると、標準機能のダッシュボードだけでは「解像度不足」に陥る。

ここで妥協してExcelやスプレッドシートへの手動コピペに戻るようでは、アジャイルチームのベロシティは死に体となる。Linearの生データをAPI経由でDWH(BigQuery)に吸い上げ、BI(Looker Studio)で独自のパフォーマンス指標を全社にリアルタイム公開する。

本稿では、単なるツールの連携手順を超え、開発チームの生産性を劇的に高めるための「データ基盤構築の極意」を、プロの実践テクニックを交えて完全解説する。

—

1. 現場のベロシティを爆発させるLinearの裏技(ショートカット&設定)

DWHやBIを語る前に、大元のデータ(Linear上のチケット)の質と入力スピードが担保されていなければ、出力される分析結果もゴミ(Garbage In, Garbage Out)になる。エンジニアがノンストレスでデータを入力し、情報のサイロ化を防ぐための環境構築は、データ分析の第一歩である。

開発スピードを加速する隠れキーボードショートカット

マウスに手を伸ばした瞬間、エンジニアのフロー状態は途切れる。Linearはキーボードオペレーションの極みだ。

  • `G` → `I` : どこにいても即座に「Issues(課題一覧)」へジャンプ
  • `C` : どこからでも新規Issue作成モーダルを起動
  • `Cmd + K` (Windows: `Ctrl + K`) : すべてを統べるコマンドメニュー(ここからラベル付与やステータス変更も一瞬)
  • `Shift + ?` : ショートカット一覧(まずこれを暗記しろ)

チーム開発で絶対に統一すべき「設定の共有化ルール」

個人の好みに依存したチケット運用は、データ分析を不可能にする。「誰がいつ見ても一意に解釈できる状態」を作るためのルール策定がEMの仕事だ。

1. ステータスの厳格化: `Backlog`, `Todo`, `In Progress`, `In Review`, `Done`, `Canceled` 以外独自のカスタムステータスを安易に増やさない。リードタイム計測の分母が狂う原因になる。
2. Estimate(見積もり)の単位統一: フィボナッチ数列(1, 2, 3, 5, 8…)を使用し、ストーリーポイントまたは「理想日(Days)」のどちらで計測するかをチームで完全一致させる。
3. Labelsの階層化運用: `frontend`, `backend` のような単体ラベルに加え、`bug/critical`, `tech-debt`, `feature/core` のように、プレフィックスを使った命名規則を強制する(これは後述のBigQuery側での集計時に効いてくる)。

—

2. アーキテクチャ全体像:LinearからBigQueryへのデータパイプライン

データ分析の目的地であるBigQueryへデータをどう流し込むか。
通常、AirflowやHightouchなどのETLツール、あるいはLinearのWebhooksをAWS Lambda(Python/Node.js)で受けてBigQueryにストリーミングインサートする構成が王道だ。

[Linear API / Webhooks]
↓ (Scheduled ETL / Serverless Functions)
[BigQuery] (DWH: データの正規化・蓄積)
↓ (SQL Views)
[Looker Studio] (独自KPIダッシュボード)

今回は、最も堅牢かつメンテナンスコストの低い「GitHub Actionsを定期実行(Cron)したPythonスクリプトによるDailyスナップショット&差分同期」の実装アプローチをベースに解説する。

—

3. 実践:Linear APIからBigQueryへデータを流し込むベストプラクティス

LinearのGraphQL APIを叩き、Issues、History(状態遷移のログ)、Cycleのデータを抽出してBigQueryへロードする。ここでは、インフラコストを最小限に抑えるための設定ファイル・スクリプトのベストプラクティスを公開する。

設定ファイル構成例 (`config.yaml`)

チームで同期すべき同期対象のプロジェクトやチームIDを定義するYAMLファイル。

config.yaml: Linearデータパイプライン設定
project:
name: “core-product-metrics”
target_teams:

  • “ENG” – “PLAT”

sync_settings:
include_history: true
lookback_days: 30 # 直近30日間の更新差分を同期
bigquery:
dataset_id: “linear_raw_data”
location: “asia-northeast1”
write_disposition: “WRITE_APPEND” # 日次追記 or 置き換えは適宜調整

Pythonローダー・スクリプト (`sync_linear_to_bq.py`)

GraphQLを駆使してLinearからデータを抽出し、BigQueryへロードする実用スクリプト。コメントの指示通りに環境変数を設定して実行せよ。

import os
import requests
from google.cloud import bigquery
import yaml

設定ファイルのロード
with open(“config.yaml”, “r”) as f:
config = yaml.safe_load(f)

LINEAR_API_URL = “https://api.linear.app/graphql”
LINEAR_API_KEY = os.environ.get(“LINEAR_API_KEY”) # 秘匿情報は環境変数から取得

GraphQLクエリ: 課題と状態遷移履歴を効率的に取得
ISSUES_QUERY = “””
query($updatedAt: DateTime!) {
issues(filter: { updatedAt: { gte: $updatedAt } }, first: 100) {
nodes {
id
identifier
title
state { name type }
assignee { email }
team { key }
createdAt
updatedAt
startedAt
completedAt
canceledAt
estimate
priority
labels {
nodes { name }
}
}
}
}
“””

def fetch_linear_data():
headers = {
“Authorization”: LINEAR_API_KEY,
“Content-Type”: “application/json”
}
# 直近の更新データを取得(差分同期)
variables = {“updatedAt”: “2023-01-01T00:00:00.000Z”}

response = requests.post(
LINEAR_API_URL,
json={“query”: ISSUES_QUERY, “variables”: variables},
headers=headers
)

if response.status_code != 200:
raise Exception(f”Linear API Error: {response.text}”)

return response.json()[“data”][“issues”][“nodes”]

def load_to_bigquery(data):
client = bigquery.Client()
dataset_id = config[“bigquery”][“dataset_id”]
table_id = f”{client.project}.{dataset_id}.issues_raw”

# BigQueryへのストリーミングロード(またはバッチロード)
errors = client.insert_rows_json(table_id, data)
if errors == []:
print(“New rows have been added successfully to BigQuery.”)
else:
print(f”Encountered errors while inserting rows: {errors}”)

if __name__ == “__main__”:
raw_data = fetch_linear_data()
# BigQueryのスキーマに合わせたフォーマット変換処理をここに挟む
# formatted_data = transform(raw_data)
load_to_bigquery(raw_data)

—

4. BigQueryでのデータモデリング:カスタムKPIのSQL設計

BigQueryに生データ(Raw Data)が溜まったら、BIツールでそのまま描画してはならない。DWH側で「分析しやすいビュー(View)」を作成するのがプロのデータモデリングだ。

ここでは、エンジニアリング組織が最も知りたい「サイクルタイム(着手から完了までの日数)」と「手戻り率(In Reviewから再度In Progressに戻った回数など)」を算出するためのSQLビューの設計図を示す。

— BigQueryビュー: v_issue_performance_metrics
CREATE OR REPLACE VIEW `your-gcp-project.linear_raw_data.v_issue_performance_metrics` AS
SELECT
identifier,
title,
team_key,
priority,
estimate,
— タイムスタンプのパースと経過日数(日単位)の算出
TIMESTAMP_DIFF(completed_at, started_at, HOUR) / 24.0 AS lead_time_days,
— バックログ滞留期間
TIMESTAMP_DIFF(started_at, created_at, HOUR) / 24.0 AS backlog_wait_days,

— ラベルの集約(配列から文字列化)
(SELECT STRING_AGG(name, ‘, ‘) FROM UNNEST(labels)) AS label_list,

— 完了ステータスの判定フラグ
CASE
WHEN completed_at IS NOT NULL THEN 1
else 0
END AS is_completed

FROM
`your-gcp-project.linear_raw_data.issues_raw`
WHERE
— キャンセルされたチケットやスパムを除外
state_type != ‘canceled’
AND started_at IS NOT NULL
AND completed_at IS NOT NULL;

このビューを介することで、Looker Studio側での複雑な計算フィールドの定義を排除し、BI側の描画パフォーマンスを劇的に向上させることができる。

—

5. Looker Studioによる独自ダッシュボードの構築と運用

作成したBigQueryのビューをデータソースとしてLooker Studioに接続し、いよいよ「経営陣・EM・エンジニア全員が納得するダッシュボード」を構築する。

必見:ダッシュボードに配置すべき「4つの神チャート」

1. スプリント別ベロシティとスループットの推移(複合グラフ)

  • 軸: タイムスタンプ(週単位)
  • 指標: 消化されたストーリーポイントの合計(Bars)、完了したIssueの総数(Line)
  • 意図: チームの「生産量のトレンド」をマクロで捉える。

2. リードタイム外れ値検知プロット(散布図)

  • 軸: X軸 = チケットの大きさ(Estimate)、Y軸 = リードタイム(日)
  • 意図: 「見積もりが小さいのに異常に時間がかかったチケット(技術的負債や仕様変更の沼にハマったタスク)」を視覚的に炙り出し、レトロスペクティブの良質な議題にする。

3. 担当者別・ラベル別ボトルネックマトリクス(ピボットテーブル)

  • 行: Assignee / 列: Label / 値: 平均リードタイム(日)
  • 意図: どのレイヤー(フロント、バック、インフラ)のどの領域でチケットが滞留しているかをチーム全員で透明化する。

4. DORA指標:デプロイメントの先行指標としての「PR/Issueライフサイクル」

  • 指標: `backlog_wait_days` と `lead_time_days` の中央値(Median)の推移
  • 意図: 平均値ではなく「中央値」を見ることで、極端な大型案件に惑わされない真の開発スピードを追う。

—

6. まとめ:データでチームの「構造的課題」をハックせよ

ツールを導入しただけで開発が早くなるほど、ソフトウェアエンジニアリングは甘くない。しかし、Linearという極上の入力インターフェースから生まれたデータをBigQueryに集約し、Looker Studioで美しく、かつ厳格に可視化することで、チームの会話は劇的に変わる。

「感覚」や「根性」で語られていたスプリントの振り返りが、「このエピックはバックログ滞留期間が長すぎた。仕様定義のプロセスにボトルネックがある」という事実に基づくエンジニアリングの議論へと昇華される。

さあ、今すぐLinearのAPIキーを発行し、あなたのチームだけのメタデータ駆動開発基盤を構築せよ。組織のベロシティの限界突破は、そこから始まる。

タイトルとURLをコピーしました