更新:2024/12/02

【Laravel】ルーティングの使い方と意味について

はるか
はるか
ルーティング、URLと処理を結びつける仕組み。
ふゅか
ふゅか
Laravelではroutes/web.phpで設定するのよね!これでURLに対応した処理が動くのね!

1. ルーティングとは?

ルーティングとは、URLとそのURLに対応するアクション(処理内容)を結びつける仕組みのことです。Laravelでは、routes/ディレクトリにルーティング設定が記述され、通常はroutes/web.phpファイルで定義します。例えば、https://example.com/aboutというURLにアクセスしたときに、「会社概要のページ」を表示する処理を実行するよう設定します。

この記事ではLaravel10を利用して、ルーティングについてわかりやすく解説していきます。

2. Laravelでの基本的なルーティング

Laravelでは、ルートを定義するためにRouteを使用します。以下に基本的なルート定義の例を示します。

2.1. GETルート

GETルートは、ページの表示やデータの取得時に使用されます。例えば、会社概要ページを表示するルートは次のように定義できます。

use Illuminate\Support\Facades\Route;
Route::get('/about', function () {
    return '<h1>会社概要ページです</h1>';
});
  • /aboutにアクセスすると、「会社概要ページです」と表示されます。
  • 第一引数:URLパス
  • 第二引数:処理(クロージャやコントローラ)

はるか
はるか
GETルート、ページ表示やデータ取得に使う。

2.2. POSTルート

POSTルートは、データをサーバーに送信する場合に使用します。例えば、お問い合わせフォームの送信処理に適したルートは以下のように設定します。

Route::post('/contact', function () {
    return 'お問い合わせフォームの送信処理';
});

2.3. PUTルート

PUTルートは、既存データを更新する処理に使用されます。例えば、ユーザーのプロフィール情報を更新する場合のルートは次のように記述します。

Route::put('/profile', function () {
    return 'プロフィールの更新処理';
});

2.4. DELETEルート

DELETEルートは、データの削除処理に利用されます。例えば、ユーザーのプロフィールを削除する場合のルートは以下のように定義します。

Route::delete('/profile', function () {
    return 'プロフィールの削除処理';
});

以上の4つのルートをまとめると、

  • GET: 情報の表示(例: ページの閲覧)
  • POST: 新しいデータの登録(例: フォーム送信)
  • PUT: 既存データの更新(例: プロフィール変更)
  • DELETE: データの削除(例: ユーザーアカウント削除)

3. ルートパラメータ

ルートに動的な値を受け渡す場合は「ルートパラメータ」を使用します。

ふゅか
ふゅか
ルートパラメータって何?動的な値を渡す仕組み?
はるか
はるか
その通り。例えば/user/{id}。アクセス時に値渡せる。

3.1. 必須パラメータ

Route::get('/user/{id}', function ($id) {
    return "ユーザーID: {$id}";
});
  • /user/1とアクセスすると「ユーザーID: 1」と表示されます。

3.2. オプションパラメータ

パラメータを省略可能にするには、?を付け、デフォルト値を指定します。

Route::get('/user/{name?}', function ($name = 'ゲスト') {
    return "こんにちは、{$name}さん!";
});
  • /user → 「こんにちは、ゲストさん!」
  • /user/Taro → 「こんにちは、Taroさん!」

4. 名前付きルート

名前付きルートを使用すると、特定のルートに対して名前をつけておくことができます。これにより、URLをハードコーディングせずにルートを参照できるため便利です。

4.1. 名前付きルートの定義

名前付きルートを定義するには、ルートを作成した後に ->name('ルート名') を付け加えます。以下は具体例です。

Route::get('/dashboard', function () {
    return 'ダッシュボード';
})->name('dashboard');

上記のコードでは、/dashboard というURLに対して dashboard という名前を付けています。この名前を使用することで、このルートを簡単に参照できるようになります。

4.2. 名前付きルートの使用

名前付きルートを使用する際には、route() を利用します。

$url = route('dashboard'); // URLを取得

5. グループ化されたルート

複数のルートに共通の設定を適用したい場合、ルートをグループ化する方法があります。これにより、コードの重複を避けたり、構成を整理したりすることが可能になります。以下では、共通のURLプレフィックスを設定する場合と、ミドルウェアを適用する場合の例をご紹介します。

5.1. 共通のURLプレフィックスを設定

ルートに共通のプレフィックス(URLの先頭部分)を設定したい場合は、Route::prefix()メソッドを使用します。この方法を使うことで、共通の部分を一箇所で定義でき、各ルートごとに指定する必要がなくなります。以下の例では、adminというプレフィックスを持つルートをまとめています。

Route::prefix('admin')->group(function () {
    Route::get('/dashboard', function () {
        return '管理者ダッシュボード';
    });

    Route::get('/users', function () {
        return 'ユーザー管理';
    });
});

  • /admin/dashboard → 管理者ダッシュボード
  • /admin/users → ユーザー管理

5.2. ミドルウェアの適用

特定のルートに共通のミドルウェア(リクエスト処理のフィルターや条件)を適用したい場合は、Route::middleware()メソッドを使用します。例えば、認証が必要なルートをまとめて設定する場合に便利です。

Route::middleware(['auth'])->group(function () {
    Route::get('/profile', function () {
        return 'プロフィールページ';
    });

    Route::get('/settings', function () {
        return '設定ページ';
    });
});

認証が必要なルートをまとめて設定できます。

6. ルートとコントローラの連携

Laravelでは、ルートに直接処理を書く代わりに、コントローラを使用するのが一般的です。

6.1. コントローラの使用例

use App\Http\Controllers\UserController;

Route::get('/user/{id}', [UserController::class, 'show']);

上記の例では、UserController内のshowメソッドが呼び出されます。

はるか
はるか
コントローラに分ける。
ふゅか
ふゅか
コードが見やすくなるし、再利用もしやすい!
PR