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

Djangoマイグレーション自動生成の仕組み|models.pyとの関係を初心者向けに徹底解説

Djangoマイグレーション自動生成の仕組み|models.py との関係を理解
Djangoマイグレーション自動生成の仕組み|models.py との関係を理解

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

生徒

「Djangoでマイグレーションって聞くんですけど、何をしているのか全然わからないです…」

先生

「Djangoのマイグレーションは、models.pyに書いた設計図を、データベースに反映する仕組みなんだ。」

生徒

「自動生成って言われるけど、勝手に何を作ってるんですか?」

先生

「じゃあ、models.pyとマイグレーションの関係を、超やさしく順番に見ていこう。」

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

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

Djangoのマイグレーションとは、データベースの構造を安全に管理するための仕組みです。データベースとは、アプリの中の情報を保存する箱のようなものです。マイグレーションは、その箱の形を記録し、変更履歴として残してくれます。

プログラミング未経験の方は、「設計図どおりに棚を作る作業」と考えるとイメージしやすいです。Djangoでは、その設計図がmodels.pyになります。

2. models.pyはデータベースの設計図

2. models.pyはデータベースの設計図
2. models.pyはデータベースの設計図

models.pyは、「どんなデータを、どんな形で保存するか」を書くファイルです。たとえば、名前や年齢を保存したい場合、models.pyにその内容を書きます。


from django.db import models

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

このコードは、「Personという表を作り、名前と年齢を保存する」という意味です。まだこの時点では、データベースには何も反映されていません。

3. makemigrationsで何が起きているのか

3. makemigrationsで何が起きているのか
3. makemigrationsで何が起きているのか

makemigrationsコマンドは、models.pyの変更をチェックし、「前回と何が変わったか」を比較します。そして、その差分をマイグレーションファイルとして自動生成します。


python manage.py makemigrations

このとき作られるファイルは、「データベースをどう変更するか」を文章で説明した指示書のようなものです。

4. マイグレーションファイルの中身を理解する

4. マイグレーションファイルの中身を理解する
4. マイグレーションファイルの中身を理解する

自動生成されたマイグレーションファイルの中には、どんなテーブルを作るかが書かれています。初心者の方は、内容を完璧に理解する必要はありませんが、「Djangoが設計図を翻訳している」と知っておくと安心です。


operations = [
    migrations.CreateModel(
        name='Person',
        fields=[
            ('id', models.AutoField(primary_key=True)),
            ('name', models.CharField(max_length=50)),
            ('age', models.IntegerField()),
        ],
    ),
]

5. migrateでデータベースに反映される仕組み

5. migrateでデータベースに反映される仕組み
5. migrateでデータベースに反映される仕組み

migrateコマンドは、マイグレーションファイルを実行し、実際のデータベースを変更します。つまり、設計図どおりに棚を組み立てる作業です。


python manage.py migrate

この操作により、データベースにPersonテーブルが作成され、アプリから使えるようになります。

6. なぜ自動生成が安全なのか

6. なぜ自動生成が安全なのか
6. なぜ自動生成が安全なのか

Djangoのマイグレーションは、変更履歴を順番に管理します。そのため、間違えても元に戻しやすく、チーム開発でも同じ状態を再現できます。手作業でデータベースを触らなくてよい点が、大きな安心ポイントです。

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

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

models.pyを書き換えたのにデータベースが変わらない場合、多くはmakemigrationsやmigrateを忘れています。また、マイグレーションファイルを消すときは注意が必要です。設計図と履歴は、必ずセットで管理しましょう。

まとめ

まとめ
まとめ

ここまで、Djangoマイグレーション自動生成の仕組みについて、models.pyとの関係を中心に詳しく見てきました。Django初心者の方にとって、マイグレーションは最初につまずきやすいポイントですが、仕組みを正しく理解すると「なぜ必要なのか」「何が自動で行われているのか」が自然と見えてきます。

Djangoマイグレーションとは、models.pyに書いたデータベース設計を、安全かつ再現性のある形でデータベースに反映するための仕組みです。models.pyはあくまで設計図であり、実際のデータベース構造そのものではありません。makemigrationsコマンドは、その設計図の変更点を読み取り、どのようにデータベースを変更すべきかをマイグレーションファイルとして自動生成します。この段階では、まだデータベース自体は変わっていません。

そして、migrateコマンドを実行することで、マイグレーションファイルに書かれた内容が順番に実行され、実際のデータベースにテーブルやカラムが作成されます。この二段階の流れを理解することが、Djangoマイグレーションを正しく使いこなすための第一歩です。

マイグレーションが自動生成される仕組みは、初心者にとってはブラックボックスのように感じるかもしれません。しかし、実際には「models.pyの差分を検出して、Pythonコードとして変更手順を書き出している」だけです。自動生成されたマイグレーションファイルを一度中身まで眺めてみると、Djangoがどのようにテーブル作成やカラム追加を指示しているのかが分かり、理解が一段深まります。

また、Djangoマイグレーションの大きな特徴は、変更履歴がファイルとして残る点です。これにより、開発途中でデータベース構造が変わっても、過去の状態に戻したり、別の環境で同じ構造を再現したりすることが簡単になります。個人開発だけでなく、チーム開発や本番運用においても、マイグレーションは非常に重要な役割を果たします。

初心者の方が特につまずきやすいのは、「models.pyを変更したのに、データベースが変わらない」というケースです。この場合、多くはmakemigrationsやmigrateを実行し忘れています。models.pyを変更したら、必ずマイグレーションを作成し、適用するという流れを習慣にすることが大切です。

ここで、今回の記事内容を踏まえたシンプルな流れを、もう一度コードと一緒に振り返ってみましょう。


# models.py を編集する
class Person(models.Model):
    name = models.CharField(max_length=50)
    age = models.IntegerField()

# マイグレーションファイルを作成する
python manage.py makemigrations

# データベースに反映する
python manage.py migrate

この一連の流れを理解していれば、Djangoのデータベース操作に対する不安は大きく減ります。マイグレーションは難しいものではなく、「設計図の変更履歴を安全に管理するための仕組み」だと捉えると、ぐっと身近に感じられるはずです。

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

生徒

「最初はマイグレーションって、勝手に何かされて怖いイメージがありましたけど、models.pyの変更を記録しているだけなんですね。」

先生

「その通り。Djangoは、設計図の差分を自動で見つけて、変更手順を書いてくれているだけなんだ。」

生徒

「makemigrationsとmigrateを分けて考える理由も、やっと分かってきました。まずは指示書を作って、そのあと実行するんですね。」

先生

「そうそう。その考え方ができると、エラーが出たときも落ち着いて原因を探せるようになるよ。」

生徒

「これなら、データベース設計を変えるのも怖くなくなりそうです。」

先生

「まずは小さな変更からで大丈夫。Djangoマイグレーションは、初心者の味方だから安心して使っていこう。」

カテゴリの一覧へ
新着記事
New1
Django
Djangoマイグレーション自動生成の仕組み|models.pyとの関係を初心者向けに徹底解説
New2
Flask
PythonのFlaskでテンプレートを多言語化!翻訳の基本構文を完全ガイド
New3
Flask
Flaskで多対多のリレーションを作る!中間テーブルの基本構造を学ぼう
New4
Python
Pythonの関数を使ったカスタムソート(keyパラメータ)をわかりやすく解説!初心者でも使える並べ替えテクニック
人気記事
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
Flask
PythonのFlaskで翻訳用のメッセージファイルを作成する手順を完全ガイド!
No.5
Java&Spring記事人気No5
Python
Pythonのリストを分割する方法を完全ガイド!初心者でもわかるスライス・split・itertoolsの使い方
No.6
Java&Spring記事人気No6
Flask
FlaskアプリのSECRET_KEYの設定方法を完全ガイド!初心者でもわかるセキュリティ対策
No.7
Java&Spring記事人気No7
Python
Pythonとは何か?初心者向けにできること・特徴・インストール手順までやさしく解説
No.8
Java&Spring記事人気No8
Flask
Flaskアプリのデプロイとモニタリングを完全解説!初心者でもわかる運用の基本