supabase-usage について
Supabase データベース作業向けのリファレンススキルです。Auth、Row Level Security、テーブル間の関係、クエリの実践を扱い、安全なアクセス制御と効率的なクエリの指針を示します。
主な機能
- 01テーブルとスキーマの調査
- 02読み取り専用 SQL クエリの実行
- 03Auth と RLS の実践
- 04リレーションとネストしたクエリの処理
- 05フィルタリングとページネーションのパターン
- 06詳細なリファレンスファイルの参照
活用シーン
- 01Supabase データベース構造の調査
- 02公開テーブルのアクセス方針の確認
- 03フィルタリングとページネーションを使うクエリの作成
- 04認証やリレーションのパターンの確認
MCP 対応
テーブル一覧、スキーマ確認、読み取り専用 SQL 実行に使う Supabase MCP ツールを説明します。MCP クライアントはこれらのツールでデータベース構造を調べ、クエリを実行できます。
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ fcakyon/ claude-codex-settings --skill supabase-usageインストール後、Claude Code で/supabase-usageを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
references/auth.mdquery-patterns.mdrelationships.mdrls.md詳細
Supabase データベースのパターン
Auth、Row Level Security、テーブルのリレーション、クエリのベストプラクティスなど、Supabase データベースを扱うためのパターンです。
概要
- MCP ツール:データベース構造のクエリと調査
- 認証:ユーザー管理、セッション、認証テーブル
- Row Level Security:データアクセス制御のポリシーパターン
- テーブルのリレーション:外部キー、結合、ネストされたクエリ
- クエリパターン:フィルタリング、ページネーション、パフォーマンス
MCP ツール
データベースの調査に使用できるツール:
mcp__supabase__list_tables- データベース内のすべてのテーブルを一覧表示mcp__supabase__get_table_schema- 特定のテーブルのスキーマを取得mcp__supabase__execute_sql- 読み取り専用の SQL クエリを実行
ワークフロー:
list_tablesでデータベース構造を把握しますget_table_schemaでカラムと型を調べますexecute_sqlでカスタムクエリを実行します(読み取り専用)
ベストプラクティス
推奨事項
- ✓ すべての公開テーブルで RLS を有効にします
- ✓ パフォーマンス向上のため、RLS ポリシーで
(select auth.uid())を使います - ✓ RLS でチェックするカラムにインデックスを追加します
- ✓ ポリシーで
TO authenticatedを指定してロールを設定します - ✓ auth.users への外部キーには
on delete cascadeを使います - ✓ 大規模なデータセットではカーソルベースのページネーションを使います
- ✓ 必要なカラムのみを選択します:
.select('*')ではなく.select('id, name')を使います
禁止事項
- ✗ RLS を設定せずに機密データを保存しないでください
- ✗ ポリシーで
auth.uid()を直接使わないでください((select auth.uid())を使います) - ✗ ロールを指定せずにポリシーを作成しないでください
- ✗ 頻繁にフィルタリングするカラムへのインデックスを忘れないでください
- ✗ 深いページ(1000 行超)でオフセットページネーションを使わないでください
- ✗ auth.users を API 経由で直接公開しないでください(public プロファイルテーブルを使います)
クイックリファレンス
よく使うフィルター
| フィルター | JavaScript | Python |
|---|---|---|
| 等しい | .eq('col', val) | .eq("col", val) |
| 等しくない | .neq('col', val) | .neq("col", val) |
| より大きい | .gt('col', val) | .gt("col", val) |
| 以上 | .gte('col', val) | .gte("col", val) |
| より小さい | .lt('col', val) | .lt("col", val) |
| 以下 | .lte('col', val) | .lte("col", val) |
| パターン一致 | .ilike('col', '%val%') | .ilike("col", "%val%") |
| リスト内 | .in('col', [a,b]) | .in_("col", [a,b]) |
| NULL かどうか | .is('col', null) | .is_("col", "null") |
| OR | .or('a.eq.1,b.eq.2') | .or_("a.eq.1,b.eq.2") |
Auth テーブルのクイックリファレンス
| テーブル | 主なカラム |
|---|---|
auth.users | id, email, phone, created_at, last_sign_in_at, raw_user_meta_data |
auth.sessions | id, user_id, created_at, updated_at |
auth.identities | id, user_id, provider, identity_data |
RLS ポリシーのテンプレート
create policy "policy_name" on table_name
to authenticated -- or anon, or specific role
for select -- select, insert, update, delete, or all
using ( (select auth.uid()) = user_id )
with check ( (select auth.uid()) = user_id ); -- for insert/update
追加リソース
詳しいパターンとコード例については、以下を参照してください。
references/auth.md- JS/Python SDK による認証、ユーザープロファイルreferences/rls.md- Row Level Security ポリシーとパフォーマンスのヒントreferences/relationships.md- テーブルのリレーションとネストされたクエリreferences/query-patterns.md- フィルタリング、ページネーション、カウント、インデックス
コメント
Markdown 対応