カテゴリ: Flask 更新日: 2025/12/10

Flask-Migrateでデータベースの設計変更を管理!初心者でもわかるスキーマ変更のやり方

Flask-MigrateでDBのスキーマ変更を安全に管理する手順まとめ
Flask-MigrateでDBのスキーマ変更を安全に管理する手順まとめ

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

生徒

「Flaskのアプリでデータベースに保存する内容をあとから変えたくなったら、どうしたらいいですか?」

先生

「そういう時には、Flask-Migrateという便利なツールを使うと、データベースの変更を安全に管理できますよ。」

生徒

「Flask-Migrateって何ですか?難しい操作が必要なんですか?」

先生

「心配しなくても大丈夫。初心者の方でも使えるように、ゆっくり説明していきますね。」

1. Flask-Migrateとは?

1. Flask-Migrateとは?
1. Flask-Migrateとは?

Flask-Migrate(フラスク・マイグレート)は、PythonのWebアプリ開発で使われるFlaskというフレームワークの拡張機能のひとつです。

このツールは「データベースの設計をあとから変えたいとき」に使います。

たとえば、あるアプリに「名前」だけ保存していたけど、あとで「メールアドレス」も保存したくなったときなどです。

こうした変更を安全に、そして失敗しにくくしてくれるのがFlask-Migrateです。

2. マイグレーションって何?

2. マイグレーションって何?
2. マイグレーションって何?

マイグレーションとは、データベースの「設計図の変更履歴」を管理する作業のことです。

パソコンのフォルダでいうと、「過去のバージョンのコピーを残しておく」ようなものです。

これをしておけば、万が一の時に元に戻せたり、変更の内容を後から見直したりすることができます。

Flask-Migrateは、このマイグレーション作業をとても簡単にしてくれる便利ツールです。

3. Flask-Migrateをインストールする方法

3. Flask-Migrateをインストールする方法
3. Flask-Migrateをインストールする方法

まずは、パソコンにFlask-Migrateを入れる(インストールする)必要があります。

コマンドプロンプトやターミナルで、次のコマンドを入力してください。


pip install Flask-Migrate

これだけで、Flask-Migrateが使えるようになります。

4. Flask-Migrateをアプリに組み込む

4. Flask-Migrateをアプリに組み込む
4. Flask-Migrateをアプリに組み込む

ここでは、SQLite(エスキューライト)という簡単なデータベースを使った例で説明します。

次のようなPythonコードでFlask、SQLAlchemy(データベースの操作を簡単にするライブラリ)、Flask-Migrateを使います。


from flask import Flask
from flask_sqlalchemy import SQLAlchemy
from flask_migrate import Migrate

app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///sample.db'
db = SQLAlchemy(app)
migrate = Migrate(app, db)

class User(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(100))

ポイント解説:

  • SQLAlchemy:Pythonでデータベースを使いやすくする道具です。
  • sqlite:///sample.db:アプリと同じ場所に「sample.db」というデータベースファイルを作る設定です。
  • db.Model:Userクラスがデータベースの「設計図」になります。

5. マイグレーションをはじめよう

5. マイグレーションをはじめよう
5. マイグレーションをはじめよう

次は、マイグレーションを始める準備をします。

ターミナル(またはコマンドプロンプト)で、次の順番にコマンドを入力してください。


flask db init
flask db migrate -m "初期データベース作成"
flask db upgrade

それぞれの意味:

  • init:マイグレーション用のフォルダを作ります。
  • migrate:設計図から変更内容をスクリプト化します。
  • upgrade:実際のデータベースに反映します。

6. テーブルに新しい項目(カラム)を追加する

6. テーブルに新しい項目(カラム)を追加する
6. テーブルに新しい項目(カラム)を追加する

たとえば、「ユーザーのメールアドレスを追加したい」と思った場合。

次のようにPythonのコード(モデル)を変更します。


class User(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(100))
    email = db.Column(db.String(120))  # 追加されたカラム

モデルを変更したら、またターミナルで以下のコマンドを使います。


flask db migrate -m "ユーザーにメールアドレスを追加"
flask db upgrade

これで、データベースに安全に変更が反映されます。

7. 変更を取り消したいときは?(ロールバック)

7. 変更を取り消したいときは?(ロールバック)
7. 変更を取り消したいときは?(ロールバック)

もし「やっぱり変更を戻したい!」となった場合は、次のコマンドを実行します。


flask db downgrade

downgrade(ダウングレード)とは、前のバージョンに戻す操作のことです。

これを使えば、間違って変更したときも安心です。

8. マイグレーション履歴を確認する方法

8. マイグレーション履歴を確認する方法
8. マイグレーション履歴を確認する方法

今までの変更履歴を確認したいときは、次のコマンドを使います。


flask db history

現在の状態を確認したいときは、次です。


flask db current

これで、どこまで変更が反映されているかを見ることができます。

9. エラーが出たときの対処法

9. エラーが出たときの対処法
9. エラーが出たときの対処法

よくあるエラーには、次のようなものがあります。

  • モデルを保存し忘れている(変更が反映されない)
  • マイグレーションフォルダがうまく作られていない
  • コマンドの順番が間違っている

うまくいかないときは、一度次のコマンドを使って状態をリセットするのも有効です。


flask db stamp head

10. 初心者でも安心して使えるFlask-Migrateのコツ

10. 初心者でも安心して使えるFlask-Migrateのコツ
10. 初心者でも安心して使えるFlask-Migrateのコツ
  • モデルを変更したあとは、migrateupgradeの順番を忘れずに。
  • 変更内容はメモのように-mオプションでコメントを残しましょう。
  • マイグレーションファイルは中身を見るクセをつけると安心です。
  • ロールバックできるので、怖がらずに試してみましょう。

まとめ

まとめ
まとめ

Flaskでデータベースを扱うとき、あとからテーブルの構造や項目を追加したくなる場面はとても多くあります。とくにアプリを運用していく中で新しい情報を保存したくなったり、既存の仕様を見直したくなったりするのは自然な流れです。こうした変更を安全に行い、過去の状態を確認したり戻したりできるようにするためには、テーブルの構成を正しく管理する仕組みが欠かせません。今回の記事で取り上げたFlask-Migrateは、そのような場面で非常に頼りになる存在で、初心者でも扱いやすく、段階的にデータベースの構造を変更していける柔軟さを備えています。 また、マイグレーションという仕組みを使うことで、変更の記録をひとつずつ積み重ねながら、後になって変更内容を振り返ったり、予想外のトラブルが起きても落ち着いて状態を戻せるようになります。とくに「init」「migrate」「upgrade」という三つの流れを理解することで、データベースの内部でどのような変化が行われているのかを意識しながら安全に作業できます。モデルを編集したあとにコマンドを実行するだけで、追加したカラムが反映される仕組みはとても便利で、アプリの成長に合わせた柔軟な設計変更がスムーズに行えます。 さらに、実際のプロジェクトでは履歴を確認したり、必要に応じてロールバックしたりする場面もありますが、Flask-Migrateでは専用のコマンドで直感的に状態を管理できるため、特別な知識がなくても扱いやすい点が魅力です。以下に、今回のおさらいも兼ねたサンプルコードをまとめておくので、データベース設計の見直しや小規模アプリの拡張などに役立ててください。

マイグレーション付きサンプルプログラム


from flask import Flask
from flask_sqlalchemy import SQLAlchemy
from flask_migrate import Migrate

app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///sample_migrate.db'
db = SQLAlchemy(app)
migrate = Migrate(app, db)

class User(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(100))
    email = db.Column(db.String(120))  # あとから追加した項目

if __name__ == "__main__":
    app.run(debug=True)

このように、アプリケーション側のモデルを編集してから、flask db migrate、そしてflask db upgradeの順に実行すると、データベースに新しい構造が自動で適用されます。手動でテーブルを修正する必要がなく、誤った変更をしてしまう危険も減ります。また、ロールバックコマンドを利用することで、変更をもとに戻すことも可能なため、開発中の不具合や実験的な変更にも柔軟に対応できます。 データベース設計はアプリの品質や使い勝手を左右する重要な要素ですが、Flask-Migrateを使えば必要な変更を段階的に記録しながら安全に進めることができるので、初心者でも安心して取り組めます。今回の内容を実際に手を動かしながら確かめてみると、マイグレーションの便利さと役割がさらに理解しやすくなり、より複雑な設計へ挑戦する自信にもつながります。

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

生徒

「Flask-Migrateって、使ってみると思ったより簡単ですね。ただモデルを直しただけなのに、自動で変更が記録されるのがすごいと思いました。」

先生

「そうなんです。モデルを変更したあとにコマンドをひとつずつ実行するだけで、データベースも同じ構造に整えてくれるので、初心者でも安心して使えますよ。」

生徒

「履歴を確認できるのも便利ですね。どんな変更が行われたか後から見返せるのは心強いです。」

先生

「その通り。履歴を追えることで、間違いに気づいたときも落ち着いて調整できますし、ロールバックもできるので安全です。アプリの開発規模が大きくなればなるほどマイグレーションは重要になっていきますよ。」

生徒

「なんだか自分でも本格的なアプリを作れそうな気がしてきました。次はもっと複雑なテーブルにも挑戦してみたいです!」

先生

「いいですね。まずは今日学んだ基本を押さえて、少しずつ拡張していきましょう。」

この記事を読んだ人からの質問

この記事を読んだ人からの質問
この記事を読んだ人からの質問

プログラミング初心者からのよくある疑問/質問を解決します

Flask-Migrateとは何ですか?初心者でも使えるデータベース管理ツールですか?

Flask-Migrateとは、Flaskアプリでデータベースの設計変更を安全に管理するための拡張機能です。スキーマ変更を履歴として記録し、あとから追加したカラムを自動で反映したり、間違えた変更をロールバックしたりできるため、初心者でも安心して使える便利なマイグレーションツールです。
カテゴリの一覧へ
新着記事
New1
Flask
Flaskアプリのセキュリティテストを効率的に行う方法まとめ
New2
Flask
認証と認可の違いを整理しよう!Flaskで押さえるべき基礎概念
New3
Flask
Flaskで非同期フォーム送信(Ajax POST)を実装する方法を解説!初心者でもわかるステップ解説
New4
Python
Pythonで定数を定義する方法!変更されない変数の書き方と命名ルールを初心者向けに解説
人気記事
No.1
Java&Spring記事人気No1
Python
Pythonとは何か?初心者向けにできること・特徴・インストール手順までやさしく解説
No.2
Java&Spring記事人気No2
Flask
Flaskでデータベースを使う基本!SQLAlchemyの導入方法をやさしく解説
No.3
Java&Spring記事人気No3
Python
Pythonでリストの要素を検索・取得する方法!index()やin演算子の活用法
No.4
Java&Spring記事人気No4
Python
Pythonのインストール方法まとめ!Windows・Mac・Linux別にステップ解説
No.5
Java&Spring記事人気No5
Python
Pythonで仮想環境(venv)を作る方法!初心者向けに環境構築をステップ解説
No.6
Java&Spring記事人気No6
Python
Pythonプログラムの書き方を基礎から学ぼう!初心者が覚えるべき文法とは?
No.7
Java&Spring記事人気No7
Flask
Flaskアプリの環境変数をクラウドで安全に設定する方法!初心者のための完全ガイド
No.8
Java&Spring記事人気No8
Python
PythonでHello Worldを表示するには?初心者向けに最初の1行を実行してみよう