Djangoマイグレーション入門|モデル変更をDBへ適用する仕組みを初心者向けに解説
生徒
「Djangoでモデルを変更したら、データベースも自動で変わるんですか?」
先生
「自動では変わりません。モデルの変更内容をデータベースに反映させるために、マイグレーションという作業が必要です。」
生徒
「マイグレーションって、難しそうな言葉ですね……。」
先生
「仕組みを知れば、引っ越し作業のようなものだと分かります。順番に見ていきましょう。」
1. Djangoマイグレーションとは何か
Djangoマイグレーションとは、Djangoのモデルとデータベースの設計を一致させる仕組みです。モデルとは、データの設計図のようなもので、「名前」「年齢」「登録日」といった情報の形を決めます。
一方、データベースは実際にデータを保存する箱です。設計図だけ変えても、箱の中身は変わりません。その差を埋める作業がマイグレーションです。
初心者の方は「モデル=ノートに書いた設計」「データベース=引き出し」と考えると理解しやすくなります。
2. なぜマイグレーションが必要なのか
Djangoでアプリ開発をしていると、途中で「項目を増やしたい」「名前を変更したい」と思うことが必ずあります。このとき、モデルだけを変更すると、データベースと食い違いが起こります。
マイグレーションを行うことで、モデル変更を安全にデータベースへ反映できます。手作業でデータベースを触らなくてよい点が、Djangoの大きな特徴です。
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の役割
makemigrationsは、モデルの変更点を記録するコマンドです。例えるなら、「設計変更メモ」を作る作業です。
python manage.py makemigrations
このコマンドを実行すると、「どこをどう変更したか」という情報がマイグレーションファイルとして保存されます。この時点では、まだデータベースは変更されていません。
5. migrateでDBへ反映する流れ
次に使うのがmigrateです。これは、作成されたマイグレーションファイルをもとに、データベースを実際に変更します。
python manage.py migrate
これで、モデルとデータベースの状態が一致します。Django初心者の方は、「makemigrations=準備」「migrate=実行」と覚えると混乱しません。
6. カラム追加の具体例
例えば、ユーザーに「メールアドレス」を追加したい場合、モデルを次のように変更します。
class User(models.Model):
name = models.CharField(max_length=50)
age = models.IntegerField()
email = models.EmailField()
このあとにmakemigrationsとmigrateを実行すると、データベースにもメールアドレスの列が追加されます。
7. マイグレーションファイルの中身
マイグレーションファイルは自動生成されるPythonファイルです。初心者のうちは中身を深く理解しなくても問題ありません。
重要なのは、「Djangoが変更履歴をすべて記録してくれる」という点です。これにより、過去の状態に戻すことも可能になります。
operations = [
migrations.AddField(
model_name='user',
name='email',
field=models.EmailField(),
),
]
8. 初心者がつまずきやすい注意点
よくあるミスは、「モデルを変更したのにマイグレーションを忘れる」ことです。この場合、画面エラーが出ることがあります。
モデルを触ったら、必ずマイグレーションを実行する習慣をつけましょう。また、データベースを直接編集しないことも重要です。