Agent Skills by ALSEL
Anthropic Claudeその他⭐ リポ 0品質スコア 50/100

supabase

Supabase CLIの操作、マイグレーション管理、Row Level Security(RLS)の設定、Edge Functionsの開発など、Supabaseのコア機能全般をサポートするスキル。プロジェクトのデータベース設計からサーバーレス関数のデプロイまで幅広く活用できます。

description の原文を見る

Core Supabase CLI, migrations, RLS, Edge Functions

SKILL.md 本文

Supabase Core Skill

すべての Supabase プロジェクトに共通するコアコンセプト、CLI ワークフロー、パターン。

Sources: Supabase Docs | Supabase CLI


Core Principle

ローカルファースト、マイグレーションをバージョン管理下に、本番環境に直接触れない。

Supabase CLI でローカルに開発し、すべての変更をマイグレーションとして記録し、CI/CD を通じてデプロイします。


Supabase Stack

ServicePurpose
DatabasePostgreSQL with extensions
Authユーザー認証、OAuth プロバイダー
StorageRLS 付きファイルストレージ
Edge Functionsサーバーレス Deno 関数
RealtimeWebSocket サブスクリプション
VectorAI 埋め込み (pgvector)

CLI セットアップ

インストール&ログイン

# macOS
brew install supabase/tap/supabase

# npm (代替方法)
npm install -g supabase

# ログイン
supabase login

プロジェクト初期化

# プロジェクトディレクトリで
supabase init

# 作成される:
# supabase/
# ├── config.toml      # ローカル設定
# ├── seed.sql         # シードデータ
# └── migrations/      # SQL マイグレーション

リモートにリンク

# ダッシュボード URL からプロジェクト ref を取得: https://supabase.com/dashboard/project/<ref>
supabase link --project-ref <project-id>

# 既存スキーマを取得
supabase db pull

ローカルスタックを起動

supabase start

# 出力:
# API URL: http://localhost:54321
# GraphQL URL: http://localhost:54321/graphql/v1
# DB URL: postgresql://postgres:postgres@localhost:54322/postgres
# Studio URL: http://localhost:54323
# Anon key: eyJ...
# Service role key: eyJ...

マイグレーション ワークフロー

オプション 1: ダッシュボード + 差分生成 (クイックプロトタイピング)

# 1. ローカル Studio (localhost:54323) で変更を作成
# 2. 差分からマイグレーションを生成
supabase db diff -f <migration_name>

# 3. 生成された SQL を確認
cat supabase/migrations/*_<migration_name>.sql

# 4. テストのためリセット
supabase db reset

オプション 2: マイグレーションを直接記述 (推奨)

# 1. 空のマイグレーションを作成
supabase migration new create_users_table

# 2. マイグレーションファイルを編集
# supabase/migrations/<timestamp>_create_users_table.sql

# 3. ローカルに適用
supabase db reset

オプション 3: ORM マイグレーション (Best DX)

Drizzle (TypeScript) または SQLAlchemy (Python) を使用 - フレームワーク固有のスキルを参照。

マイグレーションをデプロイ

# リモート (ステージング/本番) にプッシュ
supabase db push

# マイグレーション状態を確認
supabase migration list

データベース パターン

すべてのテーブルで RLS を有効化

-- 常に RLS を有効化
ALTER TABLE public.profiles ENABLE ROW LEVEL SECURITY;

-- デフォルトで拒否 - ポリシーを作成する必要がある
CREATE POLICY "Users can view own profile"
  ON public.profiles
  FOR SELECT
  USING (auth.uid() = id);

一般的な RLS ポリシー

-- 公開読み取り
CREATE POLICY "Public read access"
  ON public.posts FOR SELECT
  USING (true);

-- 認証済みユーザーのみ
CREATE POLICY "Authenticated users can insert"
  ON public.posts FOR INSERT
  WITH CHECK (auth.role() = 'authenticated');

-- オーナーアクセス
CREATE POLICY "Users can update own records"
  ON public.posts FOR UPDATE
  USING (auth.uid() = user_id);

-- 管理者アクセス (カスタムクレームを使用)
CREATE POLICY "Admins have full access"
  ON public.posts FOR ALL
  USING (auth.jwt() ->> 'role' = 'admin');

auth.users にリンク

-- 認証にリンクされたプロフィールテーブル
CREATE TABLE public.profiles (
  id UUID PRIMARY KEY REFERENCES auth.users(id) ON DELETE CASCADE,
  username TEXT UNIQUE NOT NULL,
  avatar_url TEXT,
  created_at TIMESTAMPTZ DEFAULT NOW()
);

-- サインアップ時に自動プロフィール作成
CREATE OR REPLACE FUNCTION public.handle_new_user()
RETURNS TRIGGER AS $$
BEGIN
  INSERT INTO public.profiles (id, username)
  VALUES (NEW.id, NEW.email);
  RETURN NEW;
END;
$$ LANGUAGE plpgsql SECURITY DEFINER;

CREATE TRIGGER on_auth_user_created
  AFTER INSERT ON auth.users
  FOR EACH ROW EXECUTE FUNCTION public.handle_new_user();

シードデータ

supabase/seed.sql

-- `supabase db reset` で実行される
-- べき等性のため ON CONFLICT を使用

INSERT INTO public.profiles (id, username, avatar_url)
VALUES
  ('d0e1f2a3-b4c5-6d7e-8f9a-0b1c2d3e4f5a', 'testuser', null),
  ('a1b2c3d4-e5f6-7a8b-9c0d-1e2f3a4b5c6d', 'admin', null)
ON CONFLICT (id) DO NOTHING;

環境変数

必須変数

# 公開 (クライアント側で安全)
SUPABASE_URL=https://xxxxx.supabase.co
SUPABASE_ANON_KEY=eyJ...

# プライベート (サーバー側のみ - 絶対に公開しない)
SUPABASE_SERVICE_ROLE_KEY=eyJ...
DATABASE_URL=postgresql://postgres.[ref]:[password]@aws-0-region.pooler.supabase.com:6543/postgres

ローカル vs 本番

# .env.local (ローカル開発)
SUPABASE_URL=http://localhost:54321
SUPABASE_ANON_KEY=<from supabase start>
DATABASE_URL=postgresql://postgres:postgres@localhost:54322/postgres

# .env.production (リモート)
SUPABASE_URL=https://xxxxx.supabase.co
SUPABASE_ANON_KEY=<from dashboard>
DATABASE_URL=<connection pooler URL>

コネクションプーリング

# トランザクションモード (サーバーレスに推奨)
# URL に ?pgbouncer=true を追加
DATABASE_URL=postgresql://...@pooler.supabase.com:6543/postgres?pgbouncer=true

# セッションモード (マイグレーション、長いトランザクション向け)
DATABASE_URL=postgresql://...@pooler.supabase.com:5432/postgres

Edge Functions

関数を作成

supabase functions new hello-world

基本的な構造

// supabase/functions/hello-world/index.ts
import { serve } from 'https://deno.land/std@0.168.0/http/server.ts';

serve(async (req) => {
  const { name } = await req.json();

  return new Response(
    JSON.stringify({ message: `Hello ${name}!` }),
    { headers: { 'Content-Type': 'application/json' } }
  );
});

認証コンテキスト付き

import { serve } from 'https://deno.land/std@0.168.0/http/server.ts';
import { createClient } from 'https://esm.sh/@supabase/supabase-js@2';

serve(async (req) => {
  const supabase = createClient(
    Deno.env.get('SUPABASE_URL') ?? '',
    Deno.env.get('SUPABASE_ANON_KEY') ?? '',
    {
      global: {
        headers: { Authorization: req.headers.get('Authorization')! },
      },
    }
  );

  const { data: { user } } = await supabase.auth.getUser();

  if (!user) {
    return new Response('Unauthorized', { status: 401 });
  }

  return new Response(JSON.stringify({ user_id: user.id }));
});

デプロイ

# ローカルで提供
supabase functions serve

# 単一関数をデプロイ
supabase functions deploy hello-world

# すべてをデプロイ
supabase functions deploy

Storage

バケットを作成 (マイグレーション内)

INSERT INTO storage.buckets (id, name, public)
VALUES ('avatars', 'avatars', true);

-- ストレージポリシー
CREATE POLICY "Avatar images are publicly accessible"
  ON storage.objects FOR SELECT
  USING (bucket_id = 'avatars');

CREATE POLICY "Users can upload own avatar"
  ON storage.objects FOR INSERT
  WITH CHECK (
    bucket_id = 'avatars' AND
    auth.uid()::text = (storage.foldername(name))[1]
  );

CLI クイックリファレンス

# ライフサイクル
supabase start                   # ローカルスタックを起動
supabase stop                    # ローカルスタックを停止
supabase status                  # ステータスと認証情報を表示

# データベース
supabase db reset                # リセット + マイグレーション + シード
supabase db push                 # リモートにプッシュ
supabase db pull                 # リモートスキーマを取得
supabase db diff -f <name>       # 差分からマイグレーションを生成
supabase db lint                 # 問題をチェック

# マイグレーション
supabase migration new <name>    # マイグレーションを作成
supabase migration list          # マイグレーション一覧
supabase migration up            # 未適用を適用 (リモート)

# 関数
supabase functions new <name>    # 関数を作成
supabase functions serve         # ローカル開発
supabase functions deploy        # すべてをデプロイ

# 型
supabase gen types typescript --local > types/database.ts

# プロジェクト
supabase link --project-ref <id> # リモートにリンク
supabase projects list           # プロジェクト一覧

CI/CD テンプレート

# .github/workflows/supabase.yml
name: Supabase CI/CD

on:
  push:
    branches: [main]
  pull_request:

env:
  SUPABASE_ACCESS_TOKEN: ${{ secrets.SUPABASE_ACCESS_TOKEN }}
  SUPABASE_DB_PASSWORD: ${{ secrets.SUPABASE_DB_PASSWORD }}
  SUPABASE_PROJECT_ID: ${{ secrets.SUPABASE_PROJECT_ID }}

jobs:
  test:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: supabase/setup-cli@v1

      - name: Start Supabase
        run: supabase start

      - name: Run migrations
        run: supabase db reset

      - name: Lint database
        run: supabase db lint

  deploy:
    needs: test
    if: github.ref == 'refs/heads/main'
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: supabase/setup-cli@v1

      - name: Link project
        run: supabase link --project-ref $SUPABASE_PROJECT_ID

      - name: Push migrations
        run: supabase db push

      - name: Deploy functions
        run: supabase functions deploy

アンチパターン

  • 本番環境への直接変更 - 常にマイグレーションを使用
  • RLS が無効 - ユーザーデータを扱うすべてのテーブルで有効化
  • クライアント内のサービスキー - サービスロールキーを絶対に公開しない
  • コネクションプーリングなし - サーバーレスではプーラーを使用
  • .env をコミット - .gitignore に追加
  • マイグレーション確認をスキップ - 常に生成された SQL をチェック
  • シードデータなし - 一貫性のあるローカル開発のため seed.sql を使用

ライセンス: MIT(寛容ライセンスのため全文を引用しています) · 原本リポジトリ

詳細情報

作者
alinaqi
リポジトリ
alinaqi/claude-bootstrap
ライセンス
MIT
最終更新
不明

Source: https://github.com/alinaqi/claude-bootstrap / ライセンス: MIT

関連スキル

汎用その他⭐ リポ 1,982

superfluid

Superfluidプロトコルおよびそのエコシステムに関するナレッジベースです。Superfluidについて情報を検索する際は、ウェブ検索の前にこちらを参照してください。対応キーワード:Superfluid、CFA、GDA、Super App、Super Token、stream、flow rate、real-time balance、pool(member/distributor)、IDA、sentinels、liquidation、TOGA、@sfpro/sdk、semantic money、yellowpaper、whitepaper

by LeoYeAI
汎用その他⭐ リポ 100

civ-finish-quotes

実質的なタスクが真に完了した際に、文明風の儀式的な引用句を追加します。ユーザーやエージェントが機能追加、リファクタリング、分析、設計ドキュメント、プロセス改善、レポート、執筆タスクといった実際の成果物を完成させるときに、明示的な依頼がなくても使用します。短い返信や小さな修正、未完成の作業には適用しません。

by huxiuhan
汎用その他⭐ リポ 1,110

nookplot

Base(Ethereum L2)上のAIエージェント向け分散型調整ネットワークです。エージェントがオンチェーンアイデンティティを登録する、コンテンツを公開する、他のエージェントにメッセージを送る、マーケットプレイスで専門家を雇う、バウンティを投稿・請求する、レピュテーションを構築する、共有プロジェクトで協業する、リサーチチャレンジを解くことでNOOKをマイニングする、キュレーションされたナレッジを備えたスタンドアロンオンチェーンエージェントをデプロイする、またはアグリーメントとリワードで収益を得る場合に利用できます。エージェントネットワーク、エージェント調整、分散型エージェント、NOOKトークン、マイニングチャレンジ、ナレッジバンドル、エージェントレピュテーション、エージェントマーケットプレイス、ERC-2771メタトランザクション、Prepare-Sign-Relay、AgentFactory、またはNookplotが言及された場合にトリガーされます。

by BankrBot
汎用その他⭐ リポ 59

web3-polymarket

Polygon上でのPolymarket予測市場取引統合です。認証機能(L1 EIP-712、L2 HMAC-SHA256、ビルダーヘッダー)、注文発注(GTC/GTD/FOK/FAK、バッチ、ポストオンリー、ハートビート)、市場データ(Gamma API、Data API、オーダーブック、サブグラフ)、WebSocketストリーミング(市場・ユーザー・スポーツチャネル)、CTF操作(分割、統合、償却、ネガティブリスク)、ブリッジ機能(入金、出金、マルチチェーン)、およびガスレスリレイトランザクションに対応しています。AIエージェント、自動マーケットメーカー、予測市場UI、またはPolygraph上のPolymarketと統合するアプリケーション構築時に活用できます。

by elophanto
汎用その他⭐ リポ 52

ethskills

Ethereum、EVM、またはブロックチェーン関連のリクエストに対応します。スマートコントラクト、dApps、ウォレット、DeFiプロトコルの構築、監査、デプロイ、インタラクションに適用されます。Solidityの開発、コントラクトアドレス、トークン規格(ERC-20、ERC-721、ERC-4626など)、Layer 2ネットワーク(Base、Arbitrum、Optimism、zkSync、Polygon)、Uniswap、Aave、Curveなどのプロトコルとの統合をカバーします。ガスコスト、コントラクトのデシマル設定、オラクルセキュリティ、リエントランシー、MEV、ブリッジング、ウォレット管理、オンチェーンデータの取得、本番環境へのデプロイ、プロトコル進化(EIPライフサイクル、フォーク追跡、今後の変更予定)といったトピックを含みます。

by jiayaoqijia
汎用その他⭐ リポ 44

xxyy-trade

このスキルは、ユーザーが「トークン購入」「トークン売却」「トークンスワップ」「暗号資産取引」「取引ステータス確認」「トランザクション照会」「トークンスキャン」「フィード」「チェーン監視」「トークン照会」「トークン詳細」「トークン安全性確認」「ウォレット一覧表示」「マイウォレット」「AIスキャン」「自動スキャン」「ツイートスキャン」「オンボーディング」「IP確認」「IPホワイトリスト」「トークン発行」「自動売却」「損切り」「利益確定」「トレーリングストップ」「保有者」「トップホルダー」「KOLホルダー」などをリクエストした場合、またはSolana/ETH/BSC/BaseチェーンでXXYYを経由した取引について言及した場合に使用します。XXYY Open APIを通じてオンチェーン取引とデータ照会を実現します。

by Jimmy-Holiday
本サイトは GitHub 上で公開されているオープンソースの SKILL.md ファイルをクロール・インデックス化したものです。 各スキルの著作権は原作者に帰属します。掲載に問題がある場合は info@alsel.co.jp または /takedown フォームよりご連絡ください。
原作者: alinaqi · alinaqi/claude-bootstrap · ライセンス: MIT