database-scout について
database-scout は、開発者向けの SQLite/PostgreSQL 用読み取り専用コマンドライン探索ツールです。スキーマやデータの確認、Mermaid ER 図の生成、安全な SQL 実行に対応します。
主な機能
- 01テーブル、ビュー、行数の一覧表示
- 02列、制約、インデックスの確認
- 03テーブルデータのプレビュー
- 04Mermaid ER 図の生成
- 05読み取り専用 SQL クエリの実行
活用シーン
- 01テーブルとビューの棚卸し
- 02スキーマと関連の確認
- 03テーブルレコードのサンプル確認
- 04制限付きクエリとエンティティ図の作成
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ zebbern/ claude-code-guide --skill database-scoutインストール後、Claude Code で/database-scoutを入力して読み込まれたか確認します。
同梱ファイルLICENSEscripts/db_explorer.py
詳細
database-scout
SQLite/PostgreSQL データベースを読み取り専用で調査するツールです。テーブルスキーマの確認、データのプレビュー、ER 図の生成、安全なクエリの実行ができます。
機能の概要
| 機能 | 説明 |
|---|---|
| すべてのテーブルを一覧表示 | データベース内のテーブルとビューを、行数とともに表示します |
| テーブルスキーマの確認 | カラム名、型、制約(PK/FK/NOT NULL)、インデックス、デフォルト値を確認します |
| データのプレビュー | テーブルの先頭 N 行を表示します |
| ER 図の生成 | レンダリング可能な Mermaid erDiagram 構文を出力します |
| 安全な読み取り専用クエリ | SELECT/WITH/EXPLAIN のみ許可され、書き込み操作はブロックされます |
セキュリティ対策
- 接続レベルでの読み取り専用設定:SQLite は
?mode=roURI で開き、PostgreSQL はSET SESSION READ ONLYを使用します - SQL ホワイトリスト:SELECT/WITH/EXPLAIN/PRAGMA/SHOW で始まるステートメントのみを許可します
- 危険なキーワードのブロック:INSERT、UPDATE、DELETE、DROP、ALTER、CREATE など、30 以上のキーワードをブロックします
- 複数ステートメントのブロック:セミコロンで区切られた複数の SQL ステートメントを拒否します(インジェクションを防止)
- 識別子のエスケープ:SQL インジェクションを防ぐため、テーブル名を二重引用符でエスケープします
クイックスタート
# List all tables in a SQLite database
python3 scripts/db_explorer.py --db-path data.db list-tables
# Inspect table schema
python3 scripts/db_explorer.py --db-path data.db describe users
# Preview data (default 20 rows)
python3 scripts/db_explorer.py --db-path data.db preview orders --limit 10
# Generate Mermaid ER diagram
python3 scripts/db_explorer.py --db-path data.db er-diagram
# Run a read-only query
python3 scripts/db_explorer.py --db-path data.db query "SELECT name, age FROM users WHERE age > 18 LIMIT 10"
PostgreSQL
# Connect to PostgreSQL
python3 scripts/db_explorer.py --db-type postgres --dsn "host=localhost dbname=mydb user=reader" list-tables
# Inspect table schema
python3 scripts/db_explorer.py --db-type postgres --dsn "host=localhost dbname=mydb user=reader" describe orders
詳細な使い方
パラメーター
| パラメーター | 必須 | デフォルト | 説明 |
|---|---|---|---|
--db-type | いいえ | sqlite | データベースの種類:sqlite または postgres |
--db-path | はい(SQLite の場合) | — | SQLite データベースファイルへのパス |
--dsn | はい(PostgreSQL の場合) | — | PostgreSQL 接続文字列 |
サブコマンド
| コマンド | 説明 | 例 |
|---|---|---|
list-tables | すべてのテーブル/ビューを一覧表示します | list-tables |
describe <table> | テーブルスキーマの詳細を表示します | describe users |
preview <table> [--limit N / -n N] | 先頭 N 行をプレビューします | preview orders --limit 5 |
er-diagram | Mermaid ER 図を生成します | er-diagram |
query "<sql>" | 読み取り専用 SQL クエリを実行します | query "SELECT count(*) FROM users" |
出力例
list-tables
[
{"name": "users", "type": "table", "row_count": 1500},
{"name": "orders", "type": "table", "row_count": 8200},
{"name": "user_stats", "type": "view", "row_count": 1500}
]
describe
{
"table": "orders",
"row_count": 8200,
"columns": [
{"cid": 0, "name": "id", "type": "INTEGER", "notnull": true, "default": null, "primary_key": true},
{"cid": 1, "name": "user_id", "type": "INTEGER", "notnull": true, "default": null, "primary_key": false},
{"cid": 2, "name": "amount", "type": "REAL", "notnull": false, "default": "0.0", "primary_key": false}
],
"foreign_keys": [
{"from": "user_id", "to_table": "users", "to_column": "id"}
],
"indexes": [
{"name": "idx_orders_user_id", "unique": false, "columns": ["user_id"]}
]
}
er-diagram(Mermaid)
erDiagram
users {
INTEGER id PK
TEXT name
TEXT email
INTEGER age
}
orders {
INTEGER id PK
INTEGER user_id FK
REAL amount
TEXT created_at
}
users ||--o{ orders : "user_id"
依存関係
- Python 3.8 以降(
sqlite3は組み込みモジュールです) - PostgreSQL のサポートには
pip install psycopg2-binaryが必要です
コメント
Markdown 対応