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
170
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
AIレビュー時代に必要なのは、SLOで引く撤退ライン
nobuoooo
0
160
[2026-08-25]AIによる自動化と人の介入、その狭間で揺れる信頼性についての俺の思いを、波よ聞いてくれ
tosite
0
110
DMMブックスのNext.js化を加速させるAI活用 / Migrating DMM Books to Next.js with AI
kentarom
1
260
Bet AI Day 2026丨バクラク Autopilot、業務システムの再設計
layerx
PRO
1
320
Kiro5兄弟のいまどきのセキュリティ基礎知識
kentapapa
0
450
Level Up Your CDK DX: 5 Tools I’ve Been Building
gotok365
2
150
アクセスキー流出時の対応で再認識した攻撃側と防御側の非対称性について
kazzpapa3
1
490
KAEN Company Deck
kaen
PRO
0
120
研究開発部の紹介 / Sansan R&D Profile
sansan33
PRO
4
25k
指示待ちから変化に応じるClaude Codeへ!~環境からAgentへの帰り道を作る~
gotalab555
9
1.7k
OAuth SPIFFE Client Authentication(OAuth/OIDC Numa (Immersion) Workshop 2026)
oidfj
PRO
0
410
All About Sansan – for New Global Engineers
sansan33
PRO
1
1.5k
Featured
See All Featured
Scaling GitHub
holman
464
140k
Making Projects Easy
brettharned
120
6.7k
実際に使うSQLの書き方 徹底解説 / pgcon21j-tutorial
soudai
PRO
201
75k
Lessons Learnt from Crawling 1000+ Websites
charlesmeaden
PRO
1
1.6k
Fireside Chat
paigeccino
42
4k
KATA
mclloyd
PRO
35
15k
Code Review Best Practice
trishagee
74
20k
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
35
3.8k
The Invisible Side of Design
smashingmag
301
52k
Pawsitive SEO: Lessons from My Dog (and Many Mistakes) on Thriving as a Consultant in the Age of AI
davidcarrasco
0
230
Navigating Team Friction
lara
192
16k
The Web Performance Landscape in 2024 [PerfNow 2024]
tammyeverts
12
1.3k
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