Claude-skill-registry db-query
データベースクエリ・分析支援。SQLクエリの作成、実行、結果の分析を行う。BigQuery、PostgreSQL、MySQL対応。トリガー: /db-query, SQL, クエリ, データ分析, BigQuery
install
source · Clone the upstream repo
git clone https://github.com/majiayu000/claude-skill-registry
Claude Code · Install into ~/.claude/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/majiayu000/claude-skill-registry "$T" && mkdir -p ~/.claude/skills && cp -r "$T/skills/data/db-query" ~/.claude/skills/majiayu000-claude-skill-registry-db-query && rm -rf "$T"
manifest:
skills/data/db-query/SKILL.mdsource content
データベースクエリ・分析スキル
SQLクエリの作成、実行、結果の分析を支援します。
対応データベース
| DB | CLIツール | 接続方法 |
|---|---|---|
| BigQuery | | |
| PostgreSQL | | |
| MySQL | | |
| SQLite | | |
機能
1. クエリ作成支援
自然言語からSQLを生成:
ユーザー: 「先月のアクティブユーザー数を日別で」 生成SQL: SELECT DATE(created_at) AS date, COUNT(DISTINCT user_id) AS active_users FROM events WHERE created_at >= DATE_SUB(CURRENT_DATE(), INTERVAL 1 MONTH) AND event_type = 'login' GROUP BY date ORDER BY date;
2. クエリ実行
# BigQuery bq query --use_legacy_sql=false --format=prettyjson ' SELECT ... ' # PostgreSQL psql -c "SELECT ..." -h $DB_HOST -U $DB_USER -d $DB_NAME # MySQL mysql -e "SELECT ..." -h $DB_HOST -u $DB_USER -p$DB_PASS $DB_NAME
3. 結果分析
## クエリ結果分析 ### データサマリー - **行数**: 1,234 - **期間**: 2025-01-01 〜 2025-01-31 ### 主要な発見 1. 1/15に急増(前日比 +150%) 2. 週末は平日の60%程度 3. 平均: 1,000 users/day ### 可視化 | 日付 | ユーザー数 | 傾向 | |------|-----------|------| | 1/1 | 500 | ▂ | | 1/2 | 800 | ▅ | | 1/15 | 2000 | █ |
クエリパターン集
ユーザー分析
-- DAU/WAU/MAU SELECT COUNT(DISTINCT CASE WHEN DATE(ts) = CURRENT_DATE() THEN user_id END) AS dau, COUNT(DISTINCT CASE WHEN ts >= DATE_SUB(CURRENT_DATE(), INTERVAL 7 DAY) THEN user_id END) AS wau, COUNT(DISTINCT CASE WHEN ts >= DATE_SUB(CURRENT_DATE(), INTERVAL 30 DAY) THEN user_id END) AS mau FROM events; -- リテンション WITH cohort AS ( SELECT user_id, DATE(MIN(created_at)) AS cohort_date FROM users GROUP BY user_id ) SELECT cohort_date, COUNT(DISTINCT c.user_id) AS cohort_size, COUNT(DISTINCT CASE WHEN DATE(e.ts) = DATE_ADD(cohort_date, INTERVAL 7 DAY) THEN c.user_id END) AS day7_retained FROM cohort c LEFT JOIN events e ON c.user_id = e.user_id GROUP BY cohort_date;
パフォーマンス分析
-- スロークエリ (PostgreSQL) SELECT query, calls, total_time / 1000 AS total_seconds, mean_time / 1000 AS mean_seconds FROM pg_stat_statements ORDER BY total_time DESC LIMIT 10; -- テーブルサイズ SELECT schemaname, tablename, pg_size_pretty(pg_total_relation_size(schemaname || '.' || tablename)) AS size FROM pg_tables ORDER BY pg_total_relation_size(schemaname || '.' || tablename) DESC LIMIT 10;
エラー分析
-- エラー頻度 SELECT error_code, error_message, COUNT(*) AS count, MIN(ts) AS first_seen, MAX(ts) AS last_seen FROM error_logs WHERE ts >= DATE_SUB(NOW(), INTERVAL 24 HOUR) GROUP BY error_code, error_message ORDER BY count DESC;
出力形式
## クエリ実行結果 ### クエリ ```sql SELECT ...
実行情報
- データベース: BigQuery / production
- 実行時間: 2.3秒
- スキャン量: 1.2 GB
- 結果行数: 1,234
結果
| date | active_users | change |
|---|---|---|
| 2025-01-01 | 1,000 | - |
| 2025-01-02 | 1,200 | +20% |
| 2025-01-03 | 950 | -21% |
分析
トレンド:
- 全体的に横ばい
- 週末に減少傾向
異常値:
- 1/15 に急増(イベント影響?)
推奨アクション:
- 1/15 の急増要因を調査
- 週末施策の検討
## セキュリティ注意事項 ### 必須ルール - **SELECT文のみ実行**: DELETE, UPDATE, DROP, INSERT, TRUNCATE, ALTER は絶対に実行しない - **本番DBへの直接接続は避ける**: 可能な限りレプリカを使用 - **結果の取り扱い**: 個人情報を含む場合は注意 - **クエリログ**: 実行したクエリは記録される前提で ### 安全なクエリ実行 ```bash # PostgreSQL: 読み取り専用トランザクションを使用 psql -c "SET TRANSACTION READ ONLY; SELECT ..." -h $DB_HOST -U $DB_USER -d $DB_NAME # MySQL: 読み取り専用フラグ mysql --safe-updates -e "SELECT ..." -h $DB_HOST -u $DB_USER $DB_NAME # BigQuery: ドライランで事前確認 bq query --dry_run --use_legacy_sql=false 'SELECT ...'
禁止パターン検出
実行前にクエリを検証し、以下のパターンが含まれる場合は実行を拒否:
,DELETE
,UPDATE
,INSERT
,DROP
,TRUNCATE
,ALTERCREATE
(SQLインジェクションパターン); --
,GRANT
(権限操作)REVOKE
BigQuery 固有
# テーブル一覧 bq ls project:dataset # スキーマ確認 bq show --schema project:dataset.table # クエリ実行(ドライラン) bq query --dry_run --use_legacy_sql=false 'SELECT ...' # 結果をテーブルに保存 bq query --destination_table=project:dataset.result 'SELECT ...'
使用方法
# 自然言語でクエリ作成 /db-query 先月のDAUを日別で出して # SQLを直接実行 /db-query --execute "SELECT COUNT(*) FROM users" # スキーマ確認 /db-query --schema users