Laravelのコントローラルーティングとは?初心者でもわかるresource・actionルートの使い方
生徒
「Laravelで、URLと処理を分けるコントローラって便利そうですが、ルートの書き方が色々あってよくわかりません…」
先生
「Laravelでは、ルートとコントローラを組み合わせて、スッキリとした書き方ができるんですよ。特にresourceルートとactionルートという2つの便利な方法があります。」
生徒
「それってどう違うんですか?初心者でも使いやすい方法を教えてください!」
先生
「それでは今回は、コントローラルーティングの基本と、2種類の書き方について一緒に学んでいきましょう!」
1. Laravelのコントローラルーティングとは?
コントローラルーティングとは、Laravelでルート(URLの入口)とコントローラ(処理をまとめた部分)を組み合わせて、効率よくルーティングを管理する方法です。
たとえば、フォームの入力を受け取ったり、データを一覧表示したりするときに、処理をコントローラに分けて記述することで、ルートファイルがスッキリします。
2. 単一アクションのルーティング(actionルート)
まずは基本的なコントローラルートの書き方を見てみましょう。actionルートでは、1つのルートに対して、コントローラの1つのメソッド(関数)を指定します。
use Illuminate\Support\Facades\Route;
use App\Http\Controllers\HelloController;
Route::get('/hello', [HelloController::class, 'index']);
このコードでは、/helloというURLにアクセスすると、HelloControllerのindexメソッドが実行されます。
コントローラの中身は次のように書きます。
namespace App\Http\Controllers;
use Illuminate\Http\Request;
class HelloController extends Controller
{
public function index()
{
return 'こんにちは、コントローラからのメッセージです';
}
}
3. 複数の処理をまとめて管理するresourceルート
resourceルートを使うと、1行で「一覧表示・新規作成・保存・編集・更新・削除」などの処理をまとめて設定できます。
use App\Http\Controllers\UserController;
Route::resource('users', UserController::class);
この1行で、次のようなURLとアクションが自動的に作られます。
- GET /users → index()
- GET /users/create → create()
- POST /users → store()
- GET /users/{id} → show()
- GET /users/{id}/edit → edit()
- PUT/PATCH /users/{id} → update()
- DELETE /users/{id} → destroy()
このように、7つのルートが一気に定義されるので、効率的で見やすいコードになります。
4. resourceルート用のコントローラの書き方
resourceルートに対応するには、7つのメソッドをコントローラに用意します。以下は一部の例です。
namespace App\Http\Controllers;
use Illuminate\Http\Request;
class UserController extends Controller
{
public function index()
{
return 'ユーザーの一覧表示';
}
public function show($id)
{
return 'ユーザーの詳細(ID: '.$id.')';
}
public function create()
{
return '新規ユーザー作成フォーム';
}
// その他のメソッドも同様に記述します
}
必要な処理ごとにメソッドを用意しておけば、Laravelが自動的にルーティングしてくれるのです。
5. 特定のメソッドだけ使いたいとき
resourceルートの便利なところは、必要なメソッドだけを選んで使うこともできる点です。
Route::resource('users', UserController::class)->only([
'index', 'show'
]);
このようにonly()で指定すれば、indexとshowだけが有効になります。逆に、except()を使えば除外もできます。
Route::resource('users', UserController::class)->except([
'destroy'
]);
6. コントローラルートを使うメリット
- ルート定義がスッキリして読みやすくなる
- 処理を1か所にまとめられて再利用しやすい
- 大規模アプリでも管理しやすくなる
- コーディングのミスを減らせる
Laravelのコントローラルーティングは、アプリの規模が大きくなるほど効果を発揮します。最初は覚えることが多いですが、少しずつ慣れていきましょう。
まとめ
Laravelのコントローラルーティングは、開発を進めるうえで欠かせない基礎となるしくみであり、URLと処理を自然に結びつける重要な役割を果たします。とりわけ、単一アクションで構成するactionルートと、複数の画面や操作を一括で扱えるresourceルートは、初心者でも使いやすい構造を備えています。これらを理解すると、アプリケーション全体の流れが見えやすくなり、処理を整理しながら開発を進められるようになります。
とりわけresourceルートのように、一行で七つのルートが自動生成される仕組みは、画面数が増えるほど便利さが際立ちます。ひとつひとつルートを追加していた作業を省けるので、記述が美しくまとまり、変更時の修正範囲も最小限に抑えられます。また、onlyやexceptを使えば必要な処理だけを柔軟に取り出せるため、無駄のない構成でアプリケーションを保てます。
さらに、コントローラ側ではindexやshow、createといった定型的なメソッド名が決まっているため、複数人のチームで開発するときでも迷いなく役割を共有できます。役割が明確で規則性があるので、検索や修正といった作業も効率的に行うことができます。初心者であっても、この規則性を理解すれば、機能追加のたびにどこを編集すべきかがすぐに判断できるようになります。
また、Laravelのコントローラルーティングは、単なるルート設定にとどまらず、アプリケーション全体を整理するための“地図”のような存在です。複雑な処理を整理し、見通しのよい開発につなげるための土台をつくるポイントとして押さえておくと、のちの拡張や改善作業にも大きく役立ちます。
下記は、今回学んだ内容を振り返るために書いた簡易的なサンプルコードです。resourceルートと単一actionルートがどのように共存できるのかを、実際の記述に寄せてまとめています。
ルートとコントローラのサンプルコード
use Illuminate\Support\Facades\Route;
use App\Http\Controllers\HelloController;
use App\Http\Controllers\UserController;
Route::get('/hello', [HelloController::class, 'index']);
Route::resource('users', UserController::class)->only([
'index', 'show', 'create'
]);
Route::resource('members', UserController::class)->except([
'destroy'
]);
namespace App\Http\Controllers;
use Illuminate\Http\Request;
class UserController extends Controller
{
public function index()
{
return 'ユーザー一覧';
}
public function show($id)
{
return 'ユーザー詳細: ' . $id;
}
public function create()
{
return 'ユーザー作成ページ';
}
}
このように、Laravelのルーティングとコントローラは役割がはっきりと分かれており、扱い方を理解すれば開発の流れがとてもなめらかになります。コントローラに処理を集約し、ルートには“どの処理を呼び出すか”だけを記述することで、アプリケーション全体が自然と整理されていきます。操作が増えても混乱せず、あとから内容を確認したいときも迷わず目的の処理を探せるようになります。
生徒
「今回の学びで、どうしてLaravelのルーティングが大事なのか少しわかった気がします。特にresourceルートが一行で七つの処理をまとめられるのは、とても便利ですね。」
先生
「そうですね。処理を整理するだけでなく、どの部分がどの役割を持っているのかが明確になるので、結果的に開発も読みやすく保てるんですよ。規模が大きくなるほど、そのメリットが大きくなります。」
生徒
「actionルートとresourceルートの違いも理解できました。単一の処理だけならaction、複数の画面を扱うときやCRUD操作がそろっているときはresource…という使い分けが自然なんですね。」
先生
「ええ、その通りです。まずは基本の七つのメソッドに慣れて、必要なときにonlyやexceptを使い分けできるようになると、一気にLaravelが扱いやすくなりますよ。」
生徒
「はい!今日の内容を実際のアプリで試しながら、もっと理解を深めていきたいです。」
先生
「ぜひ実践してみてください。実際に手を動かすと、ルートとコントローラの関係がより立体的に見えてきますよ。」