カテゴリ: 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
Laravel
Laravelの認証状態をチェックする方法を完全解説!authとAuth::check()を初心者向けにやさしく説明
New2
CodeIgniter
CodeIgniterのコントローラクラスの作り方を完全ガイド!初心者でもわかる基礎から実践まで
New3
Symfony
Symfonyのフォームラベルを多言語対応!初心者でもわかる翻訳設定ガイド
New4
Laravel
Laravelでユーザー登録機能を作る方法!初心者向けにバリデーションとリダイレクトをやさしく解説
人気記事
No.1
Java&Spring記事人気No1
Laravel
Laravelのデータベース設定方法を完全ガイド!初心者でもわかる.envファイルの使い方
No.2
Java&Spring記事人気No2
Laravel
Laravelのビューとは?Bladeテンプレートの基本を解説
No.3
Java&Spring記事人気No3
Laravel
Laravelでセッションを扱う方法!保存方法と利用例を解説
No.4
Java&Spring記事人気No4
Laravel
Laravelのルート一覧を確認する方法!初心者でもわかるphp artisan route:listの使い方
No.5
Java&Spring記事人気No5
Laravel
Laravelでルーティングを設定する方法!web.phpと基本ルートの書き方を初心者向けに徹底解説
No.6
Java&Spring記事人気No6
Laravel
Laravelでログを出力する方法(Monolog・storage/logs)
No.7
Java&Spring記事人気No7
Laravel
Laravelのルートキャッシュ機能を活用してパフォーマンス改善!初心者でもわかる完全ガイド
No.8
Java&Spring記事人気No8
Laravel
LaravelでルートをBladeテンプレートに記述する方法(route関数)