Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Alembicを使ってDBのマイグレーションをやってみた / Toranomon Tech H...
Search
TOPPAN ict
February 06, 2026
Technology
44
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Alembicを使ってDBのマイグレーションをやってみた / Toranomon Tech Hub 第6回 新春!初心者だらけのLT大会!登壇資料
TOPPAN ict
February 06, 2026
More Decks by TOPPAN ict
See All by TOPPAN ict
新人はどこまで自力でやり、どこからAIに頼るべきか/エンジニア育成に向き合う_先輩たちの悩みと知見共有会
toppan_digital_dev
0
190
PlaywrightのE2Eテストコードを1人で書くのを辞めた話/NCDC_フロントエンドAI活用LT会
toppan_digital_dev
0
24
GitHub Actions超入門-CICDはじめの一歩 / 【増枠】社外発表したことない人がチャレンジしたことを発表するLT大会
toppan_digital_dev
0
15
S3を固定IPで公開した話 ―ALBのHost Header Rewriteを添えて― / JAWS-UG初心者支部#78 NW再入門!NW-JAWSコラボLT回
toppan_digital_dev
0
160
Other Decks in Technology
See All in Technology
The Django UUID Story - DjangoCon US 2026
pauloxnet
0
350
Bet AI Day 2026丨バクラク Autopilot、業務システムの再設計
layerx
PRO
1
360
マイナンバーカード本人確認の実装比較(OAuth/OIDC Numa (Immersion) Workshop 2026) / 20260825 numa-12
oidfj
PRO
0
420
AIレビュー時代に必要なのは、SLOで引く撤退ライン
nobuoooo
0
160
ブラウザで変わるID連携(OAuth/OIDC Numa (Immersion) Workshop 2026)
oidfj
PRO
0
430
Bet AI Day 2026丨Agentは、「金融」という巨大産業の何を変えられるのか
layerx
PRO
0
220
Sony-DroidKaigi2026
sony
0
160
OAuth SPIFFE Client Authentication(OAuth/OIDC Numa (Immersion) Workshop 2026)
oidfj
PRO
0
410
When Token Pruning is Worse than Random: Understanding Visual Token Information in VLLMs
sansantech
PRO
0
210
Data Hubグループ 紹介資料
sansan33
PRO
0
3.2k
『自分で判断できるか』を基準に、プロダクトのハンズオン研修でAI利用の線を引いてみた / Where We Drew the Line on AI in Hands-on Training
honyanya
1
620
Bill One 開発エンジニア 紹介資料
sansan33
PRO
7
20k
Featured
See All Featured
Design and Strategy: How to Deal with People Who Don’t "Get" Design
morganepeng
133
19k
How to make the Groovebox
asonas
2
2.4k
Designing Powerful Visuals for Engaging Learning
tmiket
1
520
Visualization
eitanlees
152
17k
Design in an AI World
tapps
1
290
Practical Orchestrator
shlominoach
191
12k
How to Think Like a Performance Engineer
csswizardry
28
2.8k
Measuring & Analyzing Core Web Vitals
bluesmoon
9
990
Navigating Team Friction
lara
192
16k
Utilizing Notion as your number one productivity tool
mfonobong
4
560
End of SEO as We Know It (SMX Advanced Version)
ipullrank
3
4.4k
Performance Is Good for Brains [We Love Speed 2024]
tammyeverts
12
1.8k
Transcript
Alembicを使って DBのマイグレーションをやってみた 2026年1月20日 ICT開発センター 井口 雅士 Toranomon Tech Hub 第6回
新春!初心者だらけのLT大会!
©TOPPAN Digital Inc. 2 自己紹介 名前:井口 雅士 所属:TOPPANデジタル株式会社 ICT開発センター 役割:システム開発
(インフラ / バックエンド開発) 好きなAWSサービス:ECS
©TOPPAN Digital Inc. 3 開発 複数インフラ環境の管理どうされてますか
©TOPPAN Digital Inc. 4 開発 dev(開発) stg(検証) prod(本番) よくあるプロジェクトの開発環境
©TOPPAN Digital Inc. 5 開発 dev(開発) stg(検証) prod(本番) Terraform 弊社では、terraformを使ってコード管理しています
©TOPPAN Digital Inc. 6 dev(開発) stg(検証) prod(本番) 開発 DBを立てたときに中身も統一したい ・テーブル定義
・スキーマ定義 ・カラム名
©TOPPAN Digital Inc. 7 dev(開発) stg(検証) prod(本番) 開発 DBの中身をどうやって 管理するか。。
⇒ Alembicを使ってDBの管理をできるようにしよう
©TOPPAN Digital Inc. 8 開発 本日のテーマ: Alembic
©TOPPAN Digital Inc. 9 Alembicとは Pythonで使われているデータベース マイグレーションツール ・スキーマ管理の自動化 ・SQLArchemyとの連携 ・バージョン管理
©TOPPAN Digital Inc. 10 Alembicとは(やってみた) ・インストール pip install alembic sqlalchemy
alembic init migrations ・初期実行コマンド → バージョン管理用のファイルや 設定値を書きこむファイルが生成される → 変更を適用するDBのURLを記載する ・接続先の変更
©TOPPAN Digital Inc. 11 Alembicとは(やってみた) ・バージョンファイルの作成 alembic revision -m “<任意の識別名>"
→ バージョン管理用のファイル生成される 変更内容のSQLを書きこんで管理する
©TOPPAN Digital Inc. 12 Alembicとは(やってみた) ・DBへの適用 alembic upgrade head :最新バージョンに更新
or alembic upgrade <バージョン番号> :特定バージョンに更新 これで更新できるのですが。。。
©TOPPAN Digital Inc. 13 Alembicとは(やってみた) ・バージョンファイルの作成 alembic revision -m “<任意の識別名>"
→ バージョン管理用のファイル生成される 変更内容のSQLを書きこんで管理する 自分で一つ一つ打ち込んで 作っていくと たいへん手間がかかる
©TOPPAN Digital Inc. 14 Alembicとは Pythonで使われているデータベース マイグレーションツール ・スキーマ管理の自動化 ・SQLArchemyとの連携(SQLModelとの連携) ・バージョン管理
©TOPPAN Digital Inc. 15 開発 本日のテーマ: Alembic + SQLModel
©TOPPAN Digital Inc. 16 Alembic + SQLModel SQLModelと組み合わせる → Modelファイルで管理する
Modelファイル: DBの設計書の ようなイメージ DBに定義したい「テーブル」や「カラム」、 「スキーマ」をpythonクラスとして記載していく
©TOPPAN Digital Inc. 17 Alembic + SQLModel DB DB モデルファイルの定義と過去のバージョンファイル(DBの状態)を見比べて
まだ未反映の項目を作成できるバージョンファイルを自動生成してくれる models.py alembic 過去バージョン ファイル models.py alembic 新バージョン 過去バージョン ファイル
©TOPPAN Digital Inc. 18 Alembic + SQLModel(やってみた) ◆実行環境 ◆インフラ環境 Github
codespaces AWS codespaces EC2 (踏み台サーバー) RDS AWS Cloud ※AWS環境にあるDBにアクセスするため踏み台サーバーを使った構成
©TOPPAN Digital Inc. 19 ◆環境構築 ・alembicのインストール pip install sqlmodel alembic
alembic init migrations ・初期実行コマンド ・モデルファイルの作成 models.py → 作りたいテーブル、カラム、スキーマを定義したファイルを作成 Alembic + SQLModel(やってみた)
©TOPPAN Digital Inc. 20 ◆環境構築 ・DB接続設定 env.py → 上記で整理したアクセス情報を使ったアクセス設定を行う 2つのファイルを編集
config.py → DBへのアクセス情報を整理するファイル Alembic + SQLModel(やってみた)
©TOPPAN Digital Inc. 21 ◆環境構築 config.py 環境変数取得 DBアクセス URLの成型 シークレット
(DB PW)取得 Alembic + SQLModel(やってみた)
©TOPPAN Digital Inc. 22 ◆環境構築 env.py 作ったconfig ファイルを インポート 成型したDB
URLに差し替え 差し替え版を 設定 Alembic + SQLModel(やってみた)
©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(やってみた)
©TOPPAN Digital Inc. 24 ◆実行 踏み台サーバーとの接続 DBと実行環境がつながる プロファイル インスタンスID インスタンスID
インスタンスID インスタンスID セッション マネージャーコマンド Alembic + SQLModel(やってみた)
©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(やってみた)
©TOPPAN Digital Inc. 26 ◆実行 alembicの実行 別ターミナルで実行する インスタンスID インスタンスID 環境変数登録
alembic実行 Alembic + SQLModel(やってみた)
©TOPPAN Digital Inc. 27 ◆実行 バージョンファイルの出力 DBとの差分を補うコードが自動記述される テーブル名 カラム名 カラム名
このバージョンまで上げたときに 実行される このバージョンから下げたときに 実行される Alembic + SQLModel(やってみた)
©TOPPAN Digital Inc. 28 ◆実行 DBに変更を適用する alembic upgrade head or
alembic upgrade <バージョン番号> 【おまけ】DBを戻したい alembic downgrade -1 :一つ前のバージョンに戻る or alembic downgrade <バージョン番号> :特定バージョンに戻る Alembic + SQLModel(やってみた)
©TOPPAN Digital Inc. 29 ◆環境切り換え 踏み台サーバーとの接続 プロファイルとインスタンスIDを別環境の値に変更する プロファイル インスタンスID インスタンスID
インスタンスID インスタンスID セッション マネージャーコマンド alembicの実行 別ターミナルで、別環境に応じた環境変数を入力する。その後、上げたいバージョンも しくは最新バージョンを適用する インスタンスID インスタンスID 環境変数登録 alembic実行 踏み台サーバーや環境変数を変えて同じ作業をすればOK Alembic + SQLModel(やってみた)
©TOPPAN Digital Inc. 30 まとめ ◆よかった点 ・バージョンファイルとしてDBに何が作られているのか残る → どの時点で何が作られているのかファイルを見れば把握できる ・DBへの変更がスムーズ(アップグレード/ダウングレード)
→ コマンド一つで変更スクリプトを生成 → コマンド一つでDBに即反映 ・DBの構造管理が、Modelファイル1つで全て完結する → Modelファイルの更新だけで、DBの更新を制御できる ・複数の環境があっても一つのバージョンファイルで統一できる → 環境ごとに管理する必要が無い ・フロントやバックエンドとModelファイルを共有できる → APIの入出力スキーマなどに使え、DB定義との乖離を防げる 【管理面】 【開発面】
©TOPPAN Digital Inc. 31 まとめ ◆気になる点 自動生成の安全性 ・機械的にテーブル生成、削除を管理するので確認した方が良い → 名称変更などでテーブルの削除/追加が起こると中身が消えてしまうことも
・全て反映されるわけではない → インデックスの変更、プライマリキーの変更等は反映されないことも
©TOPPAN Digital Inc. 32 まとめ 今回は、 「Alembic」を使って 複数環境のDBを管理してみました 一つのソース(Modelファイル)の更新だけで 全環境の管理ができるのはとても実用的と感じております。
一方で、実際に運用してみて、 DB更新の抜けもれが気になったので、 もっと最適化できる方法があれば ご意見伺いたいなと思っています!!
None