Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Alembicを使ってDBのマイグレーションをやってみた / Toranomon Tech H...

Avatar for TOPPAN ict TOPPAN ict
February 06, 2026

Alembicを使ってDBのマイグレーションをやってみた / Toranomon Tech Hub 第6回 新春!初心者だらけのLT大会!登壇資料

Avatar for TOPPAN ict

TOPPAN ict

February 06, 2026

More Decks by TOPPAN ict

Other Decks in Technology

Transcript

  1. ©TOPPAN Digital Inc. 10 Alembicとは(やってみた) ・インストール pip install alembic sqlalchemy

    alembic init migrations ・初期実行コマンド → バージョン管理用のファイルや 設定値を書きこむファイルが生成される → 変更を適用するDBのURLを記載する ・接続先の変更
  2. ©TOPPAN Digital Inc. 11 Alembicとは(やってみた) ・バージョンファイルの作成 alembic revision -m “<任意の識別名>"

    → バージョン管理用のファイル生成される 変更内容のSQLを書きこんで管理する
  3. ©TOPPAN Digital Inc. 12 Alembicとは(やってみた) ・DBへの適用 alembic upgrade head :最新バージョンに更新

    or alembic upgrade <バージョン番号> :特定バージョンに更新 これで更新できるのですが。。。
  4. ©TOPPAN Digital Inc. 13 Alembicとは(やってみた) ・バージョンファイルの作成 alembic revision -m “<任意の識別名>"

    → バージョン管理用のファイル生成される 変更内容のSQLを書きこんで管理する 自分で一つ一つ打ち込んで 作っていくと たいへん手間がかかる
  5. ©TOPPAN Digital Inc. 16 Alembic + SQLModel SQLModelと組み合わせる → Modelファイルで管理する

    Modelファイル: DBの設計書の ようなイメージ DBに定義したい「テーブル」や「カラム」、 「スキーマ」をpythonクラスとして記載していく
  6. ©TOPPAN Digital Inc. 17 Alembic + SQLModel DB DB モデルファイルの定義と過去のバージョンファイル(DBの状態)を見比べて

    まだ未反映の項目を作成できるバージョンファイルを自動生成してくれる models.py alembic 過去バージョン ファイル models.py alembic 新バージョン 過去バージョン ファイル
  7. ©TOPPAN Digital Inc. 18 Alembic + SQLModel(やってみた) ◆実行環境 ◆インフラ環境 Github

    codespaces AWS codespaces EC2 (踏み台サーバー) RDS AWS Cloud ※AWS環境にあるDBにアクセスするため踏み台サーバーを使った構成
  8. ©TOPPAN Digital Inc. 19 ◆環境構築 ・alembicのインストール pip install sqlmodel alembic

    alembic init migrations ・初期実行コマンド ・モデルファイルの作成 models.py → 作りたいテーブル、カラム、スキーマを定義したファイルを作成 Alembic + SQLModel(やってみた)
  9. ©TOPPAN Digital Inc. 22 ◆環境構築 env.py 作ったconfig ファイルを インポート 成型したDB

    URLに差し替え 差し替え版を 設定 Alembic + SQLModel(やってみた)
  10. ©TOPPAN Digital Inc. 23 ◆実行 codespaces EC2 (踏み台サーバー) RDS AWS

    Cloud Codespacesと踏み台サーバーを接続する → セッションマネージャーを使う aws ssm start-session --profile <プロファイル>¥ --target <踏み台インスタンスID>¥ --document-name AWS-StartPortForwardingSessionToRemoteHost ¥ --parameters '{"host":[“<DBエンドポイント>"],"portNumber":["5432"], "localPortNumber":["15432"]}' → 実行環境(codespaces)の ”15432”というポートにアクセスする と踏み台を経由してDBにアクセスできる状態になる Alembic + SQLModel(やってみた)
  11. ©TOPPAN Digital Inc. 24 ◆実行 踏み台サーバーとの接続 DBと実行環境がつながる プロファイル インスタンスID インスタンスID

    インスタンスID インスタンスID セッション マネージャーコマンド Alembic + SQLModel(やってみた)
  12. ©TOPPAN Digital Inc. 25 ◆実行 実行環境に環境変数を登録する export PROFILE = <プロファイル>

    export DB_HOST= localhost export DB_PORT=15432 export DB_NAME=<DB名> export DB_USER=<ユーザー名> export DB_SECRETS_NAME=<シークレット名> セッションマネージャーで、実行環境の特定 ポートをDBとつないだので、環境変数 は”local”の特定ポートになるようにする バージョンファイルを作成する alembic revision --autogenerate -m “<任意の識別名>" Alembic + SQLModel(やってみた)
  13. ©TOPPAN Digital Inc. 27 ◆実行 バージョンファイルの出力 DBとの差分を補うコードが自動記述される テーブル名 カラム名 カラム名

    このバージョンまで上げたときに 実行される このバージョンから下げたときに 実行される Alembic + SQLModel(やってみた)
  14. ©TOPPAN Digital Inc. 28 ◆実行 DBに変更を適用する alembic upgrade head or

    alembic upgrade <バージョン番号> 【おまけ】DBを戻したい alembic downgrade -1 :一つ前のバージョンに戻る or alembic downgrade <バージョン番号> :特定バージョンに戻る Alembic + SQLModel(やってみた)
  15. ©TOPPAN Digital Inc. 29 ◆環境切り換え 踏み台サーバーとの接続 プロファイルとインスタンスIDを別環境の値に変更する プロファイル インスタンスID インスタンスID

    インスタンスID インスタンスID セッション マネージャーコマンド alembicの実行 別ターミナルで、別環境に応じた環境変数を入力する。その後、上げたいバージョンも しくは最新バージョンを適用する インスタンスID インスタンスID 環境変数登録 alembic実行 踏み台サーバーや環境変数を変えて同じ作業をすればOK Alembic + SQLModel(やってみた)
  16. ©TOPPAN Digital Inc. 30 まとめ ◆よかった点 ・バージョンファイルとしてDBに何が作られているのか残る → どの時点で何が作られているのかファイルを見れば把握できる ・DBへの変更がスムーズ(アップグレード/ダウングレード)

    → コマンド一つで変更スクリプトを生成 → コマンド一つでDBに即反映 ・DBの構造管理が、Modelファイル1つで全て完結する → Modelファイルの更新だけで、DBの更新を制御できる ・複数の環境があっても一つのバージョンファイルで統一できる → 環境ごとに管理する必要が無い ・フロントやバックエンドとModelファイルを共有できる → APIの入出力スキーマなどに使え、DB定義との乖離を防げる 【管理面】 【開発面】
  17. ©TOPPAN Digital Inc. 32 まとめ 今回は、 「Alembic」を使って 複数環境のDBを管理してみました 一つのソース(Modelファイル)の更新だけで 全環境の管理ができるのはとても実用的と感じております。

    一方で、実際に運用してみて、 DB更新の抜けもれが気になったので、 もっと最適化できる方法があれば ご意見伺いたいなと思っています!!