PHP備忘録：Laravelで新規登録機能を構築するまでのステップを整理してみた

## はじめに

Laravel で新規登録機能を実装する方法について、手順とサンプルコードをまとめました。**個人の備忘録程度の走り書きとなっておりますが、温かい目で見守っていただければ幸いです。**

## 書こうと思ったきっかけ

個人的に PHP のキャッチアップをしたくて Laravel を学習中です。その過程で、簡単なユーザー登録機能を実装しましたので、忘れないように備忘録として記録します。

## 内容

### ステップ一覧（新規登録機能）

#### ① users テーブルの確認

初期のマイグレーションで含まれています。確認コマンド：

```bash
docker compose exec php-app php artisan migrate:status
```

create\_users\_table が \[Ran] でなければ以下でマイグレーションを実行：

```bash
docker compose exec php-app php artisan migrate
```

#### ② User モデルを確認

`app/Models/User.php` にあり、編集はまだ不要。

#### ③ AuthController の作成

```bash
docker compose exec php-app php artisan make:controller AuthController
```

#### ④ コントローラの編集

`app/Http/Controllers/AuthController.php`

```php
<?php

namespace App\Http\Controllers;

use App\Models\User;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Hash;

class AuthController extends Controller
{
    public function showRegisterForm()
    {
        return view('auth.register');
    }

    public function register(Request $request)
    {
        $validated = $request->validate([
            'name' => 'required|max:255',
            'email' => 'required|email|unique:users',
            'password' => 'required|min:6|confirmed',
        ]);

        User::create([
            'name' => $validated['name'],
            'email' => $validated['email'],
            'password' => Hash::make($validated['password']),
        ]);

        return redirect('/register')->with('success', 'ユーザー登録が完了しました');
    }
}
```

#### ⑤ ルート設定を追加

`routes/web.php`

```php
use App\Http\Controllers\AuthController;

Route::get('/register', [AuthController::class, 'showRegisterForm']);
Route::post('/register', [AuthController::class, 'register']);
```

#### ⑥ Blade テンプレート作成

`resources/views/auth/register.blade.php`

```blade
<!DOCTYPE html>
<html lang="ja">
<head>
    <meta charset="UTF-8">
    <title>ユーザー登録</title>
</head>
<body>
    <h1>ユーザー登録フォーム</h1>

    @if (session('success'))
        <p style="color:green">{{ session('success') }}</p>
    @endif

    @if ($errors->any())
        <ul style="color:red;">
            @foreach ($errors->all() as $error)
                <li>{{ $error }}</li>
            @endforeach
        </ul>
    @endif

    <form method="POST" action="/register">
        @csrf
        <label>名前: <input type="text" name="name" value="{{ old('name') }}"></label><br>
        <label>メールアドレス: <input type="email" name="email" value="{{ old('email') }}"></label><br>
        <label>パスワード: <input type="password" name="password"></label><br>
        <label>パスワード（確認）: <input type="password" name="password_confirmation"></label><br>
        <button type="submit">登録</button>
    </form>
</body>
</html>
```

### アクセス確認

ブラウザで次の URL にアクセス：

```
http://localhost:8080/register
```

**実際の画面**

![Screenshot 2025-05-10 at 21.29.43.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3662571/70270078-283d-4d2a-9b40-030a236d4af2.png)

**PW制御画面**

![Screenshot 2025-05-10 at 21.31.08.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3662571/6bb58540-2b43-4981-bb49-caf2c1619d5f.png)

![Screenshot 2025-05-10 at 21.34.30.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3662571/9bd5e88c-7778-4004-a7c6-45ce88a9ec4d.png)

**DB登録後画面**

![Screenshot 2025-05-10 at 21.52.16.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3662571/016ba0ed-c57a-4c5f-9764-ece4e6f93490.png)

## まとめ

Laravel ではコマンドとディレクトリ構成が整理されており、登録機能の追加も簡単でした。

今回のステップを覚えておけば、今後のログイン機能やバリデーション処理にも応用できると思いました...！