mcpField
D
dx-data-navigator

dx-data-navigator

github.com/pskoettデータ・データベース327355 回インストール1 日前に更新
リポジトリ

dx-data-navigator について

dx-data-navigatorは、DX Data CloudのPostgreSQLデータベースを調べる分析担当者やエンジニアチーム向けのスキルです。エンジニアリング指標などを扱い、テーブル構造や結合、クエリ例を案内します。

主な機能

  1. 01DX Data Cloudデータの検索
  2. 02開発指標と調査指標の確認
  3. 03PR、デプロイ、インシデントの分析
  4. 04AIツールとプロジェクトデータの検索
  5. 05スキーマと結合方法の案内

活用シーン

  1. 01チーム別のPR・デプロイ指標の集計
  2. 02DX調査スナップショットのスコア確認
  3. 03デプロイ頻度とインシデントデータの追跡
  4. 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.md
catalog.md
deployments-incidents.md
developer-experience.md
issues-github.md
jira.md
pipelines-quality.md
pull-requests.md
teams-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_teamsDX 調査スナップショット内のチーム(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.mdPR メトリクス、レビュー、サイクルタイム
デプロイreferences/deployments-incidents.mdデプロイ頻度、インシデント、DORA メトリクス
AI ツールreferences/ai-tools.mdAI アシスタントの利用状況、導入状況の追跡
課題管理references/jira.md課題、スプリント、ストーリーポイント
カタログreferences/catalog.mdサービス、オーナーシップ、ドメイン
パイプライン/品質references/pipelines-quality.mdCI/CD の実行、コード品質の課題
課題references/issues-github.mdソース管理の課題、ラベル

コメント