CPIスタッフブログはレンタルサーバーナレッジにうまれ変わりました。13:00前回はLaravelのマイグレーション機能についてご紹介しました。今回はマイグレーション機能で作成したテーブルに初期データを登録するシーディング機能と、ダミーの氏名や住所、メールアドレス、電話番号などを簡単に自動生成できるFakerライブラリの使い方についてご紹介します。どちらも開発中の動作確認やテスト環境の準備にとても役に立つ機能です。データベースの準備に費やす時間を大幅に短縮することができるので、LaravelでWebアプリを開発する際にはぜひ利用してみてください。Laravelのシーディング機能とは?シーディング(Seeding)は英語で「種まき」や「田植え」といった意味の単語で、データベースに初期データやテストデータを流し込むことを種まきに例えています。初期データとは、都道府県名や部署名などの名称とシステム内で利用するコード値を紐付けるマスタ情報や、管理者ユーザーのログイン情報など、Webアプリを動かす上ではじめから登録されていることが前提になるデータです。テストデータとは、動作確認や試験を行うために準備するデータで、本番用のデータとは異なるダミーのデータのことです。これらのデータは、データベースを初期化するたびに毎回登録し直さなければいけません。テストを行う際には、テスト項目ごとにテストデータを入れ替える必要があるので、頻繁にデータベースの初期化とテストデータの登録を繰り返します。した作業にかかる時間を短縮できるのが、Laravelのシーディング機能です。初期データやテストデータの内容を記述したシーダーファイルを作成して、Artisanコマンドを実行することで、その内容に沿ったデータがデータベースに登録されます。一度シーダーファイルを作れば、後はコマンドを実行するだけでデータベース上に初期データやテストデータの再現が可能になります。マイグレーションファイルをもとにテーブルを作成するマイグレーション機能と同じく、SQLを使わずにデータベースの操作が可能になりますので、SQLが苦手な方にもおすすめです。make:seederコマンドを実行することで、はじめから用意されている雛形を元に自動で生成することができます。Laravelプロジェクト(PROJECT_NAME)に移動して、以下のコマンドを実行します。TestUserSeeder今回はLaravelに標準で存在するユーザー管理用のUserテーブルに対して初期データの登録を行うシーダーを作成します。make:seederコマンドで生成してください。成功すると、シーダーファイルがdatabase/seeds/の直下に作成されます。シーダーファイルの書き方2.1で生成したシーダーファイルは何も処理が書かれていない空っぽの状態なので、データベースに登録したい初期データの内容をそれぞれのファイルに記述していきます。管理ユーザー登録用のAdminUserSeederファイルをテキストエディタで開いて編集します。}}今回は「管理者ABC」「管理者DEF」という名前のユーザーを登録します。※Userテーブルに対する操作なので、モデルクラス(User.php)は初めから存在しているものを利用できますが、自作のテーブルにデータを追加する場合はモデルクラスをあらかじめ作成しておく必要があります。User::createプロシージャの引数で、連想配列に“name”、”email”、”password”というキーにそれぞれ値を設定していますが、これらのキーがテーブルのカラム名に対応しています。“name”というキーの配列に設定した値(「管理者ABC」「管理者DEF」)はUserテーブルの”name”カラムに挿入されます。次に、テスト用ユーザー登録用のTestUserSeederファイルをテキストエディタで開いて編集します。}}テストデータではたくさんのデータが必要となるため、ループを使って100件のユーザーをUserテーブルに登録します。このように、ループや条件分岐が使えるのもシーダーファイルを利用するメリットのひとつです。シーダーファイルの作成が終わりましたら、作成したシーダーファイルをLaravelに認識させるためにオートロードの再構成を行います。dump-autoloadLaravelは必要なファイルを自動的に読み込む、composerのオートロードという仕組みを利用しています。exist」というエラーが発生することがあります。上記のエラーが発生したら、まずオートロードの再構成を行ってみてください。作成したシーダーファイルは、Artisanコマンドを使ってシーディングを行うのに使います。Artisanコマンドでシーディングを実行する方法は複数ありますので、代表的なものをご紹介します。--class=AdminUserSeeder--classというオプションに実行したいシーダーファイルのクラス名を指定してください。いうメッセージが出力されれば成功です。データベースに管理者ユーザーのデータが追加されているのを確認してください。複数のシーダーファイルをまとめて実行する3.1の方法ですと、1回のコマンドにつき1つのシーダーファイルしか実行することができません。シーダーファイルの数が少なければ問題ありませんが、数が増えてくるとデータベースを初期化するたびにファイルの数だけコマンドを実行しなければならないので、少し不便です。database/seedsにはじめから存在するDatabaseSeeder.phpを利用すれば、複数のシーダーファイルをまとめて実行できるので、その方法をご紹介します。コマンドを実行する前に、DatabaseSeeder.phpに今回作成したシーダーファイルの情報を追記していきます。}}上記のように、$this->callの引数の配列に、使いたいシーダーファイルを追加するだけです。これで複数にシーダーファイルを実行する準備は完了です。db:seedコマンドでシーディングを実行してみましょう。db:seed3.1ではオプションでシーダーファイルのクラス名を指定しましたが、DatabaseSeederをもとにシーディングを実行する際にはクラス名の指定は不要です。データベースに管理者ユーザーのデータとテストユーザーのデータが追加されているのを確認してください。データベースを初期化して、シーダーファイルを実行する前項ではDatabaseSeederを利用して、複数のシーダーファイルをまとめて実行する方法を紹介しました。それだけではなく、データベースを初期化してからシーディングを行うという手順を1つのコマンドにまとめることもできます。migrate:refreshコマンドのオプションに--seedを指定すると、データベースの初期化後にDatabaseSeederのシーディングが自動で実行されます。実際に開発やテストを始めると、こちらのコマンドのほうが使用する機会が多いですので、ぜひ覚えて使ってみてください。FakerライブラリLaravelにはダミーデータを自動生成するためのPHPライブラリFakerが標準でインストールされています。今回はそれを使って、面倒なテスト用のダミーデータ作成を時間短縮する方法をご紹介します。作成したテストユーザーのデータを、より現実的なデータに変更してみましょう。}}Laravelでは、Factory::createプロシージャを呼び出すだけで、様々なダミーデータを自動生成することができます。今回は苗字(lastName)、名前(firstName)、メールアドレス(email)のダミーデータを利用します。Factory::createプロシージャの戻り値$fakerにダミーデータが格納されていますので、それぞれ対応するフィールドから値を取得します。シーダーファイルの編集が終わりましたら、データベースの初期化とシーディングを実行します。--seedデータベースに登録されたテストユーザーの名前とメールアドレスが、より本物のデータに近いダミーになっていることを確認してください。Fakerライブラリで生成できるダミーデータFakerライブラリで生成できるダミーデータには、名前やメールアドレスの他にもたくさんあります。以下に利用する頻度が高いものをご紹介します。最後に今回はLaravelのシーディング機能についてご紹介しました。前回のマイグレーション機能と合わせて使いこなせば、開発中のデータベースの変更が非常にスピーディーにできるようになります。テストにおいては、テストケースごとにシーダーファイルを作ることで、すぐに試験環境の再現が可能になります。このようにメリットしかないLaravelのシーディング機能、ぜひ活用してみてください。SV-Basic」を語る!TwitterCPIのTwitterアカウントでは、サイト、サーバー管理者のための重要なセキュリティ情報や、サイト運営者のためのヒント、お得なキャンペーン情報をお知らせしています。cpiadjpツイートPocket掲載内容について、当社は情報の掲載には細心の注意を払っておりますが、完全性などについて保証を行うものではありませんので予めご了承ください。許諾等について問題が発生した場合などについて、当社は一切の責任を負いません。掲載されている情報を利用したサイト製作については、ご自身の責任において行ってください。