Djangoマイグレーションの基本コマンド完全解説|makemigrationsとmigrateでDB設計を理解しよう
生徒
「Djangoでアプリを作り始めたんですが、マイグレーションって何をしているのか全然わかりません…」
先生
「マイグレーションは、Pythonで書いたモデルの設計を、データベースに反映させるための仕組みです。家の設計図を元に、実際の家を建てるようなイメージですね。」
生徒
「makemigrations と migrate っていうコマンドは、何が違うんですか?」
先生
「それぞれ役割が違います。順番に、とてもゆっくり説明していきましょう。」
1. Djangoマイグレーションとは何か?
Djangoマイグレーションとは、Djangoで作成したモデルの内容を、データベースに反映するための仕組みです。データベースとは、たくさんのデータを表の形で保存する場所のことです。Excelの表を思い浮かべるとイメージしやすいです。
Djangoでは、Pythonのコードで「どんな表を作るか」を書きます。その設計図を、実際のデータベースに変換する作業がマイグレーションです。これにより、難しいSQLを書かなくても、データベース設計ができます。
2. makemigrationsの役割を超やさしく解説
makemigrationsは、「設計図を作るコマンド」です。models.pyに書いた内容を読み取り、「こういう変更をしますよ」という記録ファイルを作成します。この時点では、データベースはまだ変わりません。
たとえるなら、ノートに家の間取り図を書く作業です。実際に工事は始まっていません。
python manage.py makemigrations
このコマンドを実行すると、migrationsフォルダの中にファイルが作られます。このファイルが、変更内容の履歴になります。
3. migrateの役割を超やさしく解説
migrateは、「設計図を元に工事をするコマンド」です。makemigrationsで作られたファイルを使って、実際のデータベースにテーブルを作成します。
設計図だけでは家は完成しません。migrateを実行して、はじめてデータベースに反映されます。
python manage.py migrate
このコマンドを実行すると、データベースに表が作成され、アプリが正しく動くようになります。
4. モデル変更とマイグレーションの流れ
Djangoでは、モデルを変更したら、必ずマイグレーションを行います。例えば、ユーザーの年齢を保存したい場合、models.pyを修正します。
from django.db import models
class User(models.Model):
name = models.CharField(max_length=100)
age = models.IntegerField()
この変更をデータベースに反映するには、makemigrations → migrate の順番で実行します。この流れを忘れないことが大切です。
5. マイグレーションファイルの中身を見てみよう
makemigrationsをすると、自動でPythonファイルが作られます。この中には、「どんな表を作るか」が細かく書かれています。初心者のうちは、無理に理解しなくても大丈夫です。
class Migration(migrations.Migration):
operations = [
migrations.CreateModel(
name='User',
fields=[
('id', models.BigAutoField(primary_key=True)),
('name', models.CharField(max_length=100)),
('age', models.IntegerField()),
],
),
]
このファイルがあることで、Djangoは変更履歴を正確に管理できます。
6. なぜマイグレーションが必要なのか?
マイグレーションがあることで、データベースの変更履歴を安全に管理できます。間違えても、過去の状態に戻すことができるのが大きな特徴です。
また、チーム開発でも同じ設計を共有でき、環境が違っても同じデータベース構造を作れます。これがDjangoが多く使われている理由の一つです。
7. 初心者がつまずきやすいポイント
よくある失敗は、makemigrationsだけ実行して、migrateを忘れることです。この場合、データベースは変更されません。
また、モデルを変更したのにマイグレーションをしないと、エラーが発生します。「モデルを変えたら、必ずマイグレーション」と覚えておくと安心です。
8. DjangoマイグレーションとDB設計の関係
Djangoマイグレーションは、データベース設計そのものです。モデルを考えることは、「どんなデータを保存したいか」を考えることになります。
難しい専門知識がなくても、Pythonコードを書く感覚でデータベース設計ができる点が、Djangoの大きな魅力です。makemigrationsとmigrateを正しく使うことで、安全で分かりやすいDB設計ができます。