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 によるコメント掲示板の開発

マイグレーションファイルを生成する

ここでは投稿されたコメントの内容を格納する comments テーブルを作成します.なお,テーブル名は小文字の複数形で指定することに注意してください.Laravel ではテーブルの作成や変更,ロールバックなどのデータベースの操作をマイグレーションファイルを通じて行います.まずは,comments テーブルを作成するために,マイグレーションファイルを生成します.マイグレーションファイルの生成には php artisan コマンドを使用します.次のコマンドによって database/migrations/ ディレクトリ内にコマンドを実行した日時から始まるファイルが生成されます.

vagrant@ubuntu2204 comment_app $ pwd ⏎
/home/vagrant/Documents/laravel/comment_app
vagrant@ubuntu2204 comment_app $ php artisan make:migration create_comments_table --create=comments ⏎

   INFO  Migration [database/migrations/2023_10_15_115031_create_comments_table.php] created successfully.

vagrant@ubuntu2204 comment_app $

上の作業によってリモート (ubuntu) のプロジェクト内にファイルが生成されました.しかしながら,ローカルのクライアント PC にはまだそのファイルが存在しません.リモートでファイルを操作した後には,次の通り Visual Studio Code でファイル同期を手動で実行するようにしてください.

Visual Studio Code で database/migration フォルダを開きます.まだ,生成されたマイグレーションファイルがローカルに存在しないことを確認します.

laravel10-2023-comment-10.png

ショートカットキー Ctrl + Shift + P (mac は + shift + P)でコマンドパレットを起動します.「SFTP」と入力して検索して(あるいは,最近使用した一覧から探して),「SFTP: Sync Remote -> Local」を選んで同期します.

laravel10-2023-comment-11.png

ローカルの database/migration フォルダにファイルが同期されたことを確認して開きます.

laravel10-2023-comment-12.png

生成されたファイルは次のような内容になっているはずです.

laravel10-2023-comment-13.png
database/migrations/yyyy_mm_dd_hhmmss_create_comments_table.php
<?php

use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;

return new class extends Migration
{
    /**
     * Run the migrations.
     */
    public function up(): void
    {
        Schema::create('comments', function (Blueprint $table) {
            $table->id();
            $table->timestamps();
        });
    }

    /**
     * Reverse the migrations.
     */
    public function down(): void
    {
        Schema::dropIfExists('comments');
    }
};

生成されたマイグレーションファイルを修正します.次の通り,up 関数に comments テーブルの構造を指定します.主キーとなる id フィールドは id() によって生成でき,自動的に番号が付与されます.title フィールドはコメントのタイトルを255文字以内で記録し,本文は body フィールドに格納します.また最初の投稿日時と最終更新日時を記録するための created_at フィールドと updated_at フィールドは timestamps() によって生成できます.

database/migrations/yyyy_mm_dd_hhmmss_create_comments_table.php
    public function up(): void
    {
        Schema::create('comments', function (Blueprint $table) {
            $table->id();
            $table->string('title', 255);
            $table->text('body');
            $table->timestamps();
        });
    }

データベースにテーブルを作成するには php artisan migrate コマンドを実行します.このコマンドによって database/migrations/ ディレクトリにあるマイグレーションファイルの中から,まだ実行されていないマイグレーションファイルだけが実行されます.どのファイルが実行されているかを確認するためには php artisan migrate:status コマンドを実行します.また,マイグレーションの実行を元に戻す(つまりロールバックする)ためには php artisan migrate:rollback コマンドを実行します.

次の例では,(1) マイグレーションの状態を確認(まだマイグレーションのテーブル自体がない),(2) マイグレーションの実行(テーブルの作成),(3) マイグレーションの状態を確認(全てのテーブルが実行された) (4) ロールバック,(5) マイグレーションの状態確認(全てが実行されていない),(6) マイグレーションの実行,の順で作業しています.

vagrant@ubuntu2204 comment_app $ php artisan migrate:status ⏎

   ERROR  Migration table not found.

vagrant@ubuntu2204 comment_app $ php artisan migrate ⏎

   INFO  Preparing database.

  Creating migration table ................................. 16ms DONE

   INFO  Running migrations.

  2014_10_12_000000_create_users_table ..................... 13ms DONE
  2014_10_12_100000_create_password_reset_tokens_table ...... 6ms DONE
  2019_08_19_000000_create_failed_jobs_table ............... 12ms DONE
  2019_12_14_000001_create_personal_access_tokens_table .... 18ms DONE
  2023_10_15_115031_create_comments_table ................... 6ms DONE

vagrant@ubuntu2204 comment_app $ php artisan migrate:status ⏎

  Migration name ...................................... Batch / Status
  2014_10_12_000000_create_users_table ....................... [1] Ran
  2014_10_12_100000_create_password_reset_tokens_table ....... [1] Ran
  2019_08_19_000000_create_failed_jobs_table ................. [1] Ran
  2019_12_14_000001_create_personal_access_tokens_table ...... [1] Ran
  2023_10_15_115031_create_comments_table .................... [1] Ran

vagrant@ubuntu2204 comment_app $ php artisan migrate:rollback ⏎

   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 ................ 4ms DONE
  2014_10_12_100000_create_password_reset_tokens_table ...... 5ms DONE
  2014_10_12_000000_create_users_table ...................... 5ms DONE

vagrant@ubuntu2204 comment_app $ php artisan migrate:status ⏎

  Migration name ...................................... Batch / Status
  2014_10_12_000000_create_users_table ....................... Pending
  2014_10_12_100000_create_password_reset_tokens_table ....... Pending
  2019_08_19_000000_create_failed_jobs_table ................. Pending
  2019_12_14_000001_create_personal_access_tokens_table ...... Pending
  2023_10_15_115031_create_comments_table .................... Pending

vagrant@ubuntu2204 comment_app $ php artisan migrate ⏎

   INFO  Running migrations.

  2014_10_12_000000_create_users_table ..................... 17ms 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

vagrant@ubuntu2204 comment_app $

目次に戻る