dx-data-navigator について
dx-data-navigatorは、DX Data CloudのPostgreSQLデータベースを調べる分析担当者やエンジニアチーム向けのスキルです。エンジニアリング指標などを扱い、テーブル構造や結合、クエリ例を案内します。
主な機能
- 01DX Data Cloudデータの検索
- 02開発指標と調査指標の確認
- 03PR、デプロイ、インシデントの分析
- 04AIツールとプロジェクトデータの検索
- 05スキーマと結合方法の案内
活用シーン
- 01チーム別のPR・デプロイ指標の集計
- 02DX調査スナップショットのスコア確認
- 03デプロイ頻度とインシデントデータの追跡
- 04Copilot利用状況の検索
MCP 対応
`mcp__dx-mcp-server__queryData`ツールを使ってPostgreSQLデータベースを検索し、DX MCPサービスへのSQL送信方法を案内します。
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ pskoett/ pskoett-ai-skills --skill dx-data-navigatorインストール後、Claude Code で/dx-data-navigatorを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
references/ai-tools.mdcatalog.mddeployments-incidents.mddeveloper-experience.mdissues-github.mdjira.mdpipelines-quality.mdpull-requests.mdteams-users.md詳細
DX Data Navigator
インストール
gh skill install pskoett/pskoett-skills dx-data-navigator
Agent Skills CLI を使った代替方法:
npx skills add pskoett/pskoett-skills/skills/dx-data-navigator
mcp__dx-mcp-server__queryData ツールを使用して、DX Data Cloud の PostgreSQL データベースにクエリを実行します。
ツールの使用方法
mcp__dx-mcp-server__queryData(sql: "SELECT ...")
テーブル名やカラム名が不明な場合は、必ず最初に information_schema.columns をクエリしてください:
SELECT column_name, data_type FROM information_schema.columns
WHERE table_name = 'table_name' ORDER BY ordinal_position;
重要:チームテーブル
チームテーブルには3種類あります。用途に合ったものを使用してください:
| テーブル | 用途 |
|---|---|
dx_teams | 現在の組織構造。PR/デプロイメントの指標で、ユーザーとチームを関連付けます |
dx_snapshot_teams | DX 調査スナップショット内のチーム(DX スコアに使用) |
dx_versioned_teams | 特定の日付時点の過去のチーム構造 |
DX 調査スコアの場合: dx_snapshot_teams を経由して結合します。スナップショット履歴内でチーム名が複数回出現することがあるため、重複を避けるには GROUP BY を使用してください:
SELECT st.name as team, i.name as metric, MAX(ts.score) as score, MAX(ts.vs_industry50) as vs_industry
FROM dx_snapshot_team_scores ts
JOIN dx_snapshot_teams st ON ts.snapshot_team_id = st.id
JOIN dx_snapshot_items i ON ts.item_id = i.id AND i.snapshot_id = ts.snapshot_id
WHERE ts.snapshot_id = (SELECT id FROM dx_snapshots ORDER BY end_date DESC LIMIT 1)
AND st.name = 'Your Team Name'
AND i.item_type = 'core4'
GROUP BY st.name, i.name;
チーム別の PR/デプロイメント指標の場合: dx_users から dx_teams を経由して結合します:
SELECT t.name, COUNT(*) as prs
FROM pull_requests p
JOIN dx_users u ON p.dx_user_id = u.id
JOIN dx_teams t ON u.team_id = t.id
WHERE p.merged IS NOT NULL GROUP BY t.name;
チーム名の確認
データベースをクエリして、利用可能なチームを確認します:
SELECT name FROM dx_teams WHERE deleted_at IS NULL ORDER BY name;
データドメイン
DX の主要指標
チームスコア、ベンチマーク、センチメントデータを含む調査スナップショットです。
主なテーブル: dx_snapshots、dx_snapshot_teams、dx_snapshot_items、dx_snapshot_team_scores
dx_snapshots のカラム: id、account_id、contributors、participation_rate、start_date(日付)、end_date(日付)
dx_snapshot_teams のカラム: id、snapshot_id、team_id、name、parent(ブール値)、flattened_parent、contributors、participation_rate
dx_snapshot_items のカラム: id、snapshot_id、name、item_type、prompt、target_label
dx_snapshot_team_scores のカラム: id、snapshot_id、snapshot_team_id(dx_snapshot_teams.id への FK)、team_id(dx_teams.id への FK)、item_id(dx_snapshot_items.id への FK)、score、vs_org、vs_prev、vs_industry50、vs_industry75、vs_industry90、unit
dx_snapshot_items のアイテムタイプ:
core4:有効性、インパクト、品質、スピードkpi:デリバリーの容易さ、エンゲージメント、週あたりの時間損失、品質、スピードsentiment:ディープワーク、変化への信頼、ドキュメント、チーム間コラボレーション、顧客重視、意思決定などworkflow:レビュー待ち時間、CI 待ち時間、デプロイ頻度、PR マージ頻度、AI による時間節約、煩雑な手続きなどworkflow_averages:ワークフロー指標の実際の平均値(パーセンタイルではなく実数値)csat:ツール満足度スコア(コードエディター、課題管理ツール、CI/CD ツールなど)
-- Latest snapshot info
SELECT id, start_date, end_date, contributors, participation_rate
FROM dx_snapshots ORDER BY end_date DESC LIMIT 1;
-- Team scores for specific metric (use GROUP BY to dedupe)
SELECT st.name as team, i.name as metric, MAX(ts.score) as score, MAX(ts.vs_industry50) as vs_industry
FROM dx_snapshot_team_scores ts
JOIN dx_snapshot_teams st ON ts.snapshot_team_id = st.id
JOIN dx_snapshot_items i ON ts.item_id = i.id AND i.snapshot_id = ts.snapshot_id
WHERE ts.snapshot_id = (SELECT id FROM dx_snapshots ORDER BY end_date DESC LIMIT 1)
AND st.name = 'Your Team Name'
AND i.item_type = 'core4'
GROUP BY st.name, i.name;
-- All teams comparison on one metric
SELECT st.name as team, MAX(ts.score) as score, MAX(ts.vs_industry50) as vs_industry
FROM dx_snapshot_team_scores ts
JOIN dx_snapshot_teams st ON ts.snapshot_team_id = st.id
JOIN dx_snapshot_items i ON ts.item_id = i.id AND i.snapshot_id = ts.snapshot_id
WHERE ts.snapshot_id = (SELECT id FROM dx_snapshots ORDER BY end_date DESC LIMIT 1)
AND i.name = 'Effectiveness' AND i.item_type = 'core4'
AND st.parent = false
GROUP BY st.name
ORDER BY score DESC NULLS LAST;
チームとユーザー
組織構造、チーム階層、ユーザープロフィールです。
主なテーブル: dx_teams、dx_users、dx_team_hierarchies、dx_groups
dx_teams のカラム: id、name、contributors、deleted_at
dx_users の主なカラム: id、name、email、team_id、ai_light_adoption_date、ai_moderate_adoption_date、ai_heavy_adoption_date
-- Teams with contributor counts
SELECT name, contributors FROM dx_teams WHERE deleted_at IS NULL ORDER BY contributors DESC;
-- Users with AI adoption status
SELECT name, email, ai_heavy_adoption_date FROM dx_users
WHERE ai_heavy_adoption_date IS NOT NULL ORDER BY ai_heavy_adoption_date DESC;
-- Team members
SELECT u.name, u.email FROM dx_users u
JOIN dx_teams t ON u.team_id = t.id
WHERE t.name = 'Your Team Name';
プルリクエスト
サイクルタイム、レビュー待ち時間、処理量などの PR 指標です。
主なテーブル: pull_requests、pull_request_reviews、repos
pull_requests の主なカラム: id、dx_user_id、repo_id、title、base_ref、head_ref、additions、deletions、created、merged、closed、draft、bot_authored
主な指標(すべて秒単位。時間に換算するには3600で割ります):
open_to_merge:PR の合計サイクルタイムopen_to_first_review:最初のレビューまでの時間open_to_first_approval:承認までの時間- 営業時間ベースの指標には、接尾辞
_business_hoursを追加します
-- PR metrics by team last 30 days
SELECT t.name, COUNT(*) as prs,
AVG(p.open_to_merge)/3600 as avg_hours_to_merge,
AVG(p.open_to_first_review)/3600 as avg_hours_to_first_review
FROM pull_requests p
JOIN dx_users u ON p.dx_user_id = u.id
JOIN dx_teams t ON u.team_id = t.id
WHERE p.merged IS NOT NULL AND p.created > NOW() - INTERVAL '30 days'
GROUP BY t.name ORDER BY prs DESC;
-- PR size distribution
SELECT
CASE
WHEN additions + deletions < 50 THEN 'XS (<50)'
WHEN additions + deletions < 200 THEN 'S (50-199)'
WHEN additions + deletions < 500 THEN 'M (200-499)'
ELSE 'L (500+)'
END as size_bucket,
COUNT(*) as count,
AVG(open_to_merge)/3600 as avg_hours
FROM pull_requests
WHERE merged IS NOT NULL AND created > NOW() - INTERVAL '90 days'
GROUP BY size_bucket ORDER BY avg_hours;
デプロイメントとインシデント
DORA 指標のためのデプロイメント頻度、成功率、インシデント追跡です。
主なテーブル: deployments、incidents、incident_services
deployments のカラム: id、service、repository、environment、deployed_at、success、commit_sha
incidents のカラム: id、name、priority、source、source_url、started_at、resolved_at、started_to_resolved(秒)、deleted
デプロイメント環境: dev、stage、prod、production
インシデントの優先度: '1 - Critical'、'2 - High'、'3 - Moderate'、'4 - Low'、'5 - Planning'
インシデントのソース: 利用可能なソースを確認するには、SELECT DISTINCT source FROM incidents を実行してください
-- Deploy frequency by environment
SELECT environment, COUNT(*) FROM deployments
WHERE deployed_at > NOW() - INTERVAL '30 days' GROUP BY environment;
-- Deployment success rate
SELECT
COUNT(*) as total,
COUNT(*) FILTER (WHERE success) as successful,
COUNT(*) FILTER (WHERE success)::float / COUNT(*) * 100 as success_rate
FROM deployments WHERE deployed_at > NOW() - INTERVAL '30 days';
-- Mean Time to Recovery (MTTR)
SELECT AVG(started_to_resolved)/3600 as avg_hours_to_resolve
FROM incidents
WHERE resolved_at IS NOT NULL AND priority IN ('1 - Critical', '2 - High');
-- Incidents by priority
SELECT priority, COUNT(*) FROM incidents
WHERE started_at > NOW() - INTERVAL '90 days' AND deleted = false
GROUP BY priority ORDER BY priority;
AI ツール
AI コーディングアシスタントの導入状況を追跡します(例:GitHub Copilot)。
主なテーブル: ai_tools、ai_tool_daily_metrics、github_copilot_daily_usages、github_users
github_copilot_daily_usages の列: id、login、date、enterprise_slug、active(ブール値)
github_users の列: id、login、verified_emails、bot、active
Copilot とチームの紐付け: GitHub のログイン名は DX ユーザーのメールアドレスと直接一致しません。github_users.verified_emails を使用して紐付けます:
-- Copilot usage by team (via github_users email linking)
SELECT t.name as team, COUNT(DISTINCT c.login) as active_copilot_users
FROM github_copilot_daily_usages c
JOIN github_users gu ON c.login = gu.login
JOIN dx_users u ON gu.verified_emails = u.email
JOIN dx_teams t ON u.team_id = t.id
WHERE c.date > NOW() - INTERVAL '30 days' AND c.active = true
GROUP BY t.name ORDER BY active_copilot_users DESC;
-- Daily Copilot active users (overall)
SELECT date, COUNT(*) FILTER (WHERE active) as active_users
FROM github_copilot_daily_usages
WHERE date > NOW() - INTERVAL '30 days'
GROUP BY date ORDER BY date;
-- Copilot adoption rate (latest day)
SELECT
COUNT(DISTINCT login) FILTER (WHERE active) as active_users,
COUNT(DISTINCT login) as total_users,
COUNT(DISTINCT login) FILTER (WHERE active)::float / COUNT(DISTINCT login) * 100 as adoption_pct
FROM github_copilot_daily_usages
WHERE date = (SELECT MAX(date) FROM github_copilot_daily_usages);
-- Weekly trend
SELECT DATE_TRUNC('week', date) as week,
COUNT(DISTINCT login) FILTER (WHERE active) as active_users
FROM github_copilot_daily_usages
WHERE date > NOW() - INTERVAL '90 days'
GROUP BY week ORDER BY week;
課題管理
課題、スプリント、サイクルタイムなどのプロジェクト管理データです(例:Jira)。
主なテーブル: jira_issues、jira_projects、jira_sprints、jira_issue_sprints、jira_issue_types、jira_statuses
jira_issues の主な列: id、key、summary、story_points、cycle_time(秒)、created_at、completed_at、project_id、status_id、issue_type_id、user_id
jira_sprints の列: id、name、state('active'、'closed'、'future')、start_date、end_date、complete_date
-- Sprint velocity (last 5 closed sprints)
SELECT s.name, SUM(i.story_points) as points, COUNT(*) as issues
FROM jira_sprints s
JOIN jira_issue_sprints jis ON s.id = jis.sprint_id
JOIN jira_issues i ON jis.issue_id = i.id
WHERE s.state = 'closed' AND i.completed_at IS NOT NULL
GROUP BY s.id, s.name ORDER BY s.complete_date DESC LIMIT 5;
-- Issue cycle time by type
SELECT it.name as issue_type, COUNT(*) as issues, AVG(i.cycle_time)/3600 as avg_hours
FROM jira_issues i
JOIN jira_issue_types it ON i.issue_type_id = it.id
WHERE i.completed_at IS NOT NULL AND i.completed_at > NOW() - INTERVAL '90 days'
GROUP BY it.name ORDER BY issues DESC;
サービスカタログ
サービス、チーム、ドメイン、オーナーシップを含むソフトウェアカタログです。
主なテーブル: dx_catalog_entities、dx_catalog_entity_owners、dx_catalog_entity_types
dx_catalog_entities の列: id、name、identifier、entity_type_identifier、description
エンティティタイプ: service、team、domain(entity_type_identifier 列を確認してください)
-- Services count by owning team
SELECT t.name as team, COUNT(*) as services
FROM dx_catalog_entity_owners eo
JOIN dx_catalog_entities e ON eo.entity_id = e.id
JOIN dx_teams t ON eo.team_id = t.id
WHERE e.entity_type_identifier = 'service'
GROUP BY t.name ORDER BY services DESC;
-- List services with owners
SELECT e.name as service, e.identifier, t.name as owner_team
FROM dx_catalog_entities e
JOIN dx_catalog_entity_owners eo ON e.id = eo.entity_id
JOIN dx_teams t ON eo.team_id = t.id
WHERE e.entity_type_identifier = 'service'
ORDER BY t.name, e.name;
パイプラインとコード品質
CI/CD パイプラインの実行とコード品質メトリクスです(例:SonarCloud)。
主なテーブル: pipeline_runs、sonarcloud_issues、sonarcloud_projects、sonarcloud_project_metrics
pipeline_runs の列: id、status、started_at、completed_at、duration
-- Pipeline success rate
SELECT COUNT(*) as runs,
COUNT(*) FILTER (WHERE status = 'success') as successful,
COUNT(*) FILTER (WHERE status = 'success') * 100.0 / COUNT(*) as success_pct
FROM pipeline_runs WHERE started_at > NOW() - INTERVAL '30 days';
-- Pipeline duration trend
SELECT DATE_TRUNC('week', started_at) as week,
AVG(duration)/60 as avg_minutes
FROM pipeline_runs WHERE started_at > NOW() - INTERVAL '90 days'
GROUP BY week ORDER BY week;
課題
ソース管理プラットフォームの正規化された課題データです(例:GitHub Issues)。
主なテーブル: issues、github_issues、github_issue_labels、github_labels
issues の列: id、source、dx_user_id、title、state、created、completed、cycle_time
-- Issue throughput
SELECT DATE_TRUNC('week', completed) as week, COUNT(*) as completed
FROM issues WHERE completed > NOW() - INTERVAL '90 days'
GROUP BY week ORDER BY week;
ドキュメント
ドキュメントおよびナレッジベースの利用状況です(例:Confluence、Wiki)。
主なテーブル: confluence_spaces、confluence_pages、confluence_page_versions、confluence_users、confluence_page_labels
confluence_spaces の列: id、name、external_key、space_type、status、source_url、created_at
confluence_pages の列: id、space_id、author_id、title、status、views_count、created_at、updated_at
confluence_page_versions の列: id、page_id、version_number、author_id、created_at
-- Most active Confluence spaces
SELECT s.name as space_name, s.external_key,
COUNT(DISTINCT p.id) as page_count,
COUNT(DISTINCT pv.id) as total_edits,
MAX(pv.created_at) as last_activity
FROM confluence_spaces s
LEFT JOIN confluence_pages p ON s.id = p.space_id
LEFT JOIN confluence_page_versions pv ON p.id = pv.page_id
GROUP BY s.id, s.name, s.external_key
ORDER BY total_edits DESC LIMIT 15;
-- Recent documentation activity
SELECT p.title, s.name as space, pv.created_at
FROM confluence_page_versions pv
JOIN confluence_pages p ON pv.page_id = p.id
JOIN confluence_spaces s ON p.space_id = s.id
WHERE pv.created_at > NOW() - INTERVAL '7 days'
ORDER BY pv.created_at DESC LIMIT 20;
データ品質に関する注意事項
既知の問題:
- チーム名に誤字が含まれている場合があります。
dx_teamsをクエリして名前を確認してください incident_servicesテーブルは空のため、インシデントを特定のサービスに紐付けることはできませんdx_usersの AI 導入日フィールドはほとんどが NULL です。代わりにgithub_copilot_daily_usagesを使用してください- DX アンケートのスコアには重複がある場合があります。必ず GROUP BY と MAX() 集計を使用してください
よく使われるクエリパターン
DORA メトリクス
-- Deployment Frequency (daily average, production only)
SELECT COUNT(*)::float / 30 as deploys_per_day FROM deployments
WHERE deployed_at > NOW() - INTERVAL '30 days' AND environment IN ('prod', 'production');
-- Lead Time for Changes (PR cycle time)
SELECT
AVG(open_to_merge)/3600 as avg_hours,
PERCENTILE_CONT(0.5) WITHIN GROUP (ORDER BY open_to_merge)/3600 as median_hours
FROM pull_requests
WHERE merged IS NOT NULL AND created > NOW() - INTERVAL '30 days';
-- Mean Time to Recovery
SELECT AVG(started_to_resolved)/3600 as mttr_hours FROM incidents
WHERE resolved_at IS NOT NULL AND priority IN ('1 - Critical', '2 - High')
AND started_at > NOW() - INTERVAL '90 days';
-- Change Failure Rate (requires correlating incidents with deployments)
時系列の傾向
-- Weekly PR throughput trend
SELECT DATE_TRUNC('week', merged) as week, COUNT(*) as prs
FROM pull_requests WHERE merged > NOW() - INTERVAL '90 days'
GROUP BY week ORDER BY week;
-- Monthly deployment trend
SELECT DATE_TRUNC('month', deployed_at) as month, COUNT(*) as deploys
FROM deployments WHERE deployed_at > NOW() - INTERVAL '12 months'
GROUP BY month ORDER BY month;
DX アンケートの過去データとの比較
-- Compare team scores across all surveys
SELECT s.end_date as survey_date, i.name as metric, ts.score
FROM dx_snapshot_team_scores ts
JOIN dx_snapshots s ON ts.snapshot_id = s.id
JOIN dx_snapshot_teams st ON ts.snapshot_team_id = st.id AND st.snapshot_id = s.id
JOIN dx_snapshot_items i ON ts.item_id = i.id AND i.snapshot_id = s.id
WHERE st.name = 'Your Team Name'
AND i.item_type = 'core4'
AND ts.score IS NOT NULL
ORDER BY s.end_date, i.name;
-- Teams that improved most since last survey (use vs_prev)
SELECT st.name as team, i.name as metric, MAX(ts.score) as score, MAX(ts.vs_prev) as change
FROM dx_snapshot_team_scores ts
JOIN dx_snapshot_teams st ON ts.snapshot_team_id = st.id
JOIN dx_snapshot_items i ON ts.item_id = i.id AND i.snapshot_id = ts.snapshot_id
WHERE ts.snapshot_id = (SELECT id FROM dx_snapshots ORDER BY end_date DESC LIMIT 1)
AND i.name = 'Effectiveness' AND i.item_type = 'core4'
AND st.parent = false
GROUP BY st.name, i.name
ORDER BY change DESC NULLS LAST;
ツール満足度の分析
-- Tool satisfaction scores (csat)
SELECT i.name as tool, AVG(ts.score) as avg_satisfaction, COUNT(DISTINCT st.name) as teams_using
FROM dx_snapshot_team_scores ts
JOIN dx_snapshot_teams st ON ts.snapshot_team_id = st.id
JOIN dx_snapshot_items i ON ts.item_id = i.id AND i.snapshot_id = ts.snapshot_id
WHERE ts.snapshot_id = (SELECT id FROM dx_snapshots ORDER BY end_date DESC LIMIT 1)
AND i.item_type = 'csat' AND st.parent = false AND ts.score IS NOT NULL
GROUP BY i.name ORDER BY avg_satisfaction ASC;
参照ファイル
スキーマの詳細なドキュメントについては、以下のファイルをお読みください。
| ドメイン | ファイル | 読むタイミング |
|---|---|---|
| DX アンケート/スコア | references/developer-experience.md | アンケートデータ、スナップショット、チームスコア、感情 |
| チーム/ユーザー | references/teams-users.md | チーム構成、ユーザープロフィール、AI 導入日 |
| プルリクエスト | references/pull-requests.md | PR メトリクス、レビュー、サイクルタイム |
| デプロイ | references/deployments-incidents.md | デプロイ頻度、インシデント、DORA メトリクス |
| AI ツール | references/ai-tools.md | AI アシスタントの利用状況、導入状況の追跡 |
| 課題管理 | references/jira.md | 課題、スプリント、ストーリーポイント |
| カタログ | references/catalog.md | サービス、オーナーシップ、ドメイン |
| パイプライン/品質 | references/pipelines-quality.md | CI/CD の実行、コード品質の課題 |
| 課題 | references/issues-github.md | ソース管理の課題、ラベル |