はじめに
本記事では、Alembicのテンプレートファイルである migrations/script.py.mako
の役割と内容について解説します。
個人の備忘録程度の走り書きとなっておりますが、温かい目で見守っていただければ幸いです。
AlembicはSQLAlchemyのマイグレーションツールであり、このファイルはマイグレーションスクリプトの生成において重要な役割を果たします。
書こうと思ったきっかけ
受講しているITスクールのハッカソンに参加しており、バックエンド担当の方がAlembicでマイグレーションを行っているのを見て、自分自身もテンプレートの仕組みを理解しておくべきだと感じ、備忘録としてまとめました。
migrations/script.py.mako とは?
migrations/script.py.mako
は、Alembicでマイグレーションスクリプトを自動生成する際に使用されるテンプレートファイルです。
参考文献
役割
このファイルは、alembic revision --autogenerate
などのコマンドを実行したときに、マイグレーションスクリプトの雛形として利用されます。
特徴
- Makoテンプレート形式(.mako) を使用
- Alembicの
env.py
経由で呼び出される - 自動生成される
versions/*.py
のスクリプト構成を定義
テンプレートの例
"""${message}
Revision ID: ${up_revision}
Revises: ${down_revision | comma,n}
Create Date: ${create_date}
"""
from alembic import op
import sqlalchemy as sa
def upgrade():
${upgrades if upgrades else "pass"}
def downgrade():
${downgrades if downgrades else "pass"}
このテンプレートから、以下のようなマイグレーションスクリプトが生成されます:
"""add users table
Revision ID: abc123
Revises: None
Create Date: 2025-04-16 10:00:00.000000
"""
from alembic import op
import sqlalchemy as sa
def upgrade():
op.create_table(
'users',
sa.Column('id', sa.Integer, primary_key=True),
sa.Column('name', sa.String(50))
)
def downgrade():
op.drop_table('users')
まとめ
migrations/script.py.mako
はAlembicにおけるマイグレーションファイルのテンプレートであり、プロジェクトに応じてカスタマイズも可能です。
テンプレートの構造を理解しておくことで、マイグレーションの自動生成をより柔軟にコントロールできるようになります!