
背景
実装初期、モデルの実装の調整は多く発生します。今行っているプロジェクトも業務内容が複雑で、なかなか細部まで理解するのが難しい状態です。
そう言った場合、テーブルの追加削除、カラムの追加削除、リレーションの設定等、たくさんの変更が入ります。
そういった作業をスムーズに行うために、モデルの修正->ロールバック->マイグレーションファイルへの適用->マイグレーション実行->データベース確認、の流れをまとめて記述しておきたいと思います。
ロールバック
すでにテーブルなど作成済の場合は、モデルの変更をマイグレーションファイルに適用する前にロールバックを行い、テーブルを削除しておきます。
1 | $ docker-compose rum --rm web python manage.py migrate example_app zero |
これでテーブルは全て削除されました。
マイグレーションファイルへの適用
モデルを修正した後は、マイグレーションファイルへその変更を反映する必要があります。
しかし、マイグレーションファイルがある状態でマイグレーションファイルを作成しようとすると、新しいマイグレーションファイルができてしまいます。
運用フェーズに入っている場合はそれが正しいと思うのですが、初期のモデル調整で複数のマイグレーションファイルを作成したくないので、一旦マイグレーションファイルを削除します。
1 | $ rm example_app/migrations/0001_initial.py |
次にマイグレーション作成コマンドを実行します。
1 | $ docker-compose run --rm web python manage.py makemigrations example_app |
これで再度example_app/migrations/0001_initial.pyが作成されました。
マイグレーションの実行
マイグレーションファイルを作成したので、マイグレーションを実行します。
1 | $ docker-compose run --rm web python manage.py migrate example_app |
マイグレーションが完了しました。
テーブルの確認
マイグレーションによりテーブルを作成したら、dhshellコマンドでモデルを変更した箇所が正しくテーブルに反映されているか確認します。
1 | $ docker-compose run --rm web python manage.py dbshell |
show create tableコマンドなどでテーブルを確認します。
修正したファイルのコミット(Git)
テーブルを確認し問題なければ修正したファイルをコミットします。モデルの修正点がわかりやすいようコミットコメントを記述します。
以上でモデルの修正が完了となります。
まとめ
アプリケーション開発初期はモデルの修正が頻繁に行われます。最初から完全なモデルを実装するのは難しいですからね。
修正・変更のログを取得しなくてもよい初期のモデル、テーブル構成はまっさらにしてから再作成するのがよいと思います。そうしないとマイグレーションファイルがどんどん増えて、煩雑になってしまいます。