カテゴリ: Django 更新日: 2026/04/01

Djangoマイグレーションをロールバックする方法まとめ|初心者でも失敗しないDB戻し方

Djangoマイグレーションをロールバックする方法まとめ
Djangoマイグレーションをロールバックする方法まとめ

先生と生徒の会話形式で理解しよう

生徒

「Djangoでマイグレーションを実行したら、データベースが壊れた気がします。元に戻す方法はありますか?」

先生

「あります。Djangoではマイグレーションのロールバックという仕組みを使って、過去の状態に戻すことができます。」

生徒

「ロールバックって難しそうですが、パソコン初心者でもできますか?」

先生

「コマンドをそのまま打つだけなので大丈夫です。順番に見ていきましょう。」

1. Djangoマイグレーションとは何か

1. Djangoマイグレーションとは何か
1. Djangoマイグレーションとは何か

Djangoのマイグレーションとは、モデルの変更内容をデータベースに反映する仕組みです。モデルとは、データベースの設計図のようなものです。例えば、ノートに新しい項目を追加したら、実際のノートも書き直しますよね。その書き直し作業がマイグレーションです。

マイグレーションを行うことで、Pythonで書いたモデル定義と、実際のデータベースの構造が一致します。

2. ロールバックとは何をする操作か

2. ロールバックとは何をする操作か
2. ロールバックとは何をする操作か

ロールバックとは、マイグレーションを過去の状態に戻す操作です。間違って列を追加したり、不要なテーブルを作ってしまった場合でも、時間を巻き戻すように元の状態へ戻せます。

「やり直しボタン」だと思うとイメージしやすいです。Djangoでは、この操作が安全にできるよう設計されています。

3. 現在のマイグレーション状態を確認する方法

3. 現在のマイグレーション状態を確認する方法
3. 現在のマイグレーション状態を確認する方法

ロールバックする前に、今どこまでマイグレーションされているかを確認します。これは現在地を確認する作業です。


python manage.py showmigrations

このコマンドを実行すると、アプリごとにマイグレーション一覧が表示されます。チェックが付いているものが、すでに適用済みです。

4. 直前のマイグレーションをロールバックする方法

4. 直前のマイグレーションをロールバックする方法
4. 直前のマイグレーションをロールバックする方法

一つ前の状態に戻したい場合は、マイグレーション番号を指定します。番号はファイル名の先頭に書かれています。


python manage.py migrate blog 0002

これはblogアプリを0002の状態に戻す例です。指定した番号より後のマイグレーションは取り消されます。

5. すべてのマイグレーションを取り消す方法

5. すべてのマイグレーションを取り消す方法
5. すべてのマイグレーションを取り消す方法

アプリを最初の状態、つまり何もマイグレーションしていない状態に戻したい場合もあります。その場合は「zero」を指定します。


python manage.py migrate blog zero

これは、データベース上のテーブルをすべて削除する操作になるため、開発中のみ使うようにしましょう。

6. migrateとmakemigrationsの違いを理解する

6. migrateとmakemigrationsの違いを理解する
6. migrateとmakemigrationsの違いを理解する

初心者が混乱しやすいのが、makemigrationsmigrateの違いです。makemigrationsは設計図を作るだけ、migrateは実際にデータベースを変更します。


python manage.py makemigrations
python manage.py migrate

ロールバックはmigrateコマンドで行うため、設計図を消す操作ではありません。

7. ロールバック時によくあるエラーと対処法

7. ロールバック時によくあるエラーと対処法
7. ロールバック時によくあるエラーと対処法

ロールバック中に「依存関係エラー」が出ることがあります。これは、他のアプリが関係している場合に起こります。

その場合は、関連するアプリも一緒に戻すか、順番を整理して実行します。焦らず、showmigrationsで状態を確認することが大切です。

8. ロールバックが必要になる典型的な場面

8. ロールバックが必要になる典型的な場面
8. ロールバックが必要になる典型的な場面

カラム名のスペルミス、型の指定ミス、不要なフィールド追加などは、初心者がよくやってしまう例です。こうしたときにロールバックを使えば、データベースを作り直さずに修正できます。

Djangoのマイグレーション機能を理解しておくと、安心してモデル設計ができます。

まとめ

まとめ
まとめ

ここまで、Djangoのマイグレーションとロールバックについて、初心者の方でも理解できるように順番に解説してきました。Djangoマイグレーションは、Pythonで定義したモデルとデータベースの構造を一致させるための重要な仕組みです。そしてロールバックは、間違った変更や不要な変更を安全に元の状態へ戻すための心強い機能です。

特に重要なのは、ロールバックは「データベースを壊す怖い操作」ではなく、「正しく使えば安心して戻せる仕組み」だという点です。現在のマイグレーション状態をshowmigrationsで確認し、migrateコマンドで戻したい番号を指定する。この流れを理解しておくだけで、Django開発の不安は大きく減ります。

また、makemigrationsとmigrateの役割の違いを正しく理解することも大切です。設計図を作る段階と、実際にデータベースへ反映する段階を分けて考えることで、ロールバック時にも混乱しにくくなります。Djangoのデータベース操作は、こうした段階的な考え方が基本になっています。

実務や個人開発では、モデルの変更ミスや設計のやり直しは必ず発生します。そのたびにデータベースを作り直すのではなく、マイグレーションのロールバックを活用することで、安全かつ効率的に開発を進めることができます。Django初心者の方こそ、この仕組みを早めに身につけておくと安心です。

ロールバック操作の流れをサンプルで再確認

最後に、Djangoマイグレーションのロールバック操作を一連の流れとして整理します。開発現場でもよく使われる基本パターンなので、ぜひ覚えておきましょう。


# 現在のマイグレーション状態を確認
python manage.py showmigrations

# blogアプリを0002の状態に戻す
python manage.py migrate blog 0002

# blogアプリを初期状態に戻す場合
python manage.py migrate blog zero

このように、Djangoのロールバックは特別な設定や難しい操作は必要ありません。コマンドの意味を理解して、落ち着いて実行することが大切です。

先生と生徒の振り返り会話

生徒

「最初はマイグレーションって失敗したら終わりだと思っていましたけど、ロールバックがあるなら安心ですね。」

先生

「そうですね。Djangoは失敗を前提にやり直せる仕組みが用意されています。ロールバックを知っているだけで、モデル変更への怖さが減ります。」

生徒

「showmigrationsで今の状態を確認してから戻す、という流れが特に大事だと感じました。」

先生

「その通りです。現在地を確認してから操作するのは、Djangoに限らずプログラミング全体で重要な考え方です。」

生徒

「makemigrationsとmigrateの違いも、やっと頭の中で整理できました。設計図と実作業なんですね。」

先生

「その理解ができれば十分です。あとは実際に何度かロールバックを試して、体で覚えていきましょう。」

カテゴリの一覧へ
新着記事
New1
Django
Djangoマイグレーションをロールバックする方法まとめ|初心者でも失敗しないDB戻し方
New2
Flask
PythonのFlaskでURLに言語コードを含める方法!多言語ルーティングの実装ガイド
New3
Python
Pythonの真偽値(bool型)とは?TrueとFalseの基本と使い方をわかりやすく解説
New4
Flask
FlaskのBlueprintとは?機能ごとに分割して管理する基本設計を学ぼう
人気記事
No.1
Java&Spring記事人気No1
Python
Pythonの文字列を1文字ずつ処理する方法!for文やlist化の活用例
No.2
Java&Spring記事人気No2
Python
Pythonの文字列から一部を抽出する方法!スライスを使った基本的な切り出し方
No.3
Java&Spring記事人気No3
Python
Pythonとは何か?初心者向けにできること・特徴・インストール手順までやさしく解説
No.4
Java&Spring記事人気No4
Python
Pythonの変数宣言と型ヒントの使い方!初心者向けに基礎をやさしく解説
No.5
Java&Spring記事人気No5
Python
Pythonのリストを分割する方法を完全ガイド!初心者でもわかるスライス・split・itertoolsの使い方
No.6
Java&Spring記事人気No6
Python
Pythonの真偽値(bool型)とは?TrueとFalseの基本と使い方をわかりやすく解説
No.7
Java&Spring記事人気No7
Python
Pythonのインストール方法まとめ!Windows・Mac・Linux別にステップ解説
No.8
Java&Spring記事人気No8
Python
Pythonで現在の日付・時刻を取得する方法(datetime.now() / today())