migration-helper
Assists in creating database migrations for Sagebase using Alembic. Activates when creating migration files, modifying database schema, or adding tables/columns/indexes. Ensures proper migration structure, rollback support, and Alembic best practices.
Installation
Follow the repository instructions for this skill and your agent. Review the files and dependencies before adding it to your workflow.
View source ↗GuidesSkill instructions
Migration Helper (Alembic)
Purpose
Alembicを使用したデータベースマイグレーションの作成を支援します。
When to Activate
このスキルは以下の場合に自動的にアクティベートされます:
- 新しいマイグレーションファイルを作成する時
- データベーススキーマを変更する時
- テーブル、カラム、インデックス、制約を追加する時
- ユーザーが「migration」「schema」「database change」「マイグレーション」と言及した時
- ロールバックやマイグレーション履歴について質問された時
🚀 Quick Start
新しいマイグレーションを作成
# Docker環境内で作成(推奨)
just migrate-new "add_email_to_politicians"
# または直接Alembicコマンド
docker compose exec sagebase uv run alembic revision -m "add_email_to_politicians"
マイグレーションを実行
# 未適用のマイグレーションを全て適用
just migrate
# 1つ前に戻す
just migrate-rollback
⚠️ CRITICAL: 必須チェックリスト
マイグレーション作成時に必ず確認:
- upgrade() 実装: スキーマ変更のSQLを記述
- downgrade() 実装: ロールバック用のSQLを記述(必須!)
- 冪等性確保:
IF NOT EXISTS/IF EXISTSを使用 - テスト:
just migrateで適用確認 - ロールバックテスト:
just migrate-rollbackで戻せることを確認
コマンドリファレンス
justfile コマンド
| コマンド | 説明 |
|---|---|
just migrate |
未適用マイグレーションを全て適用 |
just migrate-rollback |
1つ前の状態に戻す |
just migrate-current |
現在適用されているバージョンを表示 |
just migrate-history |
マイグレーション履歴を表示 |
just migrate-new "説明" |
新しいマイグレーションファイルを作成 |
just migrate-legacy |
レガシーSQL方式で実行(互換性用) |
sagebase CLI コマンド
sagebase migrate # マイグレーション実行
sagebase migrate-rollback # ロールバック(-n オプションで複数可)
sagebase migrate-status # 現在のバージョン確認
sagebase migrate-history # 履歴確認
sagebase migrate-new "説明" # 新規作成
直接 Alembic コマンド
# Docker内で実行
docker compose exec sagebase uv run alembic upgrade head
docker compose exec sagebase uv run alembic downgrade -1
docker compose exec sagebase uv run alembic current
docker compose exec sagebase uv run alembic history --verbose
docker compose exec sagebase uv run alembic revision -m "説明"
マイグレーションファイル構造
"""Add email column to politicians table.
Revision ID: 003
Revises: 002
Create Date: 2025-01-20
"""
from alembic import op
revision = "003"
down_revision = "002"
branch_labels = None
depends_on = None
def upgrade() -> None:
"""Apply migration: Add email column."""
op.execute("""
ALTER TABLE politicians
ADD COLUMN IF NOT EXISTS email VARCHAR(255);
COMMENT ON COLUMN politicians.email IS 'Politician email address';
CREATE INDEX IF NOT EXISTS idx_politicians_email
ON politicians(email);
""")
def downgrade() -> None:
"""Rollback migration: Remove email column."""
op.execute("""
DROP INDEX IF EXISTS idx_politicians_email;
ALTER TABLE politicians
DROP COLUMN IF EXISTS email;
""")
基本パターン
カラム追加
def upgrade() -> None:
op.execute("""
ALTER TABLE table_name
ADD COLUMN IF NOT EXISTS column_name VARCHAR(255);
""")
def downgrade() -> None:
op.execute("""
ALTER TABLE table_name
DROP COLUMN IF EXISTS column_name;
""")
テーブル作成
def upgrade() -> None:
op.execute("""
CREATE TABLE IF NOT EXISTS new_table (
id SERIAL PRIMARY KEY,
name VARCHAR(255) NOT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
""")
def downgrade() -> None:
op.execute("""
DROP TABLE IF EXISTS new_table;
""")
インデックス追加
def upgrade() -> None:
op.execute("""
CREATE INDEX IF NOT EXISTS idx_table_column
ON table_name(column_name);
""")
def downgrade() -> None:
op.execute("""
DROP INDEX IF EXISTS idx_table_column;
""")
詳細リファレンス
- examples.md - 実践的なマイグレーション例
- reference.md - 詳細なパターンとベストプラクティス
レガシーマイグレーションについて
既存の database/migrations/ 配下の45個のSQLファイルは履歴として保持されています。
新規マイグレーションは必ずAlembicを使用してください。
just migrate-legacy は互換性のために残されていますが、通常は使用しません。
Examples
Read the usage examples in the source repository.
View source ↗Source history
- Indexed on
- 2026-01-20
- Index updated
- 2026-01-26
- Branch
- main
Index and sync dates describe this directory. View the source repository for code history.
GitHub ↗chat Comments (0)
Sign in to join the discussion and leave a comment.
No comments yet. Be the first to share your thoughts!