この記事は2022年4月現在の記事です。
フレームワークlaravelを利用する上で欠かせないのがデータベースとの連携ですが、その中に前もってテスト用のデータがあらかじめ挿入されていると何かと便利なものです。
ここでは仮想環境MAMPを利用してデータベース構築からダミーデータの作成までをやってみたいと思います。
読者の皆さんも是非チャレンジしてみてください。
開発環境はVScodeを利用し、PHPのバージョンは8系、laravelも9系を使用します。
今現在では最新のバージョンになるかと思います。
目次
今回の開発手順
・ MAMPの設定
・ データベースの作成
・ Seedersファイルの生成
・ ダミーデータの作成
・ データベースへの挿入
以上の流れで開発を進めていきます。
MAMP設定編ではlaravelのインストールからになりますので、すでにlaravelの環境ができている方は上記項目に内部リンクを設定してありますので、先の項目をクリックして進めてください。
MAMPの設定
Laravelのインストール
VScodeの開くからアプリケーション→MAMP→htdocsと進み、新規フォルダでお好きな名前のフォルダを作成してください。
ここではproject-aという名前で作成しました。
空のフォルダーですが、これを開きます。
ターミナルも起動しておきましょう。
composer(コンポーザー)のインストールが完了しているのであれば、以下のコマンドを実行してください。
composer create-project --prefer-dist laravel/laravel .
最後のドットを忘れないでくださいね。
これはproject-aのフォルダ直下にインストールするために必要なオプションです。
完了したら、以下のようなファイル構造が表示されます。
ドキュメントルートの設定
次はMAMPのpreferences→Serverタグをクリックし、Choose…ボタンをクリックしてApplications→MAMP→htdocs→project-a→publicと移動してOKボタンを押し、確定します。
ここまでできましたら、MAMPの設定は完了です。
次に進みましょう。
データベースの作成
ひとまずMAMPに入っているMySQL の情報を確認してみましょう。
MAMPの起動画面からStartボタンをクリックしてサーバーを起動し、WebStartボタンをクリックするとMAMPのウェルカム画面が表示されますので、下にスクロールしてMySQL 項目をクリックすると以下の画面が表示されます。
これは画面をスクロールしてMySQL 項目を表示しているところですが、この中で重要なのはポート・ユーザーネーム・パスワードですので覚えておいてください。
.envファイルの変更
VSCodeに戻って画面左側に表示されているエクスプローラー内のファイル群にある.envファイルを開いてください。
この中でDB_CONNECTION=mysqlから始まる項目の中でDB_PORT・DB_DATABASE・DB_PASSWORDの3項目を先ほどの情報を元に書き換えます。
データベース名は任意の名前で結構ですが、これから先に進むコーディングにも記述していきますので、短く覚えやすい・作成するアプリに関連性のあるものが良いでしょう。
ここでは今後サイトを作っていきますのでmyblogにしています。
書き換えた状態が以下の画面のようになります。
変更が完了したらセーブを忘れないようにしてください。
phpMyAdminからデータベースを作成
次はもう一度MAMPのウェルカム画面に戻って、ヘッダー部分にあるTools→phpMyAdminをクリックして表示します。
上記のような表示がされていると思いますが、左側の新規作成をクリックすると右側のような蘭が表示されます。
myblogのところは任意に決めたデータベース名です。
その右側は文字コードの指定ですが、ここではutf8mb4を利用します。
絵文字などを利用した場合には文字化けしますので、これを指定してください。
後は作成ボタンをクリックすれば完了です。
テーブルやカラムなどの無い空のデータベースですがこのままでOKです。
あとはコマンドラインと生成されたファイルから作成していきます。
Seedersファイルの生成
ここからはダミーデータを作成するためのファイルを作成していきますが、データベースが空のままではエラーを起こしますので、テーブルとカラムを作成します。
それではVScodeに戻ってください。
テーブルの作成にはターミナルで以下のコマンドを実行してください。
テーブル名は任意ですが、Laravelの命名規則に従って複数形を使います。
create_と_tableの間がテーブル名になります。
ここではmyblogsとしています。
php artisan make:migration create_myblogs_table
コマンド実行後、databaseディレクトリ内のmigrationsフォルダの中に作成時の日付の入ったcreate_myblogs_table.phpというファイルが以下の内容で作成されます。
この時点でMAMPのサーバーが起動されていることを確認しておいてください。
上記のテーブルではidとtimestampというカラムがあらかじめ設定されていますので、それに加えて名前や性別・年齢を加えてみましょう。
以下がそれを加えた画面です。
追記が完了したら以下のコマンドを実行しましょう。
php artisan migrate
laravelインストール時にデフォルトで入っているマイグレーションファイルと共にmyblogsテーブルも作成されて、カラムもできています。
phpMyAdminを見てみましょう。
空だったmyblogデータベースの中にmyblogsテーブルが作成され、先ほど追記したカラムも作成されています。
ダミーデータの作成
次はいよいよseeder(シーダー)ファイルの作成です。
ちなみにseederとは”種を蒔く”人って意味ですが、面白い命名ですね。
では以下のコマンドを実行しましょう。
php artisan make:seeder MyblogsTableSeeder
シーダー名は命名規則に従ってキャメルケース記法で記載します。
上記コマンドのMyblogsTableSeederの部分がそれです。
実行が完了するとdatabase/seeders/MyblogsTableSeeder.phpが作成されます。
作成されたファイルを見てみましょう。
runメソッドにはまだ何も無い状態です。
ここに挿入するダミーデータを作成していきます。
余談ですが、3行目のnamespaceは名前空間と呼ばれています。
何故このような記述をしておくのか?ということですが、今回project-aという名のプロジェクトを作ってコーディングしています。
一つのプロジェクト内で同じメソッド名で重複するとコンパイル時にエラーになってしまいますので、この名前空間で利用しますよって意味で記述されています。
run()メソッドが重複の可能性のある部分です。
この様なメソッド名は別のファイルでも利用したり、されたりしていますので必要になります。
laravelではファイルの自動生成で記述してくれていますので、ミスせずコーディングが進められますので有難いですね。
それでは作業を続けましょう。
追記部分をコメントしておきましたので、以下の様に修正してください。
とりあえず3つのデータを作ってみました。
簡単な説明になりますが、6行目あたりにuse(ユーズ文)を追記しましたが、run()メソッドの命令文でDB::table………と17行目に記載されているファサード(::の部分)という機能を使っています。
このDBメソッドを利用しますよと宣言してしないとファサードが利用できません。
ファサードはDBクラスからわざわざインスタンス化しなくてもメソッドを実行できるようにする仕組みを提供してくれるものです。
myblogsテーブルの空のカラムにinsertメソッドを使ってPHPの配列で記述したダミーデータを挿入しなさいという文になっています。
データベースへの挿入
次にdatabase/seddersに最初から生成されているDatabaseSeeder.phpに情報を書き加えます。
書き加えた状態を下記に表示しますので、同じように記述してください。
17行目が追記部分です。
16行目はコメントアウトされていますが、これは後に多数のダミーデータを挿入する方法を説明する時に利用しますので、そのままにしておいてください。
以上が完了しましたら、以下のコマンドを実行してください。
php artisan db:seed
Database seeding completed successfuly.と出たら成功です。
phpMyAdminをリロードしてmyblogsテーブルを確認してみましょう。
以下の様にデータが作成されています。
以上で手動でダミーデータを挿入するを終わります。
かなり細かく説明したつもりですが、至らない点や説明不足がありましたらコメントでもいただけると幸いです。
次回は複数のテストデータの挿入編になります。
お疲れ様でした。