プログラミング

Laravel Todoリスト認証実装

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コマンドを実行することで、認証に必要なすべてのビュー、コントローラ、ルートが自動的に生成されます。このコマンドを実行する前に、まず認証関連のマイグレーションを実行する必要があります。

bash
php artisan make:auth

このコマンドにより、認証に関連するビューやルート、コントローラが生成されます。次に、データベースの設定を行い、マイグレーションを実行します。

bash
php artisan migrate

これで、usersテーブルがデータベースに作成され、ユーザー認証機能が使用可能になります。

1.2 ルートの確認

routes/web.phpファイルには、認証に関連するルートがすでに定義されています。デフォルトでは、ログイン、登録、パスワードリセットなどのルートが設定されています。

php
Auth::routes();

これにより、ログイン、登録、ログアウトなどの基本的なルートが設定されます。

1.3 コントローラの確認

認証に関連する処理は、Auth名前空間にあるコントローラで管理されています。例えば、LoginControllerRegisterControllerがユーザーのログインや新規登録を処理します。これらのコントローラをカスタマイズして、アプリに合わせた処理を追加できます。

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カラムを追加します。

bash
php 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テーブルに追加します。

bash
php 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リストにステータスの管理機能を追加し、ユーザーインターフェースをさらに改善していきます。

Back to top button