Migration(マイグレーション)とは、一言でいうと、
Laravel用のデータベース項目を作る事を意味します。
というわけで、図解で初心者にも分かるように解説していきます。
これを読めば、データベースやMigrationがしっかり使いこなせるようになりますよ!
LaravelのMigrationとは?
migrationを具体的に言うと、database\migrationsフォルダにtable.phpっていうファイルを作って、そこにデータベースに新たに作りたいテーブルとカラムの設定を書いて、データベースに送る一連の作業の事を指してるんだ。
ちなみに、そもそもデータベースが何か理解してる?
LaravelのMigrationに必要なデータベースとは?
データベースとは、投稿されたデータをしまう場所です。
この絵のように、投稿があったらデータベースにしまっておき、ページを表示する時にデータベースから投稿を取り出すんです。
Laravelのblade.phpとは?普通の.phpと何が違う?初心者必須の知識!
LaravelのController.phpとは?初心者向けにやさしく図入りで解説
レンタルサーバーには、MySQLというデータベースシステムが通常入ってます。そしてphpMyAdminというソフトからこのデータベースを見たり編集したりできます。
↑上の画像はLaravelで作った辞書サイトのデータベースです。
↓下の画像は、そのサイトの投稿です。見比べてみてください。
実際に上の投稿が項目別(カラム別)に分けられて、データベースに保存されてるのが分かるでしょうか。
Migrationで出てくるデータベース、テーブル、カラムという3つの概念について
下の図を見てください。
まず、MySQLというシステムの中に、データベースを作ります。データベースはサイト単位で通常作ります。
そしてその中に、posts と usersというテーブルを作ったとします。
postsテーブルには、投稿に関するカラムが入ってます。「投稿タイトル」「投稿本文」「書いた人のID」「投稿日付」といった具合です。
usersテーブルには、このサイトにユーザー登録した人の情報をしまう事にします。「ユーザー名」「ログインパスワード」「メールアドレス」といった具合です。このそれぞれの項目がカラム(column)と呼ばれます。
データベースで1つ重要な事は、table名は必ず複数形にする必要がある postじゃなくてposts、user じゃなくて users ってね。
このテーブルやカラムをなぜ作るのか?サイトにはほぼ必ずフォームを作りますよね?
↑こういうフォームからの投稿を保存するためのExcelみたいなものを作るのがマイグレーションって事なんです。
Migrationをする前に必要な事
そもそも、このMigrationという作業をLaravelでするには、下準備が必要です。
- phpMyAdminからデータベースを作成する
- .envファイルを設定してLaravelがデータベースにアクセスできるようにする
という2つの作業が事前に必要です。
Migration準備1:phpMyAdminからデータベースを作成する
基本的に、1サイトにつき、1データベースが必要ですから、データベースをまずは作ります。
これに関しては、先程出てきたphpMyadminから作ります。
XAMPPでデータベース作成の場合
もし、あなたがXAMPPを使っているなら、MySQLのAdminをクリックすると、phpMyadminがブラウザで立ち上がります。
→Laravel6入門:開発環境の構築とは?XAMPPを例にやさしく解説!
phpMyAdmin にログインしたら、
左メニューから新規作成を選び、データベース名の所にサイト名(Laravelプロジェクト名)を入力します。文字コードがよく分からない場合は、utf8mb4_general_ci をひとまず選んでおけばOKです。
作成ボタンを押せば、データベースの作成は完了です。
サーバーの場合
レンタルサーバーで使う場合は、レンタルサーバー側でまず、Laravelサイト用のデータベースを作成する必要があります。
Xサーバーを例に説明すると、MySQL設定→MySQL追加に進みます。
MySQLデータベース名にLaravel用と分かるような名称を入力して進めば、Laravel用(今回のサイト用)のデータベースの作成が完了です。
ただ、これだけだと、MySQLにログインできません。なので、MySQLユーザー追加タブからユーザーID、パスワードを任意に作ります。(どちらもメモっておいてください。)
MySQL一覧に戻ったら、今作ったデータベースのアクセス権未所有ユーザ項目で、
今作ったユーザーを選んで追加を押します。
これで、今作ったユーザーでこのデータベースにログインできるようになります。
今作ったユーザー名とパスワードでphpMyAdminにログインすれば、
もうデータベースはすでに出来ているはずです。
Migration準備2:.envファイルを設定してLaravelがデータベースにアクセスできるようにする
さて、ひとまず空のデータベースが出来たのですが、今のままだとLaravelからデータベースにアクセスできませんので、設定します。
サイトのフォルダ(Laravelプロジェクトフォルダ)に行き、.envファイルを開きます。
大体9行目くらいにある、DB_という項目を以下のように設定します。
DB_CONNECTION: mysql を設定(データベースがSQLiteなど別のシステムならその名を入力)
DB_HOST: PC上(ローカル)で作ってる場合は通常127.0.0.1です(ローカルのURLと同じ)。レンタルサーバーの場合は、それぞれサーバーのDBホストがあるので、レンタルサーバーの公式サイトなどで調べてください。例えばXサーバーならmysqlxxxxx.xserver.jpのようなアドレスになります。
DB_PORT:3306を通常設定します(レンタルサーバーでも通常同じ)。
XAMPPのMySQLのPort(s)の所の番号だよ。
DB_DATABESE:先程phpMyAdminで作ったデータベース名を入れます。
DB_USERNAME:独自に設定してない限りはデフォルトではrootです。レンタルサーバーの場合は先程作ったphpMyAdminのログインID(ユーザーID)です。
DB_PASSWORD:これもphpMyAdminのパスワードですが、設定してない場合は空でOKです。レンタルサーバーの場合は、先程作ったphpMyAdminのログインパスワードを記入します。
→Larave6入門:MySQL/MariaDBのパスワード設定の簡単なやり方
これで保存する(レンタルサーバーならFTPでアップロードして上書き保存)する事で、Migrationの下準備は完了です。
Migrationの実際のやり方。どんな作業をするのかの流れ
では、実際LaravelのMigraitonはどんな作業をするのかを説明します。
Migraitonは
- Migraiton用ファイルをコマンドで作成する
- Migration用ファイルにカラムを記入して保存する
- Migrationを実行してデータベースにテーブルとカラムを追加する
という3ステップになってます。
Migration用ファイルをコマンドで作成する
まず、ターミナル(コマンドプロンプト/shell)を開きます。
cdコマンドを使って、Laravelプロジェクトフォルダに移動します。
画像のようにプロジェクトフォルダまでのパスをコピーして、
cd D:\XAMPP\htdocs\liketest のように入力してEnterします。
次に、php artisan make:migration create_posts_table のように入力してEnterします。
すると、database→migrationsフォルダに、create_posts_table.phpというのが追加されました。
これでpostsテーブルを仮作成した状態になります。
このファイルに、カラム(項目)を追加していきます。
Migrationファイルにカラムを記入して保存する
では、実際に今作ったcreate_posts_table.phpをテキストエディタで開いてみます。
↓下の画像のようなコードが出てきます。その中のpublic function up(){ }というカッコの中(赤枠)に、これから作りたいカラムを記入していきます。
例えば、最初から書かれている
$table->bigIncrements('id'); は、idカラムです。これは必須なのでこのままでOKです。
$table->timestamps(); は、投稿日と編集日カラムの2つを作ってくれます。これも必須です。
そして、この下に必要なカラムを書いていきます。
この例で言えば、title(タイトル), post(本文), likes(いいねカウント)という3つのカラムを作る前提で書いてます。
string と longtext というのは、文字を意味します。stringを使うと文字数制限があり、指定しなければ255文字までになります。長い文章を扱う本文部分でstringだと足りないので、text, mediumtext, longtextのどれかを使います。超長文でも入るようにlongtextを選んでおけば、後々エラーが出ないでしょうし、入力文字数制限が欲しい場合はLaravel側で作れます。
さらにnullable()というのは、null(空っぽ)が可能という意味です。例えば、入力必須項目にしたいなら、nullableを付けない、必須でないならnullableを付けるという具合です。
integer というのは数字を意味します。いいねのクリック回数を保存したいので、integerと記入し、default(0)というのは、初期の数値は0にしとくという意味です。
そして、このファイルを上書き保存してください。
Migrationを実行してデータベースにテーブルとカラムを追加する
さて、ファイルにテーブルとカラムの設定は書き込みました。
これをマイグレーションします。
先程のターミナル(コマンドプロンプト/shell)に
php artisan migrate
と入力、Enterするだけです。
画像のように、Migration table created successfullyと出れば完了です。
実際に、phpMyAdminにログインしてみましょう。
ログインすると、postsやusersというテーブルが追加されてます。postsを選び、構造タブを見てみると、ちゃんとカラムが作成されてるのが分かります。
postの所にはnullable()って付けたから、NULLの所がはいになってるわけ。likesの所は指定通りデフォルト値が0になってるんだ。
LaravelのMigrationに関するよくある疑問、質問
さて、Migration自体は前項までの解説でコンプリートしました。無事専用のデータベースが完成したので、投稿を保存できる状態になりました。(もちろんLaravel側で、投稿フォームなどを設置する必要がありますが。)
さて、ここからは、このMigrationに関するよくある質問に答えていきます。
Migration使わないでも、phpMyAdminでできるんじゃないの?
画像のように、データベース名をクリックすると、テーブルを作成という項目があるので、ここで作れますし、カラムの追加、編集、削除も実は全部phpMyAdminからできます。
なぜわざわざMigrationを使うのかというと、
- 履歴が残る
- 後でサーバーや他のPCにコピーする時にphp artisan migrateと打つだけで完了する
という利点があるからです。
まず、migrationファイルを書く事で、いつテーブルやカラムを追加したかという履歴が残ります。そうする事で、他の人とチームでサイト作りをする時は、お互いがどこをどうイジったかが分かりやすいというメリットがあります。またバグが出た時も、どこをいつイジったかが分かるので、見つけやすいです。
さらにもっと大事な事として、PCでLaravelサイトを作った場合は、後でGITなどを使ってサーバーへアップロードするわけですよね。
その際、migrationファイルをサーバーへコピーして、php artisan migrateと打つだけで、今まで追加したテーブルとカラムが一瞬で全部サーバーのMySQLに作成されるわけです。
→GITとGITHUBとは?全く分からない初心者向けに図入りでやさしく解説!
確かに自分もnullable設定忘れた~みたいな時は、phpMyAdminから直接Nullにチェック入れたりとかはするけどね。でもそれをやると、サーバーにアップした時も、手動でNullにチェックいれる必要があったりで、PC側とサーバー側の設定がチグハグになる可能性があるから気をつけてね。
Migrationでカラムを追加したり、削除したい時はどうすればいいの?