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

Djangoマイグレーション入門|モデル変更をDBへ適用する仕組みを初心者向けに解説

Djangoマイグレーション入門|モデル変更をDBへ適用する仕組み
Djangoマイグレーション入門|モデル変更をDBへ適用する仕組み

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

生徒

「Djangoでモデルを変更したら、データベースも自動で変わるんですか?」

先生

「自動では変わりません。モデルの変更内容をデータベースに反映させるために、マイグレーションという作業が必要です。」

生徒

「マイグレーションって、難しそうな言葉ですね……。」

先生

「仕組みを知れば、引っ越し作業のようなものだと分かります。順番に見ていきましょう。」

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

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

Djangoマイグレーションとは、Djangoのモデルとデータベースの設計を一致させる仕組みです。モデルとは、データの設計図のようなもので、「名前」「年齢」「登録日」といった情報の形を決めます。

一方、データベースは実際にデータを保存する箱です。設計図だけ変えても、箱の中身は変わりません。その差を埋める作業がマイグレーションです。

初心者の方は「モデル=ノートに書いた設計」「データベース=引き出し」と考えると理解しやすくなります。

2. なぜマイグレーションが必要なのか

2. なぜマイグレーションが必要なのか
2. なぜマイグレーションが必要なのか

Djangoでアプリ開発をしていると、途中で「項目を増やしたい」「名前を変更したい」と思うことが必ずあります。このとき、モデルだけを変更すると、データベースと食い違いが起こります。

マイグレーションを行うことで、モデル変更を安全にデータベースへ反映できます。手作業でデータベースを触らなくてよい点が、Djangoの大きな特徴です。

3. モデルとデータベースの関係

3. モデルとデータベースの関係
3. モデルとデータベースの関係

DjangoではORMという仕組みを使っています。ORMとは「難しいデータベース操作をPythonで書ける仕組み」です。

モデルファイルはPythonで書きますが、裏側ではSQLというデータベース言語に変換されています。マイグレーションは、この変換内容を管理する役割を持っています。


from django.db import models

class User(models.Model):
    name = models.CharField(max_length=50)
    age = models.IntegerField()

このようなモデルを作ると、「名前」と「年齢」を保存できるデータベース構造が作られます。

4. makemigrationsの役割

4. makemigrationsの役割
4. makemigrationsの役割

makemigrationsは、モデルの変更点を記録するコマンドです。例えるなら、「設計変更メモ」を作る作業です。


python manage.py makemigrations

このコマンドを実行すると、「どこをどう変更したか」という情報がマイグレーションファイルとして保存されます。この時点では、まだデータベースは変更されていません。

5. migrateでDBへ反映する流れ

5. migrateでDBへ反映する流れ
5. migrateでDBへ反映する流れ

次に使うのがmigrateです。これは、作成されたマイグレーションファイルをもとに、データベースを実際に変更します。


python manage.py migrate

これで、モデルとデータベースの状態が一致します。Django初心者の方は、「makemigrations=準備」「migrate=実行」と覚えると混乱しません。

6. カラム追加の具体例

6. カラム追加の具体例
6. カラム追加の具体例

例えば、ユーザーに「メールアドレス」を追加したい場合、モデルを次のように変更します。


class User(models.Model):
    name = models.CharField(max_length=50)
    age = models.IntegerField()
    email = models.EmailField()

このあとにmakemigrationsmigrateを実行すると、データベースにもメールアドレスの列が追加されます。

7. マイグレーションファイルの中身

7. マイグレーションファイルの中身
7. マイグレーションファイルの中身

マイグレーションファイルは自動生成されるPythonファイルです。初心者のうちは中身を深く理解しなくても問題ありません。

重要なのは、「Djangoが変更履歴をすべて記録してくれる」という点です。これにより、過去の状態に戻すことも可能になります。


operations = [
    migrations.AddField(
        model_name='user',
        name='email',
        field=models.EmailField(),
    ),
]

8. 初心者がつまずきやすい注意点

8. 初心者がつまずきやすい注意点
8. 初心者がつまずきやすい注意点

よくあるミスは、「モデルを変更したのにマイグレーションを忘れる」ことです。この場合、画面エラーが出ることがあります。

モデルを触ったら、必ずマイグレーションを実行する習慣をつけましょう。また、データベースを直接編集しないことも重要です。

関連記事:

関連記事なし

カテゴリの一覧へ
新着記事
New1
Flask
Flaskのログレベル(DEBUG/INFO/WARNING/ERROR)を使い分ける方法を完全ガイド!
New2
Python
Pythonのfrozensetとは?ミュータブルなsetとの違いをわかりやすく解説
New3
Python
Pythonでセットを活用してデータをフィルタリングする方法!初心者でもわかるセットの基本と使い方
New4
Python
Pythonの辞書操作まとめ!初心者が知っておくべき便利ワザ集
人気記事
No.1
Java&Spring記事人気No1
Python
Pythonの文字列から一部を抽出する方法!スライスを使った基本的な切り出し方
No.2
Java&Spring記事人気No2
Python
Pythonの文字列を1文字ずつ処理する方法!for文やlist化の活用例
No.3
Java&Spring記事人気No3
Flask
FlaskアプリのSECRET_KEYの設定方法を完全ガイド!初心者でもわかるセキュリティ対策
No.4
Java&Spring記事人気No4
Flask
Flaskで非同期処理を成功させるベストプラクティス集|初心者でも失敗しない考え方
No.5
Java&Spring記事人気No5
Django
Djangoモデル入門|初心者が最初に知るべきORMの基本操作
No.6
Java&Spring記事人気No6
Flask
Flaskでデータベースを使う基本!SQLAlchemyの導入方法をやさしく解説
No.7
Java&Spring記事人気No7
Python
Pythonのリストを分割する方法を完全ガイド!初心者でもわかるスライス・split・itertoolsの使い方
No.8
Java&Spring記事人気No8
Flask
Flaskのログをファイルに保存する方法!初心者でもわかる設定手順を徹底解説