カテゴリ: Laravel 更新日: 2026/04/02

Laravelのroute()関数でURLを生成する方法を完全解説!初心者でもわかるルーティングの基本

Laravelの`route()`関数でURLを生成する方法
Laravelの`route()`関数でURLを生成する方法

先生と生徒の会話形式で理解しよう

生徒

「LaravelでURLを直接べた書きしているんですが、もっと便利な方法はありますか?」

先生

「Laravelにはroute()という便利な関数があって、URLを名前で呼び出せるようになっています。」

生徒

「名前でURLを呼び出す?どういうことですか?」

先生

「たとえばお気に入りのお店に『いつものお店』というニックネームをつけておけば、住所を覚えなくてもいいですよね。それと同じで、URLにあだ名をつけておけば、あとから呼び出せるんです。」

生徒

「なるほど!それは便利そうです。具体的に教えてください。」

先生

「では、基本から順番に見ていきましょう!」

1. route()関数とは?LaravelのURLヘルパーの基本

1. route()関数とは?LaravelのURLヘルパーの基本
1. route()関数とは?LaravelのURLヘルパーの基本

Laravelのroute()関数は、名前付きルート(Named Route)と呼ばれる仕組みを使って、URLを生成するためのヘルパー関数です。 ヘルパー関数とは、よく使う処理をかんたんに呼び出せるように、Laravelがあらかじめ用意してくれている便利な関数のことです。

たとえばウェブサイトを作るとき、ページのURLを直接コードに書いてしまうと、あとでURLを変更したくなったときに、すべての箇所を書き直さなければなりません。 しかしroute()関数を使えば、URLに名前をつけておき、その名前だけを使ってURLを取得できます。 URLが変わっても名前さえ変えなければ、コードを修正する場所は一か所だけで済みます。これが保守性(メンテナンスのしやすさ)が高いとされる理由です。

たとえば郵便局を「いつも荷物を出す場所」と覚えておけば、郵便局が移転しても「いつもの場所」という概念は変わらないのと同じイメージです。

2. 名前付きルートの設定方法(routes/web.php)

2. 名前付きルートの設定方法(routes/web.php)
2. 名前付きルートの設定方法(routes/web.php)

route()関数を使うには、まずルート(Route)に名前をつける必要があります。 ルートとは、「どのURLにアクセスしたとき、どの処理を実行するか」を定義した設定のことです。 Laravelではroutes/web.phpというファイルでルートを管理しています。

名前をつけるには、ルートの末尾に->name('名前')を追加します。以下の例を見てください。


// routes/web.php

use Illuminate\Support\Facades\Route;

// トップページのルートに「home」という名前をつける
Route::get('/', function () {
    return view('home');
})->name('home');

// お問い合わせページのルートに「contact」という名前をつける
Route::get('/contact', function () {
    return view('contact');
})->name('contact');

このように->name('home')と書くことで、/というURLに「home」という名前がつきます。 ->name('contact')と書けば/contact「contact」という名前がつきます。

名前はわかりやすい英語の文字列であれば自由につけられます。ただし、プロジェクト内で重複しないようにする必要があります。

3. route()関数の基本的な使い方

3. route()関数の基本的な使い方
3. route()関数の基本的な使い方

名前付きルートが設定できたら、route()関数を呼び出すだけでURLが生成されます。 PHPのコードの中でも、Bladeテンプレート(LaravelのHTML用テンプレートエンジン)の中でも使えます。 Bladeテンプレートとは、LaravelでHTMLページを作るときに使うファイルのことで、拡張子が.blade.phpになっています。

以下はBladeテンプレートの中でリンクを作る例です。


<!-- resources/views/layouts/nav.blade.php -->

<nav>
    <a href="{{ route('home') }}">トップページ</a>
    <a href="{{ route('contact') }}">お問い合わせ</a>
</nav>

{{ }}はBladeの構文で、PHPの値をHTMLに出力するための書き方です。 route('home')を実行すると、設定に応じてhttp://example.com/のような完全なURLが返ってきます。

実際に出力されるHTMLは以下のようになります。


<nav>
    <a href="http://example.com/">トップページ</a>
    <a href="http://example.com/contact">お問い合わせ</a>
</nav>

このように、URLをハードコーディング(直接書くこと)しなくても、名前から正しいURLが自動的に生成されます。

4. パラメータ付きのURLを生成する方法

4. パラメータ付きのURLを生成する方法
4. パラメータ付きのURLを生成する方法

ブログ記事の詳細ページなど、URLの一部が動的に変わる場合があります。 たとえば/posts/1/posts/2のように、記事のIDによってURLが変わるケースです。 このような動的なURL(パラメータ付きURL)route()関数で簡単に生成できます。

まずルートにパラメータを含めて定義します。


// routes/web.php

// ブログ記事の詳細ページ({id}がパラメータ)
Route::get('/posts/{id}', function ($id) {
    return view('posts.show', ['id' => $id]);
})->name('posts.show');

{id}の部分がパラメータです。ここには記事のID番号などが入ります。 次にroute()関数でこのルートのURLを生成するとき、第二引数(関数に渡す2番目の値のこと)に配列でパラメータを渡します。

引数(ひきすう)とは、関数に渡す値のことです。第一引数はルート名、第二引数はパラメータの配列です。


// PHPコードの中でURLを生成する例

$url = route('posts.show', ['id' => 5]);
echo $url;

http://example.com/posts/5

配列のキーにパラメータ名、値に実際の数値や文字列を指定するだけで、動的なURLが自動で作られます。 記事が100件あっても、IDを変えるだけで全ての記事ページのURLを生成できます。

5. クエリパラメータを含むURLの生成

5. クエリパラメータを含むURLの生成
5. クエリパラメータを含むURLの生成

クエリパラメータとは、URLの末尾に?キー=値の形式で追加される情報のことです。 たとえば検索機能を使ったときの/search?keyword=Laravelのような形です。 インターネットで検索したときにアドレスバーに表示される?q=...がまさにこれです。

route()関数では、ルートに定義されていないパラメータを第二引数の配列に追加すると、自動的にクエリパラメータとして付加されます。


// routes/web.php にルートを定義
Route::get('/search', function () {
    return view('search');
})->name('search');

// クエリパラメータ付きのURLを生成
$url = route('search', ['keyword' => 'Laravel', 'page' => 2]);
echo $url;

http://example.com/search?keyword=Laravel&page=2

ルート定義には{keyword}のようなパラメータがないため、配列の値が自動的にクエリパラメータとして処理されます。 検索機能やページネーション(ページ分割機能)を実装するときによく使われる方法です。

6. URLを直接書くのとroute()関数を使う違い

6. URLを直接書くのとroute()関数を使う違い
6. URLを直接書くのとroute()関数を使う違い

ここで改めて、URLをべた書きすることとroute()関数を使うことの違いを整理しておきましょう。

比較ポイント URLをべた書き route()関数を使う
URLを変更したとき すべての箇所を手直しが必要 ルート定義だけ変えればOK
タイプミスのリスク 高い(文字列を直接書くため) 低い(名前で管理するため)
コードの読みやすさ URLが何を指しているか不明確 名前から目的が伝わりやすい
ドメインの変更対応 書き直しが発生する 自動で対応される

特にチームで開発している場合や、長期間にわたってシステムを運用する場合には、route()関数を使った管理方法が圧倒的に有利です。 コードの可読性(読みやすさ)保守性(メンテナンスしやすさ)が大幅に向上します。

Laravelで開発するプロジェクトでは、URLを直接書くことはほとんどなく、基本的にはすべてroute()関数を使うのが一般的なスタイルとされています。 Laravelを学ぶ上での重要な習慣のひとつとして、最初からこの使い方を身につけておきましょう。

7. コントローラーとroute()関数を組み合わせる実践的な例

7. コントローラーとroute()関数を組み合わせる実践的な例
7. コントローラーとroute()関数を組み合わせる実践的な例

実際の開発では、ルートにクロージャ(無名関数)を使うのではなく、コントローラーと組み合わせて使うことがほとんどです。 コントローラーとは、ウェブページの処理ロジックをまとめるためのクラス(設計図)のことです。 Laravelでの本格的な開発スタイルに近い形でroute()関数の使い方を確認しましょう。


// routes/web.php(コントローラーを使ったルート定義)

use App\Http\Controllers\PostController;

Route::get('/posts', [PostController::class, 'index'])->name('posts.index');
Route::get('/posts/{id}', [PostController::class, 'show'])->name('posts.show');
Route::get('/posts/create', [PostController::class, 'create'])->name('posts.create');

このようにposts.indexposts.showposts.createという名前でルートを管理します。 ドット(.)区切りで名前をつけると、どのリソースに関するルートかがわかりやすくなります。 リソースとは、ここでは「投稿(Post)」のようなデータの種類のことです。

Bladeテンプレートで一覧ページと詳細ページへのリンクを作る場合は以下のようになります。


<!-- 記事一覧ページへのリンク -->
<a href="{{ route('posts.index') }}">記事一覧へ</a>

<!-- 記事ID=3の詳細ページへのリンク -->
<a href="{{ route('posts.show', ['id' => 3]) }}">3番の記事を見る</a>

<!-- 記事投稿ページへのリンク -->
<a href="{{ route('posts.create') }}">新しい記事を投稿する</a>

このパターンがLaravelの開発現場で最もよく使われる書き方です。 名前の付け方にも一定のルールを持たせることで、複数人での開発でも混乱が起きにくくなります。

また、フォームの送信先を指定するときにもroute()関数は活躍します。 HTMLのaction属性に直接URLを書くのではなく、route()を使うことでURLの変更に強いフォームを作れます。 このような積み重ねが、保守性の高いLaravelアプリケーション開発につながっていきます。

カテゴリの一覧へ
新着記事
New1
Laravel
Laravelのroute()関数でURLを生成する方法を完全解説!初心者でもわかるルーティングの基本
New2
CodeIgniter
CodeIgniterのキャッシュ管理を完全ガイド!初心者でもわかるメリットと注意点
New3
Laravel
Laravelでマイグレーションをロールバック・再実行する方法をやさしく解説!
New4
Symfony
Twigのif文でクラス名を切り替える方法!Symfonyテンプレート初心者必見ガイド
人気記事
No.1
Java&Spring記事人気No1
Laravel
Laravelのインストール方法まとめ!ComposerとLaravel Installerの使い方
No.2
Java&Spring記事人気No2
CodeIgniter
CodeIgniterのServicesクラスとは?初心者向け完全ガイド
No.3
Java&Spring記事人気No3
Laravel
Laravelのデータベース設定方法を完全ガイド!初心者でもわかる.envファイルの使い方
No.4
Java&Spring記事人気No4
CodeIgniter
CodeIgniter 4のインストール方法まとめ(Composer・手動)
No.5
Java&Spring記事人気No5
Laravel
Laravelテストの例外処理を完全攻略!初心者でもデバッグができる追跡方法
No.6
Java&Spring記事人気No6
PHP
PHPでHello Worldを表示しよう!ファイル作成からブラウザ実行までの手順
No.7
Java&Spring記事人気No7
CodeIgniter
CodeIgniterのルーティングとは?仕組みと役割を基礎から解説
No.8
Java&Spring記事人気No8
CodeIgniter
CodeIgniterで独自サービスクラスを作成する方法を徹底解説!初心者向け完全ガイド