Laravel 10 入門トップページ


目次

  1. プロジェクトを作成する
  2. データベースファイルを作成する
  3. Visual Studio Code を設定する
  4. .env を編集して初期設定する
  5. タイムゾーンと言語を設定する
  6. Webサーバを起動して終了する
  7. マイグレーションファイルを生成する
  8. テスト用データを設定する
  9. モデルを作成する
  10. コントローラを作成する
  11. ルートを定義する
  12. データベースからデータを取り出す
  13. トップページにリンクを設置する
  14. ビューを使ってレコードを表示する
  15. コメントを個別に表示するページを作成する
  16. コメント投稿機能を実装する
  17. 投稿内容を検証する
  18. 投稿内容を編集する
  19. 投稿コメントを削除する
  20. テストの自動化を実現する
  21. テストカバレッジを計測する
  22. 複数のLinuxコマンドを実行し,履歴からも実行する
  23. ビューをレイアウト化する
  24. Bootstrap を導入する
  25. SQLite を操作する
  26. フェイカでシーダを拡張する
  27. ページネーションを作る
  28. シーダに登録日時と更新日時を追加する
  29. 一覧表示を更新日時の降順にする
  30. フラッシュメッセージを表示する
  31. スタイルシートでデザインを整える

Laravel によるコメント掲示板の開発

フェイカでシーダを拡張する

これまではテストデータが3件しかなかったので,ここではシードを増やして100件にします.シードを増やすためには,database/seeders/CommentsTableSeeder.phpinsert を追加するだけです.しかしながら,デタラメなデータを大量に作成するのも骨が折れる作業です.Laravel には Faker というフェイクデータを生成する便利な機能があるので,これを利用してみよう.

database/seeders/CommentsTableSeeder.php<?php

namespace Database\Seeders;

use Illuminate\Database\Console\Seeds\WithoutModelEvents;
use Illuminate\Database\Seeder;
use Illuminate\Support\Facades\DB;

class CommentsTableSeeder extends Seeder
{
    /**
     * Run the database seeds.
     */
    public function run(): void
    {
        // 一旦中身を削除する
        DB::table('comments')->delete();

        DB::table('comments')->insert([
            'title' => '最初のコメント',
            'body' => '最初のコメントです!'
        ]);

        DB::table('comments')->insert([
            'title' => '2つ目',
            'body' => '2つ目のコメントです!'
        ]);

        DB::table('comments')->insert([
            'title' => '<三個目>のコメント',
            'body' => 'シーダによってテストデータを設定します.'
        ]);

        DB::table('comments')->insert([
            'title' => fake()->name(),
            'body' => fake()->address() . " / " .  fake()->unique()->safeEmail()
        ]);
    }
}

シーダを変更したので,データベースのロールバック,マイグレーション,シードの設定を行います.

vagrant@ubuntu2204 comment_app $ php artisan migrate:rollback; php artisan migrate; php artisan db:seed ⏎

   INFO  Rolling back migrations.

  2023_10_15_115031_create_comments_table ................... 12ms DONE
  2019_12_14_000001_create_personal_access_tokens_table ...... 5ms DONE
  2019_08_19_000000_create_failed_jobs_table ................. 6ms DONE
  2014_10_12_100000_create_password_reset_tokens_table ....... 4ms DONE
  2014_10_12_000000_create_users_table ....................... 5ms DONE


   INFO  Running migrations.

  2014_10_12_000000_create_users_table ...................... 10ms DONE
  2014_10_12_100000_create_password_reset_tokens_table ....... 5ms DONE
  2019_08_19_000000_create_failed_jobs_table ................. 8ms DONE
  2019_12_14_000001_create_personal_access_tokens_table ..... 12ms DONE
  2023_10_15_115031_create_comments_table .................... 4ms DONE


   INFO  Seeding database.

  Database\Seeders\CommentsTableSeeder ........................ RUNNING
  Database\Seeders\CommentsTableSeeder .................. 36.26 ms DONE

vagrant@ubuntu2204 comment_app $

フェイクデータを追加できていることが確認できました.なお,フェイクデータの言語設定はすでにここで行なっていたので,日本語のデータなっていることに注意してください.

laravel10-2023-comment-49.png

次に,当初から設定されていた3件のデータに加えて97件のフェイクデータを追加して,合計のデータ数が100件になるように変更してみます.

database/seeders/CommentsTableSeeder.php<?php

namespace Database\Seeders;

use Illuminate\Database\Console\Seeds\WithoutModelEvents;
use Illuminate\Database\Seeder;
use Illuminate\Support\Facades\DB;

class CommentsTableSeeder extends Seeder
{
    /**
     * Run the database seeds.
     */
    public function run(): void
    {
        // 一旦中身を削除する
        DB::table('comments')->delete();

        DB::table('comments')->insert([
            'title' => '最初のコメント',
            'body' => '最初のコメントです!'
        ]);

        DB::table('comments')->insert([
            'title' => '2つ目',
            'body' => '2つ目のコメントです!'
        ]);

        DB::table('comments')->insert([
            'title' => '<三個目>のコメント',
            'body' => 'シーダによってテストデータを設定します.'
        ]);

        $i = 1;
        while ($i < 98) {
            DB::table('comments')->insert([
                'title' => fake()->name(),
                'body' => fake()->address() . " / " .  fake()->unique()->safeEmail()
            ]);
            $i++;
        }

    }
}

もう一度,データベースをリセットします.データの投入に必要な時間(ミリ秒単位)が増加していることもわかります.

vagrant@ubuntu2204 comment_app $ php artisan migrate:rollback; php artisan migrate; php artisan db:seed ⏎

   INFO  Rolling back migrations.

  2023_10_15_115031_create_comments_table ................... 16ms DONE
  2019_12_14_000001_create_personal_access_tokens_table ...... 6ms DONE
  2019_08_19_000000_create_failed_jobs_table ................. 5ms DONE
  2014_10_12_100000_create_password_reset_tokens_table ....... 5ms DONE
  2014_10_12_000000_create_users_table ....................... 5ms DONE


   INFO  Running migrations.

  2014_10_12_000000_create_users_table ...................... 10ms DONE
  2014_10_12_100000_create_password_reset_tokens_table ....... 4ms DONE
  2019_08_19_000000_create_failed_jobs_table ................. 8ms DONE
  2019_12_14_000001_create_personal_access_tokens_table ..... 11ms DONE
  2023_10_15_115031_create_comments_table .................... 4ms DONE


   INFO  Seeding database.

  Database\Seeders\CommentsTableSeeder ........................ RUNNING
  Database\Seeders\CommentsTableSeeder ................. 473.99 ms DONE

vagrant@ubuntu2204 comment_app $

合計で100件のデータが登録されているこを確認します.毎回値は異なりますが,簡単に大量のデータを生成できることがわかります.

laravel10-2023-comment-50.png

目次に戻る