カテゴリ: 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アプリのセキュリティ脆弱性と解決方法を初心者向けに徹底解説!
New2
Python
Pythonのリストのメモリ効率を改善する方法を完全ガイド!初心者でもわかるgeneratorの使い方
New3
Python
PythonでSQLのトリガー・ストアドプロシージャを活用する基本を初心者向けに完全解説
New4
Flask
FlaskでリダイレクトやURL生成を行う方法!便利な関数の使い方を解説
人気記事
No.1
Java&Spring記事人気No1
Python
Pythonの文字列を1文字ずつ処理する方法!for文やlist化の活用例
No.2
Java&Spring記事人気No2
Python
Pythonのリストを分割する方法を完全ガイド!初心者でもわかるスライス・split・itertoolsの使い方
No.3
Java&Spring記事人気No3
Flask
FlaskのBlueprintとは?機能ごとに分割して管理する基本設計を学ぼう
No.4
Java&Spring記事人気No4
Python
Pythonで仮想環境(venv)を作る方法!初心者向けに環境構築をステップ解説
No.5
Java&Spring記事人気No5
Flask
FlaskアプリをNginx + Gunicornで本番運用する方法!初心者でもわかるデプロイ構成の基本
No.6
Java&Spring記事人気No6
Flask
Flaskアプリのテスト性を高める設計方法まとめ
No.7
Java&Spring記事人気No7
Flask
Flaskとは何か?初心者向けにできること・特徴・インストール手順までやさしく解説
No.8
Java&Spring記事人気No8
Python
PythonでSQLデータベースのパフォーマンスを向上させる方法|初心者でもわかる高速化の基本