mcpField
D
database

database

github.com/thelobbiデータ・データベース2146 回インストール2 日前に更新
リポジトリ

database について

Golden Armada AI Agent Fleet Platform のデータベース作業向けスキルです。PostgreSQL のスキーマ設計、SQL クエリ、マイグレーション、最適化に加え、SQLAlchemy ORM の例を扱います。

主な機能

  1. 01PostgreSQL スキーマ設計
  2. 02SQL クエリと結合
  3. 03マイグレーションとロールバック
  4. 04インデックスとクエリの最適化
  5. 05SQLAlchemy ORM の例
  6. 06データベースのベストプラクティス

活用シーン

  1. 01agents と tasks のスキーマ設計
  2. 02PostgreSQL クエリの作成と最適化
  3. 03マイグレーションの作成とロールバック
  4. 04遅いクエリとインデックス利用の調査

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/thelobbi/claude --skill database

インストール後、Claude Code で/databaseを入力して読み込まれたか確認します。

詳細

データベーススキル

Golden Armada AI Agent Fleet Platform の包括的なデータベース機能を提供します。

このスキルを使用するタイミング

次の作業を行う際に、このスキルを有効にします。

  • データベーススキーマの設計
  • SQL クエリの作成と最適化
  • データベースのマイグレーション
  • インデックスの最適化
  • データモデリング

PostgreSQL クイックリファレンス

接続
# 接続
psql -h localhost -U postgres -d golden_armada

# 接続文字列
postgresql://user:password@host:5432/database

# よく使う psql コマンド
\l                  # データベースの一覧表示
\c database_name    # データベースに接続
\dt                 # テーブルの一覧表示
\d table_name       # テーブルの詳細表示
\di                 # インデックスの一覧表示
\q                  # 終了
スキーマ設計
-- 一般的なパターンを使用してテーブルを作成
CREATE TABLE agents (
    id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
    name VARCHAR(100) NOT NULL,
    type VARCHAR(50) NOT NULL CHECK (type IN ('claude', 'gpt', 'gemini')),
    status VARCHAR(20) DEFAULT 'idle',
    config JSONB DEFAULT '{}',
    created_at TIMESTAMPTZ DEFAULT NOW(),
    updated_at TIMESTAMPTZ DEFAULT NOW(),
    deleted_at TIMESTAMPTZ  -- 論理削除
);

-- インデックスを作成
CREATE INDEX idx_agents_type ON agents(type);
CREATE INDEX idx_agents_status ON agents(status) WHERE deleted_at IS NULL;
CREATE INDEX idx_agents_config ON agents USING GIN(config);

-- 外部キーを追加
CREATE TABLE tasks (
    id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
    agent_id UUID NOT NULL REFERENCES agents(id) ON DELETE CASCADE,
    message TEXT NOT NULL,
    result TEXT,
    status VARCHAR(20) DEFAULT 'pending',
    created_at TIMESTAMPTZ DEFAULT NOW()
);
よく使うクエリ
-- 基本的な CRUD
INSERT INTO agents (name, type) VALUES ('agent-1', 'claude') RETURNING *;
SELECT * FROM agents WHERE type = 'claude' AND deleted_at IS NULL;
UPDATE agents SET status = 'active' WHERE id = $1 RETURNING *;
DELETE FROM agents WHERE id = $1;

-- 結合
SELECT a.name, COUNT(t.id) as task_count
FROM agents a
LEFT JOIN tasks t ON a.id = t.agent_id
WHERE a.deleted_at IS NULL
GROUP BY a.id;

-- JSON 操作
SELECT * FROM agents WHERE config->>'model' = 'claude-sonnet-5';
SELECT * FROM agents WHERE config @> '{"enabled": true}';
UPDATE agents SET config = config || '{"version": "2.0"}' WHERE id = $1;

-- ウィンドウ関数
SELECT
    name,
    created_at,
    ROW_NUMBER() OVER (ORDER BY created_at) as row_num,
    LAG(created_at) OVER (ORDER BY created_at) as prev_created
FROM agents;

-- CTE
WITH active_agents AS (
    SELECT * FROM agents WHERE status = 'active'
)
SELECT * FROM active_agents WHERE type = 'claude';
マイグレーション
-- マイグレーション: 001_create_agents.sql
BEGIN;

CREATE TABLE agents (
    id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
    name VARCHAR(100) NOT NULL,
    type VARCHAR(50) NOT NULL,
    created_at TIMESTAMPTZ DEFAULT NOW()
);

CREATE INDEX idx_agents_type ON agents(type);

COMMIT;

-- ロールバック: 001_create_agents.sql
BEGIN;
DROP TABLE IF EXISTS agents;
COMMIT;
パフォーマンスの最適化
-- クエリプランを分析
EXPLAIN ANALYZE SELECT * FROM agents WHERE type = 'claude';

-- インデックスの使用状況を確認
SELECT
    schemaname,
    tablename,
    indexname,
    idx_scan,
    idx_tup_read
FROM pg_stat_user_indexes;

-- 実行速度の遅いクエリを検索
SELECT
    query,
    calls,
    mean_time,
    total_time
FROM pg_stat_statements
ORDER BY mean_time DESC
LIMIT 10;

-- VACUUM と ANALYZE を実行
VACUUM ANALYZE agents;

SQLAlchemy ORM

```python from sqlalchemy import Column, String, DateTime, ForeignKey, JSON from sqlalchemy.dialects.postgresql import UUID from sqlalchemy.orm import relationship from sqlalchemy.sql import func import uuid

class Agent(Base): tablename = 'agents'

id = Column(UUID(as_uuid=True), primary_key=True, default=uuid.uuid4)
name = Column(String(100), nullable=False)
type = Column(String(50), nullable=False)
status = Column(String(20), default='idle')
config = Column(JSON, default={})
created_at = Column(DateTime(timezone=True), server_default=func.now())
updated_at = Column(DateTime(timezone=True), onupdate=func.now())

tasks = relationship("Task", back_populates="agent", cascade="all, delete-orphan")

class Task(Base): tablename = 'tasks'

id = Column(UUID(as_uuid=True), primary_key=True, default=uuid.uuid4)
agent_id = Column(UUID(as_uuid=True), ForeignKey('agents.id'), nullable=False)
message = Column(String, nullable=False)
result = Column(String)

agent = relationship("Agent", back_populates="tasks")

```

ベストプラクティス

  1. 分散システムでは主キーにUUIDを使用する
  2. 頻繁にクエリされるカラムにはインデックスを追加する
  3. 重要なデータにはソフトデリート(deleted_at)を使用する
  4. 柔軟なデータにはJSONBを使用し、GINインデックスを設定する
  5. データの整合性を保つために外部キー制約を使用する
  6. 監査のために作成日時と更新日時を記録する
  7. パフォーマンス向上のためにコネクションプーリングを使用する

コメント