Laravelで標準のUsersテーブルからテーブル名を変更して認証を行う際に修正が必要なファイル

# 環境
Laravelの公式ドキュメントの`macOSで始める`に従って環境構築。
https://readouble.com/laravel/8.x/ja/installation.html?header=Laravel%25E3%2582%25A4%25E3%2583%25B3%25E3%2582%25B9%25E3%2583%2588%25E3%2583%25BC%25E3%2583%25A9

```console
// PHPバージョン
$ sail php --version
PHP 8.1.4 (cli) (built: Apr  4 2022 13:30:33) (NTS)

// Laravelバージョン
$ sail artisan --version
Laravel Framework 9.6.0

// npmバージョン
$ sail npm --version
8.6.0
```

# 背景
新規システム開発でベテランエンジニアのアドバイスで、
「標準のUsersテーブルを現場で使うことはほぼない。」と言われた。

そして次のようなテーブルに変更することになった。

項目|変更内容
---|---
テーブル名|users -> m_user
PKカラム|id -> user_id

上記のような変更点を踏まえてログイン機能を実装することになった。

# 修正が必要なファイルの一覧
基本的に以下のファイルが修正が必要になる。
```:修正が必要なファイルの一覧
// 1.モデル
app/Models/User.php
// 2.登録コントローラー
app/Http/Controllers/Auth/RegisterController.php
// 3.設定ファイル
config/auth.php
// 4.マイグレーションファイル
database/migrations/2014_10_12_000000_create_users_table.php
```

それぞれのファイルの変更箇所を具体的に見ていきましょう！
レッツ、魚ぉ〜！

### モデル[app/Models/User.php]
* テーブル名の明記
* プライマリキーの明記

```php:User.php
protected $table = 'm_user';
protected $primaryKey = 'user_id';
```

### 登録コントローラー[app/Http/Controllers/Auth/RegisterController.php]
* バリデーションルールの中のテーブル名を修正
```php:RegisterController.php
    protected function validator(array $data)
    {
        return Validator::make($data, [
            'name' => ['required', 'string', 'max:255'],
            // 'email' => ['required', 'string', 'email', 'max:255', 'unique:users'], // 元々の記述
            'email' => ['required', 'string', 'email', 'max:255', 'unique:m_user'], // unique:users -> unique:m_userに変更
            'password' => ['required', 'string', 'min:8', 'confirmed'],
        ]);
    }
```

このバリデーションルールで、uniqueを指定した場合、指定したテーブルのなかに該当のカラムを条件に、一致するものをcountするSQLが実行されるようです。
なので、ここでテーブル名を変更していないと、「テーブルが存在しません」っていうSQLエラーが表示されます。

### 設定ファイル[config/auth.php]
* 認証系の設定箇所でテーブル名を指定している部分の修正
あまり細かいことは理解できていません。
なので、全てが必要かどうかは分かっておりません。

以下の４箇所について修正が必要そう（usersの記述がある）
* Authentication Defaults
* Authentication Guards
* User Providers
* Resetting Passwords

```php:auth.php
// Authentication Defaults
    'defaults' => [
        'guard' => 'web',
        // 'passwords' => 'users',
        'passwords' => 'm_user',
    ],

// Authentication Guards
    'guards' => [
        'web' => [
            'driver' => 'session',
            // 'provider' => 'users',
            'provider' => 'm_user',
        ],
    ],

// User Providers
    'providers' => [
        'm_user' => [ // ここが変更箇所！
            'driver' => 'eloquent',
            'model' => App\Models\User::class,
        ],
        // ↓最初からコメントアウトされていました。
        // 'users' => [
        //     'driver' => 'database',
        //     'table' => 'users',
        // ],
    ],

// Resetting Passwords
    'passwords' => [
        'm_user' => [
            'provider' => 'm_user',
            'table' => 'password_resets',
            'expire' => 60,
            'throttle' => 60,
        ],
    ],
```

### マイグレーションファイル[database/migrations/2014_10_12_000000_create_users_table.php]

マイグレーションファイルのテーブル名とプライマリキーの記述箇所を修正

```php:2014_10_12_000000_create_users_table.php
    public function up()
    {
        // createの第１引数渡すテーブル名を変更
        Schema::create('m_user', function (Blueprint $table) {
            $table->id('user_id'); // プライマリキーの名前を指定
            $table->string('name');
            $table->string('email')->unique();
            $table->string('password');
            $table->timestamps();
        });
    }
```

# まとめ
今回は完全に新しく認証に使用するモデルを作成したわけではないので、テーブル名の変更って形で行けたのかと思います。

独自のモデルで認証系を組む場合は、もっと別の留意点がありそうです。

middlewareも絡んでくるだろうし、その場合はちょっと時間がかかりそうな感じがしますが、それはまた追々・・・