Webアプリを並行開発する際のマイグレーション戦略
2021/10/15、PyCon JP 2021でトークしました。
https://2021.pycon.jp/time-table/?id=273396
スライド
https://www.slideshare.net/shimizukawa/migration-strategies-for-parallel-development-of-web-applications
https://scrapbox.io/files/616a5d2fb05e1c0024bb6f00.png
概要
エレベーターピッチ
Webアプリの開発中に起こる、マイグレーションの競合を避けるにはどうすればよいでしょうか?複数のブランチで同じテーブルのカラムを追加して使いたい場合や、DBスキーマの変更が競合する場合は、ブランチのマージ時に競合してしまい、解決に苦労することがあります。このトークでは、実際の開発現場で発生したいくつかの事例を元に、トラブルを避けるためのブランチ運用とリリース戦略について紹介します。
聴衆に求める前提知識
データベースマイグレーション, デプロイ, ブランチマージ
聴衆が持ち帰ることができるもの
DBスキーマ変更を先行リリースし、マイグレーションの競合を避け、安全に並行開発を進める方法
Description
Webアプリ開発とデータベースマイグレーションには密接な関係があり、Pythonでよく採用されるDjangoやSQLAlchemyには、DBのスキーマを変更するマイグレーション機能があります。一般的に、プログラムを実装するときはリポジトリでブランチを作りそれぞれのブランチで実装作業を進めます。Webアプリの開発でも同様ですが、各ブランチでDBスキーマを変更する場合には注意が必要です。例えば、複数のブランチで同じテーブルのカラムを追加して使いたい場合や、DBスキーマの変更が競合する場合は、ブランチのマージ時に競合してしまいます。多くの機能を並行開発したり、マージするまでの期間が長い場合には、このような競合が増えてしまいます。
このトークでは、Djangoを例に、データベースマイグレーションの仕組みから、実際の開発現場で発生したトラブルとその解決方法について紹介します。
アジェンダ
データベースマイグレーション機能の紹介
DBスキーマ変更が競合するシンプルな例
実際の開発現場で発生したトラブル事例
DBスキーマ変更の先行リリース
新旧DBスキーマの並行運用
関連
Djangoのマイグレーション戦略
Djangoのマイグレーションでスキーマ変更とデータ変更を分けたほうがリカバリが楽
towncrier