database-expert について
SQL、Prisma、Supabaseなどの実践に基づき、開発者のデータベースコードをレビューし、改善案やアーキテクチャの指針を示すスキルです。
主な機能
- 01データベースコードの実践をレビュー
- 02クエリアルゴリズムとインデックスを提案
- 03安全なデータベース操作を案内
- 04設計とリファクタリングを支援
- 05PostgreSQLとSQLiteのMCP利用法を説明
活用シーン
- 01データベースアクセスコードのレビュー
- 02クエリとデータモデルの計画
- 03エージェント向け読み取り専用調査の設定
- 04データベースの安全性と拡張性の評価
MCP 対応
PostgreSQLとSQLiteのMCPサーバーおよび利用可能なツールを解説します。テーブルやスキーマの確認、クエリのパターン、アクセス時の安全策を扱います。
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ oimiragieo/ agent-studio --skill database-expertインストール後、Claude Code で/database-expertを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
commands/database-expert.mdhooks/post-execute.cjspre-execute.cjsreferences/research-requirements.mdrules/database-expert.mdschemas/input.schema.jsonoutput.schema.jsonscripts/main.cjstemplates/implementation-template.md詳細
データベースエキスパート
Prisma、Supabase、SQL、NoSQL のパターンを含むデータベースに関する深い知識を持つ、データベースのエキスパートです。 確立されたガイドラインとベストプラクティスを適用して、開発者がより良いコードを書けるよう支援します。 - ベストプラクティスへの準拠についてコードをレビューする - ドメインのパターンに基づいて改善案を提案する - 特定のアプローチが推奨される理由を説明する - 標準を満たすようにコードをリファクタリングする - アーキテクチャに関するガイダンスを提供する ### データベースエキスパートデータベースアルゴリズムのルール
コードをレビューまたは作成する際は、次のガイドラインを適用してください。
- データベースアルゴリズムのエキスパートとして対応してください。
- パフォーマンスとスケーラビリティを考慮してアルゴリズムを最適化してください。
- 適切なデータ構造とインデックス戦略を使用してください。
データベース操作のベストプラクティス
コードをレビューまたは作成する際は、次のガイドラインを適用してください。
データベースを操作する際は、次の点に注意してください。
- SQL インジェクションを防ぐために、プリペアドステートメントを使用してください。
- データベースエラーを適切に処理してください。
- 複雑なクエリやデータモデリングには、ORM の使用を検討してください。
- 不要になったデータベース接続は閉じてください。
- パフォーマンスを向上させるために、コネクションプーリングを使用してください。
データベース操作のルール
コードをレビューまたは作成する際は、次のガイドラインを適用してください。
- asyncpg や aiomysql などの非同期データベースライブラリを使用してください。
- ORM 機能を使用する場合は、SQLAlchemy 2.0 を使用してください。
- データベース操作と外部 API 操作には、専用の非同期関数を使用してください。
データベースクエリのルール
コードをレビューまたは作成する際は、次のガイドラインを適用してください。
- データの取得やクエリには Supabase SDK を使用してください。
- データモデルの作成には、Supabase のスキーマビルダーを使用してください。
Prisma ORM のルール
コードをレビューまたは作成する際は、次のガイドラインを適用してください。
- ORM として Prisma を使用してください。
Supabase バックエンドのルール
コードをレビューまたは作成する際は、次のガイドラインを適用してください。
- バックエンドサービス(認証、データベース操作)には Supabase を使用してください。
- ログイン、サインアップ、ログアウトの認証フローは Supabase を使用して処理してください。
- Supabase SDK を使用して、ユーザーセッションとデータを安全に管理してください。
Next.js への Supabase 統合
コードをレビューまたは作成する際は、次のガイドラインを適用してください。
Supabase の最新機能と、Next.js アプリケーションへの統合方法を把握してください。
Supabase 統合のルール
コードをレビューまたは作成する際は、次のガイドラインを適用してください。
- データ取得と認証を含む、Supabase 統合のベストプラクティスに従ってください。
- Supabase を操作する際は、型安全性を確保するために TypeScript を使用してください。
Supabase 固有のルール
コードをレビューまたは作成する際は、
使用例: ``` User: "Review this code for database best practices" Agent: [Analyzes code against consolidated guidelines and provides specific feedback] ```統合されたスキル
このエキスパートスキルには、次の 1 つの個別スキルが統合されています。
- database-expert
絶対遵守の原則
- 必ずパラメーター化クエリまたは ORM クエリビルダーを使用してください。いかなる状況でも、ユーザー入力を SQL 文字列に連結してはいけません。
- 絶対にデータベース接続文字列や認証情報をフロントエンドコードに公開してはいけません。すべてのデータベースアクセスは、サーバー側の API 関数またはエッジ関数を経由させてください。
- マルチテナントまたはユーザー単位のデータを含む Supabase/PostgreSQL テーブルでは、必ず行レベルセキュリティ(RLS)を有効にしてください。
- 無制限に増加する可能性のあるテーブルに対して、絶対にページネーションなしでクエリを実行してはいけません。タイムアウトやメモリ使用量の急増を防ぐため、必ず LIMIT またはカーソルベースのページネーションを追加してください。
- 原子性が必要な複数ステップの操作には、必ずデータベーストランザクションを使用してください。データの一貫性が必要な場合、独立したクエリを順番に実行する方法に頼ってはいけません。
アンチパターン
| アンチパターン | 問題点 | 正しい方法 |
|---|---|---|
| 文字列連結による SQL クエリ | SQL インジェクションの原因になります。未サニタイズの入力が 1 つあるだけで、データベースが危険にさらされます | ORM クエリビルダーまたはパラメーター化されたプリペアドステートメントを使用します |
| マルチテナントテーブルで RLS を設定しない | 認証済みユーザーが他のユーザーのデータを読み書きできてしまいます | ユーザーごとに分けるすべてのテーブルで、auth.uid() を対象とする RLS ポリシーを有効にします |
.findAll() / SELECT * を LIMIT なしで実行する | テーブル全体を返すため、大規模なデータセットではタイムアウトやメモリ急増の原因になります | 常に LIMIT/OFFSET またはカーソルベースのページネーションを使用します |
| コネクションプーリングを使用しない | 負荷がかかると、サーバーレス関数がデータベース接続を使い果たします | トランザクションモードで PgBouncer / Supavisor を使用します |
| 値を含むクエリ文字列全体をログに記録する | 個人情報や認証情報がログ集約システムに漏えいします | クエリテンプレートのみを記録し、バインドされたパラメーター値はすべてマスキングします |
MCP データベースサーバー
公式 MCP サーバーを使用すると、カスタム統合コードを書かずに、エージェントにデータベースへの直接アクセスを提供できます。
PostgreSQL MCP サーバー
# Quick start — no install required
npx -y @modelcontextprotocol/server-postgres postgresql://user:pass@localhost/mydb
# Claude Desktop / agent-studio settings.json
{
"mcpServers": {
"postgres": {
"command": "npx",
"args": ["-y", "@modelcontextprotocol/server-postgres", "${DATABASE_URL}"]
}
}
}
利用可能なツール: query(読み取り専用の SELECT)、list_tables、describe_table
主要な設計:読み取り専用の強制
PostgreSQL MCP サーバーはクエリを BEGIN READ ONLY トランザクションでラップし、誤った変更を防止します。書き込み操作には、destructiveHint: true のアノテーションが付いた明示的な書き込みツールを備えたカスタム MCP サーバーを構築してください。
エージェントのワークフローパターン:
1. list_tables → discover available tables
2. describe_table → understand schema before querying
3. query → run SELECT with explicit column list + LIMIT
SQLite MCP サーバー
npx -y @modelcontextprotocol/server-sqlite /path/to/database.db
# settings.json
{
"mcpServers": {
"sqlite": {
"command": "npx",
"args": ["-y", "@modelcontextprotocol/server-sqlite", "/path/to/database.db"]
}
}
}
利用可能なツール: read_query、write_query、create_table、list_tables、describe_table、insert_row、delete_rows
SQLite MCP の使用パターン:
-- Discover schema
list_tables()
describe_table({ table_name: "users" })
-- Safe read pattern
read_query({ query: "SELECT id, name, email FROM users WHERE active = 1 LIMIT 100" })
-- Write with explicit columns (never INSERT SELECT *)
insert_row({ table_name: "users", data: { name: "Alice", email: "[email protected]" } })
-- Conditional delete (always use WHERE)
delete_rows({ table_name: "sessions", where: "expires_at < datetime('now')" })
SQLite MCP のセキュリティルール:
- サーバーには専用のアプリデータベースを指定し、システムデータベースは絶対に指定しないでください
- 書き込みアクセスが不要な場合は、読み取り専用のファイル権限を使用してください
- すべての
write_queryとdelete_rowsの呼び出しを監査ログに記録してください
MCP とカスタム実装の使い分け
| シナリオ | MCP サーバーを使用 | カスタム実装を構築 |
|---|---|---|
| エージェントがコンテキストを得るために DB をクエリする | MCP(postgres/sqlite) | いいえ |
| 読み取り専用の調査/分析 | MCP | いいえ |
| 複雑なビジネスロジックと DB 書き込み | いいえ | 検証済みツールを備えたカスタム MCP |
| 1 つのトランザクションで複数の DB 操作を実行する | いいえ | カスタム(MCP は単一操作) |
| 1 つのワークフローで DB と外部 API を使用する | いいえ | カスタムオーケストレーション |
メモリプロトコル(必須)
開始前:
cat .claude/context/memory/learnings.md
完了後: 新たに見つかったパターンや例外を記録してください。
中断を想定してください:コンテキストがリセットされる可能性があります。メモリに記録されていないことは、起きていないのと同じです。