カテゴリ: Symfony 更新日: 2025/12/13

Symfonyでマイグレーションを生成・実行する方法を徹底解説!初心者向けDoctrine ORM入門

Symfonyでマイグレーションを生成・実行する方法
Symfonyでマイグレーションを生成・実行する方法

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

生徒

「Symfonyでデータベースのテーブルを作るにはどうすればいいんですか?」

先生

「それにはDoctrine ORMという仕組みを使って、マイグレーションという操作を行います。」

生徒

「マイグレーションって何ですか?難しそう…」

先生

「大丈夫。マイグレーションは、データベースの変更を自動で反映する便利な仕組みなんですよ。順を追って一緒にやってみましょう!」

1. Doctrine ORMとマイグレーションとは?

1. Doctrine ORMとマイグレーションとは?
1. Doctrine ORMとマイグレーションとは?

Symfonyでは、Doctrine ORM(ドクトリン・オーアールエム)という機能を使って、PHPのクラスとデータベースのテーブルを結びつけることができます。ORMとは「Object Relational Mapping(オブジェクト関係マッピング)」の略で、難しそうに聞こえるかもしれませんが、実はとても便利な仕組みです。

そしてマイグレーションとは、テーブルの作成や変更の履歴を記録し、コマンド一つでデータベースに反映できる機能のことです。

例えば、「ユーザー情報を保存するテーブルを作りたい」と思ったら、まずPHPのエンティティ(クラス)を作り、その内容に合わせてマイグレーションファイルを自動生成し、実行するだけでOKです。

2. Doctrineの準備をしよう

2. Doctrineの準備をしよう
2. Doctrineの準備をしよう

まずは、Doctrineが使えるようにインストールをしておきましょう。Symfonyのプロジェクトでは、最初から入っていることもありますが、念のため下記のコマンドで確認しておきましょう。


composer require symfony/orm-pack
composer require symfony/maker-bundle

symfony/orm-packはDoctrine本体をまとめてインストールしてくれるパッケージで、maker-bundleはコードを自動生成する便利なコマンドを使えるようにします。

3. データベースの接続設定を確認しよう

3. データベースの接続設定を確認しよう
3. データベースの接続設定を確認しよう

次に、Symfonyプロジェクトのルートにある.envファイルを開きましょう。

この中のDATABASE_URLという行が、データベースへの接続情報です。たとえば、SQLiteを使うなら以下のように設定します。


DATABASE_URL="sqlite:///%kernel.project_dir%/var/data.db"

MySQLやPostgreSQLを使いたい場合は、接続情報をそれぞれに合わせて変更しましょう。

4. エンティティを作ってみよう

4. エンティティを作ってみよう
4. エンティティを作ってみよう

エンティティとは、データベースのテーブルに対応するPHPのクラスです。例えば、ユーザーを表すエンティティを作ってみましょう。


php bin/console make:entity

上記を実行すると、いくつかの質問が出てきます。ここでは次のように答えてみましょう。

  • Class name: User
  • New field name: name(string型)
  • New field name: email(string型)

すると、src/Entity/User.phpというファイルが生成されます。これがエンティティです。

5. マイグレーションファイルを生成しよう

5. マイグレーションファイルを生成しよう
5. マイグレーションファイルを生成しよう

エンティティを作っただけでは、データベースには反映されません。ここで、マイグレーションファイルを生成して、データベースにテーブルを作成する準備をします。


php bin/console make:migration

このコマンドを実行すると、migrations/ディレクトリに自動でマイグレーションファイルが作られます。中にはSQLに似た形でテーブルを作る内容が書かれています。

6. マイグレーションを実行しよう

6. マイグレーションを実行しよう
6. マイグレーションを実行しよう

最後に、実際にデータベースへテーブルを作成するために、マイグレーションを実行します。


php bin/console doctrine:migrations:migrate

確認メッセージが出てくるので、「Yes(y)」と入力しましょう。これで、Symfonyがエンティティの情報に基づいて、データベースにテーブルを作成してくれます。


     [OK] Successfully migrated!

7. データベースに本当に反映されたか確認してみよう

7. データベースに本当に反映されたか確認してみよう
7. データベースに本当に反映されたか確認してみよう

SQLiteを使っている場合は、データベースの中身を確認するために、専用のビューアソフトやコマンドラインツールを使ってみましょう。var/data.dbというファイルができているはずです。

中を見ると、Userテーブルが作成されていることがわかります。

8. Doctrineマイグレーションの注意点

8. Doctrineマイグレーションの注意点
8. Doctrineマイグレーションの注意点

マイグレーションファイルは、何度も自動生成できますが、毎回実行する前に内容を確認することが大切です。間違えて大事なテーブルを削除してしまうこともあるからです。

また、本番環境(公開するサーバ)に反映するときも、同じマイグレーションファイルを使って同じ結果を得られるようになっています。つまり、バージョン管理のような働きをしてくれるのです。

9. よくあるエラーとその対処法

9. よくあるエラーとその対処法
9. よくあるエラーとその対処法

マイグレーション中によくあるエラーに、以下のようなものがあります。

  • データベース接続エラー: DATABASE_URLの設定ミスが原因です。
  • すでに同じテーブルが存在する: 手動でテーブルを作った場合に衝突します。
  • 権限不足: データベースに書き込み権限がないユーザーで接続している可能性があります。

これらのエラーが出たら、設定ファイルやログを確認して、ひとつずつ問題を取り除きましょう。

関連記事:
カテゴリの一覧へ
新着記事
New1
Symfony
Symfonyのルーティング構成の基本を完全解説!初心者向けにYAML・PHP・アノテーション方式をやさしく紹介
New2
Laravel
Laravelのルートグループの使い方!初心者でもわかるprefixやミドルウェアの設定方法
New3
PHP
PHPのswitch文の使い方!多くの条件分岐をスッキリ書く方法と注意点
New4
Symfony
Symfony学習に役立つおすすめドキュメント・教材・リソース一覧【初心者向け】
人気記事
No.1
Java&Spring記事人気No1
PHP
PHPで文字列を結合する方法!ドット演算子と代入演算子の使い方を徹底解説
No.2
Java&Spring記事人気No2
PHP
PHPのif文の使い方を完全ガイド!初心者でもわかる条件分岐の基本
No.3
Java&Spring記事人気No3
Symfony
Symfonyで翻訳(i18n)機能を使う方法を解説!初心者にもわかる国際化対応の基本
No.4
Java&Spring記事人気No4
Laravel
Laravelのresponse()関数の使い方を完全ガイド!初心者でもわかるレスポンス制御とHTTPレスポンスの基本
No.5
Java&Spring記事人気No5
Laravel
LaravelのAPIルーティングを設定する方法!初心者でもわかるapi.phpの使い方
No.6
Java&Spring記事人気No6
CodeIgniter
CodeIgniterルーティングを完全攻略!正規表現でURLを自由自在に操る方法
No.7
Java&Spring記事人気No7
CodeIgniter
CodeIgniter(コードイグナイター)入門!どんな開発案件に向いている?利用シーン別解説
No.8
Java&Spring記事人気No8
PHP
PHPのswitch文の使い方!多くの条件分岐をスッキリ書く方法と注意点