1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

個人的備忘録:Alembicのenv.pyがうまく言語化できなかったので、まとめてみました

Posted at

はじめに

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.metadatatarget_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の動作に対するカスタマイズやトラブル対応がしやすくなり、より柔軟なスキーマ管理が可能になるかと思います!

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?