Laravel 5でシンプルなTodoリストアプリを作成する – 第3部
これまでのシリーズでは、Laravel 5を使用してTodoリストアプリを作成する方法を学んできました。第1部ではLaravelのインストールとセットアップを行い、第2部では基本的なCRUD(作成、読み取り、更新、削除)の操作を実装しました。今回は、ユーザー認証を実装し、さらにアプリケーションを強化する方法について詳しく説明します。
1. ユーザー認証のセットアップ
Todoリストアプリにユーザー認証機能を追加することで、各ユーザーが個別にTodoリストを管理できるようになります。Laravel 5では、認証機能を簡単に追加できるAuthパッケージが用意されています。
1.1 認証機能のインストール
Laravel 5では、php artisan make:authコマンドを実行することで、認証に必要なすべてのビュー、コントローラ、ルートが自動的に生成されます。このコマンドを実行する前に、まず認証関連のマイグレーションを実行する必要があります。
bashphp artisan make:auth
このコマンドにより、認証に関連するビューやルート、コントローラが生成されます。次に、データベースの設定を行い、マイグレーションを実行します。
bashphp artisan migrate
これで、usersテーブルがデータベースに作成され、ユーザー認証機能が使用可能になります。
1.2 ルートの確認
routes/web.phpファイルには、認証に関連するルートがすでに定義されています。デフォルトでは、ログイン、登録、パスワードリセットなどのルートが設定されています。
phpAuth::routes();
これにより、ログイン、登録、ログアウトなどの基本的なルートが設定されます。
1.3 コントローラの確認
認証に関連する処理は、Auth名前空間にあるコントローラで管理されています。例えば、LoginControllerやRegisterControllerがユーザーのログインや新規登録を処理します。これらのコントローラをカスタマイズして、アプリに合わせた処理を追加できます。
2. Todoモデルの修正
認証機能を追加したことで、各Todoが特定のユーザーに関連付けられるようにする必要があります。これを実現するために、Todoモデルにユーザーとのリレーションを追加します。
2.1 ユーザーとのリレーションの追加
Todoモデルに、belongsToリレーションを追加して、各Todoがどのユーザーに属しているかを示します。
php// app/Todo.php
public function user()
{
return $this->belongsTo(User::class);
}
次に、Todoモデルのuser_idフィールドが、どのユーザーが作成したTodoであるかを示します。マイグレーションファイルを作成して、todosテーブルにuser_idカラムを追加します。
bashphp artisan make:migration add_user_id_to_todos_table --table=todos
生成されたマイグレーションファイルを以下のように編集します。
php// database/migrations/xxxx_xx_xx_xxxxxx_add_user_id_to_todos_table.php
public function up()
{
Schema::table('todos', function (Blueprint $table) {
$table->unsignedBigInteger('user_id')->after('id');
$table->foreign('user_id')->references('id')->on('users')->onDelete('cascade');
});
}
マイグレーションを実行して、user_idカラムをtodosテーブルに追加します。
bashphp artisan migrate
2.2 コントローラの修正
TodoControllerを修正して、ユーザーが作成したTodoだけを表示するようにします。indexメソッドを以下のように変更します。
php// app/Http/Controllers/TodoController.php
public function index()
{
$todos = Auth::user()->todos; // 現在ログインしているユーザーのTodoを取得
return view('todos.index', compact('todos'));
}
これにより、ログインしているユーザーに関連するTodoリストだけが表示されるようになります。
3. Todoの作成と表示
3.1 Todo作成フォームの修正
Todoを作成する際に、user_idを自動的に設定する必要があります。storeメソッドを以下のように修正します。
php// app/Http/Controllers/TodoController.php
public function store(Request $request)
{
$request->validate([
'title' => 'required|max:255',
'description' => 'nullable',
]);
$todo = new Todo();
$todo->title = $request->title;
$todo->description = $request->description;
$todo->user_id = Auth::id(); // ログインしているユーザーのIDを設定
$todo->save();
return redirect()->route('todos.index');
}
これにより、Todoを作成した際に、そのTodoは必ず現在ログインしているユーザーに関連付けられます。
3.2 Todoリストの表示
Todoリストを表示するビューを修正して、ユーザーごとに関連するTodoを表示できるようにします。
php// resources/views/todos/index.blade.php
@foreach ($todos as $todo)
{{ $todo->title }}
{{ $todo->description }}
@endforeach
これで、ユーザーが自分のTodoリストを確認できるようになります。
4. 結論
今回のチュートリアルでは、Laravel 5を使用してシンプルなTodoリストアプリにユーザー認証機能を追加し、ユーザーごとのTodo管理を実装しました。これにより、各ユーザーが個別にTodoリストを管理できるようになり、アプリケーションの実用性が向上しました。
この基本的な構成を基に、さらに多くの機能を追加することができます。例えば、Todoのステータス管理(完了/未完了)や、期限の設定などを実装して、より高度なアプリケーションに発展させることが可能です。
次回は、Todoリストにステータスの管理機能を追加し、ユーザーインターフェースをさらに改善していきます。
