カテゴリ: 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でリダイレクトやURL生成を行う方法!便利な関数の使い方を解説
New3
Flask
FlaskでPOSTリクエストを受け取る方法!初心者でもわかるJSONデータの受け取り方
New4
Flask
Flask‑Mailの使い方!アプリからメールを送信する基本方法を解説
人気記事
No.1
Java&Spring記事人気No1
Django
Django環境構築の全手順を完全解説!初心者でも迷わないPython・Djangoセットアップガイド
No.2
Java&Spring記事人気No2
Django
DjangoとFlaskの違いを完全比較!初心者でもわかるPythonフレームワーク入門
No.3
Java&Spring記事人気No3
Python
Pythonの文字列を1文字ずつ処理する方法!for文やlist化の活用例
No.4
Java&Spring記事人気No4
Python
Pythonでリストをコピーする方法!copy()・スライス・list()の使い方を比較
No.5
Java&Spring記事人気No5
Flask
FlaskアプリをNginx + Gunicornで本番運用する方法!初心者でもわかるデプロイ構成の基本
No.6
Java&Spring記事人気No6
Python
PythonでHello Worldを表示するには?初心者向けに最初の1行を実行してみよう
No.7
Java&Spring記事人気No7
Flask
Flaskとは何か?初心者向けにできること・特徴・インストール手順までやさしく解説
No.8
Java&Spring記事人気No8
Python
Pythonで空白や不要な文字を削除する方法!strip(), rstrip(), lstrip() の使い方を初心者向けに解説