マイグレーションの方法と注意点【初心者のためのLaravel超入門講座4】

Laravel 入門講座
スポンサーリンク

初心者のためのLaravel超入門講座、4回目の今回は、migration(マイグレーション)について解説します。

migrationはデータベースを作成する部分。

ここからはMySQLのデータと連携させつつ、すすめていきますね。

前回までの内容はこちらをご覧ください。

スポンサーリンク

マイグレーションとは

まずマイグレーションとは何か?

英語でいうとmigrateが「移住する」migrationは「移住」という意味です。

IT用語として使われるときは、データ移行の意味になります。

Laravelでは、Laravel内のデータをMySQLなどのデータベースに反映させることをいいます。

英語の豆知識

migrationは移住ですが、類似語であるimmigrationは「移民」という意味。

最近「イミグレ」とカタカナで書かれたりもしますよね。

実際にマイグレーションを試してみる

それでは実際にマイグレーションを実行してみましょう。

①MySQLにデータベースを作成

最初にMySQL上にデータベースを作っておきましょう。

次に、Laravelフォルダ内の【.env】ファイルにMySQLの接続情報を登録しておきます。

ユーザー名やパスワードを変えていなければ、データベース名を変更するだけでOK。

データベースは12行目あたりの【DB_DATABASE=】の部分に入力します。

②新たにテーブルを作成する

ここからLaravelを使って操作していきます。

Laravelをインストールしたフォルダに移動し、コマンドラインに次のように入力してEnterキーを押します。

「testsという名前のテーブル用に、マイグレーションファイルを作ってね」という意味です。

実行すると、「マイグレーションファイルを作ったよ」というコマンドが返ってきます。

Laravelをインストールしたフォルダの database/migrations の中に、新しくマイグレーションファイルができています。

なおマイグレーションファイルは、テーブルを作成したり変更したりするたびに、この場所に作成されていきます。

③マイグレーションファイルを編集する

それでは作成したマイグレーションファイルを編集します。

まずはテーブルにいれる列(カラム)を入力していきましょう。

今回は、下記の5個の列があるデータテーブルを作成したいと思います。

【testsテーブルの中身】

カラム名内容データ型larabelのカラムタイプ
id番号bigintid
title投稿のタイトルvarcharstring
body内容texttext
created_at作成日時timestamptimestamp
updated_at更新日時timestamptimestamp

マイグレーションファイルを確認する

まずマイグレーションファイルの中身を確認してみましょう。

マイグレーションファイルを開くと、【up】関数の部分にすでに【id】と【timestamp】についてカラム情報ができています。

ちなみにtimestampは、日本語で「データの作成日時」という意味。

マイグレーションファイルには【timestamps】と複数形で入っておりますが、これで【データの作成日時】と【更新日時】というふたつのカラムを作れます。

マイグレーションファイルを編集する

それではこれから、デフォルトでは入っていない【title】と【body】の2つのカラムをマイグレーションファイルに追加します。

18行目あたりに、下記の2行を加えてください。

編集後のマイグレーションファイルはこちら。

これだけでOKです。

データの型とは

ところで上記の操作を行う際、「データ型とか、カラムタイプってなに??」と思いませんでしたか。

私は最初、めっちゃ思いました!

同じようにここでつまづく人のために、補足説明をしますね。

【データの型】とは、どんな種類のデータを入れるかという取り決め。

カラムごとに、データ型を指定します。

MySQLでよく使うデータ型には、次のようなものがあります。

【MySQLでよく使うデータ型例】

TINYINT 小さい整数。符号なしの範囲は0から255まで。ユーザー名やパスワードなど、255文字以内におさまるデータに使える。
INT 普通のサイズの整数。数字を入れるものに使える。
VARCHAR 可変長文字列。短めのテキストに使える。
TIMESTAMP タイムスタンプ。データベースにデータを更新する際、自動的に現在の日付と時刻を指定できる。
TEXT テキスト情報を入れる。投稿内容などに使える。

データの型は公式マニュアルでチェック

上記のデータ型は、そのままの形ではLaravelに使えません。

Laravelには、各データ型に対応したカラムの書き方があります。

どのように書くか知りたい場合には、Laravelのマニュアルでチェックしましょう。

たとえば、短めの文を入れるときに使えるデータ型【varchar】を使ってカラムを作りたい場合は、上記のページで【varchar】を検索します。

すると、次のような行にヒットします。

左側の部分

がデータ型varcharを使うときのLaravelのカラムの書き方です。

上記では100という文字数制限がついていますが、文字数制限はなくても大丈夫です。

そこで、今回の【タイトル】部分のカラムは次のようにします。

「むずかしい!」と思った人へ:

このあたり、ちょっとややこしい上に、面倒ですよね。

とりあえず

  • 短めの文章を入力するカラムは【 $table->string(‘カラム名’);】
  • 長めの文章を入力するカラムは【 $table->text(‘カラム名’);
  • 整数がはいるカラムは【$table->integer(‘カラム名’);】

という形でマイグレーションファイルに入力しましょう。

また必要になったら、ググってみる感じでOK。

④マイグレートを実施する

マイグレーションファイルを編集した後は、マイグレートを行います。

これは、「マイグレーションファイルで行った変更をMySQLにも反映させてね」ということ。

次のようにコマンドを入力するだけでOK.

実施後は、MySQLをチェックしてみてください。

作成したデータベースの中の【tests】テーブルに、次のようにデータベースができていれば、成功です。

migrate後のmysqlのテーブル

テーブルに変更を加えたいとき

以上がテーブルの作成方法です。

次にテーブルに変更を加えたい場合の方法について説明します。

今回は「user_id」というカラムを追加する方法を解説します。

①カラムを1列追加する

カラムを追加するには、次のコマンドを実行しましょう。

実行すると、「マイグレーションファイルを作ったよ」というコマンドが返ってきます。

Laravelをインストールしたフォルダの database/migrations の中に、「今日の日付_add_user_id_to_tests_table.php」という名前で新しくマイグレーションファイルができています。

②マイグレーションファイルを編集する

それでは作成したマイグレーションファイルを編集します。

テーブルにいれる列(カラム)を入力していきましょう。

up関数に、下記の一行を追加します。

追加後のファイルは、このようになります。

user_idには、idで使われるのと同じ【符号なしBIGINT】というデータ型を用います。

また【->after(‘id)】と入力してありますが、こうすれば、新しいカラムはidカラムの後に作成されます。

③削除時の処理について追加する

次に、ファイルの下部の[down]の項目に下記の1文を追加しておきましょう。

追加後のファイルは、このようになります。

これは、「削除時はuser_id列を削除してね」という命令文です。

テーブルを新規作成するときは削除時の処理が最初からはいっていますが、今回のようにカラムを追加する場合には入っていません。

このままでは、もし削除をしたときいに、きれいに削除ができません。

そこでこのように、手動でドロップカラムの命令を入力する必要があるのです。

④マイグレートを行う

それでは、最後にまたマイグレートを実施しましょう。

次のようにコマンドを実行します。

MySQLを開き、testsテーブルの構造を確認してみてください。

下記のように、idの下に【user_id】カラムが追加されていれば成功です。

マイグレーション時の注意点

なおマイグレートを一度かけた後は、マイグレーションファイルを手動で編集するのはやめましょう。

ララベルが「知らないうちに変わっちゃってる!!」が混乱し、おかしなことになってしまいます(←経験済)。

もし手動で変更してしまったりしてデータがおかしくなった場合には、「取り消し処理」を行います。

この方法を解説しますね。

マイグレートの取り消し

実施したマイグレートを取り消したいという場合は、ロールバック(Rollback)を行います。

次のコマンドを実施してください。

マイグレートを1回分、巻き戻すことができます。

Rillbackを行う前に、MySQLの「migrations」テーブルをチェックしておきましょう。

migrate するごとに、batch番号(上記表の右側)が増えていきますが、Rollbackを1度かけると、一番大きいbatch番号のmigrationファイルがまとめて削除されます。

ロールバックの後は、ファイルを新たに作り直しても良いですし、既存のファイルを書きなおして再度マイグレートを行ってもOKです。

なおロールバックの他にも、いくつか取り消し処理はあります。

こちらの記事も参考にしてください。

まとめ

今回はLaravelのマイグレーションについて解説しました。

今回のまとめ

【新規作成時】

  • 新たにテーブルを作るときは【php artisan make:migration】 でマイグレーションファイルを作る
  • マイグレーションファイルを編集し、カラムを追加する
  • そのあとにマイグレートを行い、MySQLに反映させる

【追加時】

  • カラムを新たに追加するときは 【php artisan make:migration add】で列を追加する
  • マイグレーションファイルを編集し、カラムを追加し、ドロップ関数を追加する
  • そのあとにマイグレートを行い、MySQLに反映させる

【修正】

  • 処理をまちがえたらRollbackを行えば、マイグレート処理を巻き戻すことが可能
じゅんこ
じゅんこ

マイグレーションは実際に色々テーブルを作ってみたりして、実践してみてください。

失敗しても、RollbackすればOK!

それに本番で失敗するより、 勉強中にいっぱい失敗しておいたほうが安全です♪

Laravel 入門講座 Laravelデータベース

【無料プレゼント】

「LaravelでWebアプリをいちから作れるようになりたい!」

そんなLaravel初心者のあなたへ【Laravelの教科書】基礎編プレゼント中!
会員制フォーラムサイトを学習しながら作れます。

詳細はこちらをクリック

【個別サポート実施中】

「本ブログに記載の方法を試してみたけれど、うまくいかない」「コードを見てほしい」という方のために、有償でメールサポートいたします。以下のボタンをクリックして相談フォームにアクセスして下さい。

詳しく見る

Twitter始めました。
スポンサーリンク
40代からプログラミング!

コメント

タイトルとURLをコピーしました