はじめに
Alembicは、SQLAlchemyを使用するPythonプロジェクトでデータベースのスキーマをバージョン管理するためのマイグレーションツールです。その設定の中心となるファイルの一つが migrations/env.py
です。
個人の備忘録程度の走り書きとなっておりますが、温かい目で見守っていただければ幸いです。
このファイルは、マイグレーションの実行時に使われる環境や処理を定義しており、Alembicがどのようにデータベースと接続し、どのテーブル情報を参照するかを決定します。
書こうと思ったきっかけ
受講しているITスクールのハッカソンに参加している中で、バックエンド担当の方がこの env.py
の処理を書いているのを見て、自分でも理解を深めたいと感じました。
今後の学習や実務にも活かせるよう、備忘録としてまとめました。
参考文献
migrations/env.py
の内容とその役割
1. 基本設定と環境変数の読み込み
load_dotenv()
database_url = os.getenv("DATABASE_URL")
-
.env
ファイルからDATABASE_URL
を読み込み、Alembicの設定にセットします。 - URLが見つからない場合はエラーを出します。
2. ログ設定
if config.config_file_name is not None:
fileConfig(config.config_file_name)
-
alembic.ini
ファイルからロギング設定を読み込み、マイグレーション時のログ出力を整えます。
3. モデルのメタデータ設定
sys.path.append(str(Path(__file__).parent.parent))
from app.models import Base
target_metadata = Base.metadata
- SQLAlchemyモデルの定義を読み込み、
Base.metadata
をtarget_metadata
にセット。 - これにより
alembic revision --autogenerate
が有効になります。
4. マイグレーションの実行モードを定義
オフラインモード
def run_migrations_offline():
- データベースに接続せず、SQL文をスクリプトとして出力します。
- CI環境やレビュー目的で使用されます。
オンラインモード
def run_migrations_online():
- データベースに実際に接続し、マイグレーションを適用します。
- 開発環境や本番環境での適用時に使います。
5. 実行モードの判定と呼び出し
if context.is_offline_mode():
run_migrations_offline()
else:
run_migrations_online()
- 実行モードに応じて、適切なマイグレーション処理を選択します。
まとめ
migrations/env.py
はAlembicのマイグレーションの土台となる重要なファイルで、環境変数の読み込み、メタデータの指定、実行モードの選択など、マイグレーション処理の基本的な流れを制御しています。
このファイルの内容を理解することで、Alembicの動作に対するカスタマイズやトラブル対応がしやすくなり、より柔軟なスキーマ管理が可能になるかと思います!