Laravel初心者のためのルーティング入門 — web.phpで迷わない設計の基本

  • URLをコピーしました!

Laravelを触り始めたばかりの頃、「このURLってどこで処理が決まってるの?」と戸惑った経験はありませんか?

とくに routes/web.php は最初に登場するファイルなのに、何をしているのか分かりにくく、つまずきやすいポイントです。

でも実はここ、Laravelアプリの“入口”として、URLと処理をつなぐ重要な役割を担っています。

この記事では、ルーティングの基本から「なぜそれが必要なのか」「どんな風に書けばいいのか」まで、初めて触れる方にも安心して読んでもらえるよう、わかりやすくまとめていきます。

この記事を読むとわかること

  • Laravelのルーティングの仕組みと routes/web.php の役割
  • GETやPOSTなどのメソッド別ルート設定の基本文法
  • Controllerやミドルウェアを使ったルーティングの整理術と注意点
目次

Laravelのルーティングとは何をしているのか

Laravelのルーティングは、一言で言えば「URLと処理内容を結びつける仕組み」です。

たとえば /hello にアクセスしたときに「こんにちは」と表示させるなら、「そのURLが来たらこの関数を実行してね」とLaravelに教える必要があります。その設定を書く場所が、routes/web.php というファイルです。

最初の頃は、web.phpが何をしているのかよくわからなかったんですが、実はこのファイル、ルーティングの“受付”を担当しています。ブラウザからリクエストが来たら、ここで「このURLならどの処理?」を探して、Controllerや関数に渡していく流れになります。

URLと処理をつなぐ仕組みの概要

Laravelは、リクエストされたURLと、それに対応する処理内容をマッチングさせることでアプリを動かしています。この「対応づけ」がルーティングの本質です。何も設定しなければトップページすら表示されないので、まず最初に手を付ける場所でもあります。

慣れないうちは「どこで処理内容が決まってるの?」と迷子になりがちですが、URL単位で分岐する“地図”のような役割だと考えると、少しイメージしやすくなるかもしれません。

<?php

use Illuminate\Support\Facades\Route;

// トップページ(/)にアクセスしたときの処理
Route::get('/', function () {
    return view('welcome'); // resources/views/welcome.blade.php を表示
});

// /about にアクセスしたときの処理
Route::get('/about', function () {
    return 'このサイトについて';
});

// /user/{name} にアクセスしたときの処理
Route::get('/user/{name}', function ($name) {
    return "こんにちは、{$name}さん!";
});

web.phpが担う役割と仕組み

routes/web.phpは、ブラウザ経由のアクセス(つまりWeb画面向けのリクエスト)に対応するルートを記述するファイルです。Laravelでは他にもAPI用の api.php などがありますが、初学者がまず触るのはほぼweb.phpです。

このファイルに Route::get()Route::post() を書くことで、ルート設定ができます。書いた順に処理されていくため、似たようなURLが並ぶ場合は順序にも少し注意が必要です。

【悪い例】順番を間違えているパターン

Route::get('/user/{id}', function ($id) {
    return "ユーザーID: {$id}";
});

Route::get('/user/create', function () {
    return 'ユーザー作成ページ';
});

// 結果
// /user/123 → OK(ユーザーID:123)
// /user/create → NG(ユーザーID:create」と表示されてしまう

【正しい例】順番を直したパターン

Route::get('/user/create', function () {
    return 'ユーザー作成ページ';
});

Route::get('/user/{id}', function ($id) {
    return "ユーザーID: {$id}";
});

// 結果
// /user/create→ OK(ユーザー作成ページ)
// /user/create → OK(ユーザーID:123」

最初に覚えるGETとPOSTの違い

最初につまずきやすいのが、GETPOSTの違いです。ざっくり言えば、GETは「見る」ため、POSTは「送る」ためのメソッドです。

画面を表示したいときはGET、フォームからデータを送るときはPOSTを使います。

これはルーティングでも重要で、意図と異なるHTTPメソッドでルートを設定すると、「ちゃんと書いたのに動かない」ということになります。初心者の頃、私はよくそれでハマりました…。


ルーティングの基本的な書き方と文法

Laravelでは、ルートの記述に Route::get()Route::post() などのメソッドを使います。ここでURLパスと、それに対する処理をセットで定義します。基本はこの形を覚えるところから始まります。

例えば、以下のように書くと /hello にアクセスされたときに文字列を返します。

Route::get('/hello', function () {
    return 'こんにちは、Laravel!';
});

これは「クロージャ」という簡易的な書き方で、小さな処理にはとても便利です。

Route::getなどの基本構文の解説

基本構文はとてもシンプルです。Route::メソッド(パス, 関数やController)という形式で、最初に覚えるべきなのはこの3つ:

Route::get('/example', ...);   // 表示用
Route::post('/submit', ...);   // フォーム送信用
Route::put('/update', ...);    // 更新用(APIでよく使う)

Laravelの内部では、リクエストのHTTPメソッドに応じて、これらのルートが使い分けられています。ちなみに、フォームで POST を送るときはCSRFトークンも必要になる点に注意です。

名前付きルートとredirectの使いどころ

ルートに名前を付けておくと、route('名前') でURLを参照できるようになります。これが意外と便利で、URLの変更に強くなります。

Route::get('/dashboard', [DashboardController::class, 'index'])->name('dashboard');

上記のように「ルート名でアクセス」することで、実際のURLが /dashboard から /admin/home に変わったとしても、ルート定義だけを修正すれば他のコードには一切手を加える必要がありません。

リダイレクトの際にも名前付きルートは使えます。

return redirect()->route('dashboard');

直URLを書くより、意味のある名前をつけた方が後々のメンテナンスが楽になります。

パラメータ付きルートと制約の書き方

URLに変数を含めたい場合は、次のように書きます。

Route::get('/user/{id}', function ($id) {
    return "User ID: {$id}";
});

{id}はプレースホルダーです。数値限定などの制約をつけたい場合は、whereで指定できます。

Route::get('/user/{id}', function ($id) {
    return "User ID: {$id}";
})->where('id', '[0-9]+');

こうすることで、文字列など不正なパスを弾くことができ、セキュリティやエラー防止にもつながります。


Controllerとの連携でルートを整理する方法

Laravelのルーティングは、クロージャで書く方法とControllerを使う方法の2通りあります。

簡単なテストや検証ならクロージャで十分ですが、アプリが少し大きくなるとControllerで整理したほうが保守しやすくなります。

最初はControllerの導入が難しく感じるかもしれませんが、慣れるとかなりスッキリ書けます。

単純なクロージャ記述との違い

クロージャで書く場合、処理内容がルーティングファイルにべた書きされる形になります。以下のようなイメージです。

Route::get('/hello', function () {
    return 'Hello!';
});

手軽ですが、処理が増えると読みづらくなります。Controllerを使うと、処理を別ファイルに分離できるので、見通しが良くなります。

Controllerメソッドとルーティングの紐付け

Controllerを使う場合、まずはphp artisan make:controller SampleControllerでコントローラを作成します。あとはルートでそのメソッドを呼び出すだけです。

Route::get('/hello', [SampleController::class, 'index']);

Controllerクラス内には以下のように記述します。

class SampleController extends Controller
{
    public function index()
    {
        return 'Hello from Controller!';
    }
}

一箇所にまとめておけるので、画面単位や機能単位での整理がしやすくなります。

ルートグループとミドルウェアの基本構文

ルート定義では、同じ条件を持つルートを「グループ」にまとめることで、コードがすっきりします。

たとえば、ログイン後にしかアクセスできないページ群を auth ミドルウェアで一括管理したい場合は、次のように書きます。

Route::middleware('auth')->group(function () {
    Route::get('/dashboard', [DashboardController::class, 'index']);
    Route::get('/profile', [ProfileController::class, 'edit']);
});

これにより、個別にミドルウェアを設定する手間が減ります。読みやすさや拡張性の面でも、覚えておくと役立ちます。


書いたけど動かないときに見直すポイント

ルーティングを書いたのに動かない!!そんなときは意外と単純なミスだったりします。

私自身、最初の頃は何度も「なぜ?」と思いながら、手順を一つひとつ確認していました。

見落としがちなチェックポイントをいくつか紹介します。

「404が出る」ときに確認すべき設定

URLが正しくても404エラーが出る場合、まず確認すべきは以下です:

  • web.php にルートが定義されているか
  • メソッド(GET/POSTなど)が一致しているか
  • パスに余計なスラッシュやスペースがないか

特にローカル環境でURLに間違いがあると、あっさり404になるので、そこは細かく見直してみてください。

意外と忘れがちなuse宣言

Controllerを使う場合、use App\Http\Controllers\〇〇Controller; のようなuse宣言を忘れがちです。

ルートで [SampleController::class, 'index'] と書いているのに、うまく動かないときは、大体この宣言ミスが原因です。

Laravel 8以降は明示的なuseが必要になったので、これが結構ひっかかるポイントです。

一度はハマった名前のつけ方ミス

名前付きルートを使うとき、「route名が間違っていて飛べない」というのもよくあるパターンです。

例えば、route('dashboard') と書いたのに、実際のルート名が 'dashbord'(つづりミス)だった、など。

php artisan route:list で定義されたルート一覧を確認できるので、迷ったら一度確認してみると良いです。これ、かなり助けられました。

まとめ

Laravelのルーティングは、URLごとに処理を振り分ける“地図”のような存在です。

特に routes/web.php はその起点として、初心者がまず理解すべきポイントでもあります。GETとPOSTの使い分けや、Controller連携、ルートグループの活用などを段階的に覚えていくと、全体像が見えてきます。

私自身も最初はルーティングの仕組みに戸惑いましたが、使っていく中で徐々に理解できるようになりました。
Laravelを扱う上で避けて通れない部分なので、必要なところから少しずつ試してみるのがいいと思います。この記事がその一助になれば幸いです。

この記事を書いた人

業務システムとWebアプリの開発に20年以上携わるフリーランスエンジニア。
製造業や物流業界のシステム保守・改修を中心に、要件定義から運用改善まで幅広く対応してきました。Laravelや業務改善、AI活用など、現場で実際に試し・使い続けている技術や設計の工夫を、トラブル対応の視点も交えてブログに記録しています。

日々の業務で直面した「困ったこと」をベースに、再現性のあるノウハウをシンプルな言葉で伝えることを意識しています。

目次