【第四弾】Laravel入門資料
- Windows環境構築
- Mac環境構築
- Laravelとは
- ルーティング
- ビュー
- コントローラ
- マイグレーション
- モデル
- ここまでの知識の実践
- 検索・フィルタ
- ソフトデリート
- ページネーション
- 画像アップロード
- 認証ライブラリ
- 認証実装
- ミドルウェア・ロール
- 総合実践
📚 Laravel公式ドキュメント - Routing
https://laravel.com/docs/12.x/routing
💡 この講座では、上記の公式ドキュメントを基に解説していきます。
公式ドキュメントは初学者には内容が難しいため、エッセンスを優しく噛み砕いて解説していきます。
ルーティングとは
ルーティングとは、URLとプログラムを紐付ける仕組みのことです。 ユーザーが特定のURLにアクセスしたときに、どのプログラム(処理)を実行するかを決定します。
例えば、https://example.com/about にアクセスしたら「会社概要ページ」を表示し、
https://example.com/contact にアクセスしたら「お問い合わせページ」を表示する、
といった振り分けをルーティングが担当します。
ルートファイルの場所
Laravelでは、ルーティングの設定は以下のファイルで行います:
- routes/web.php - Webページ用のルート(セッション、CSRF保護あり)
- routes/api.php - API用のルート(Laravel 11以降はデフォルトでは存在しません)
この講座では、routes/web.php を使って解説していきます。
💡 api.php は、API開発が必要になったら php artisan install:api コマンドで作成できます。
今は気にしなくてOKです。
最もシンプルなルーティング
まずは、文字列を返す最もシンプルなルートから見ていきましょう。
// routes/web.php
Route::get('/hello', function () {
return 'Hello, World!';
});
このコードは以下のように動作します:
Route::get()- GETリクエストを処理するルートを定義'/hello'- アクセスするURLのパスfunction () { ... }- 実行される処理(クロージャ)return 'Hello, World!';- ブラウザに表示される内容
ブラウザで http://localhost/hello にアクセスすると、
「Hello, World!」という文字列が表示されます。
HTMLを返す
文字列だけでなく、HTMLタグを含む内容も返すことができます。
// routes/web.php
Route::get('/about', function () {
return '<h1>会社概要</h1><p>私たちは素晴らしい会社です。</p>';
});
ブラウザで http://localhost/about にアクセスすると、
HTMLとして解釈され、見出しと段落が表示されます。
⚠️ ただし、実際の開発では、HTMLをルートに直接書くことはほとんどありません。 次のセクションで説明する「ビュー」を使うのが一般的です。
ビュー(View)を返す
HTMLが複雑になると、ルートファイルに直接書くのは大変です。 そこで、ビュー(View)という仕組みを使います。
// routes/web.php
Route::get('/company', function () {
return view('company');
});
view('company') は、resources/views/company.blade.php
というファイルを読み込んで表示します。
ビューについての詳細は、次の章「ビュー」で詳しく解説します。
動的なルート - パラメータを使う
URLの一部を変数として受け取ることができます。 これをルートパラメータと呼びます。
基本的なパラメータ
// routes/web.php
Route::get('/user/{id}', function ($id) {
return 'ユーザーID: ' . $id;
});
動作例:
/user/1→ 「ユーザーID: 1」/user/100→ 「ユーザーID: 100」/user/abc→ 「ユーザーID: abc」
{id} の部分が変数になり、関数の引数 $id として受け取ることができます。
複数のパラメータ
// routes/web.php
Route::get('/post/{category}/{id}', function ($category, $id) {
return "カテゴリ: {$category}, 記事ID: {$id}";
});
動作例:
/post/tech/123→ 「カテゴリ: tech, 記事ID: 123」/post/news/456→ 「カテゴリ: news, 記事ID: 456」
オプションパラメータ
パラメータを省略可能にすることもできます。
// routes/web.php
Route::get('/greeting/{name?}', function ($name = 'ゲスト') {
return "こんにちは、{$name}さん";
});
動作例:
/greeting/太郎→ 「こんにちは、太郎さん」/greeting→ 「こんにちは、ゲストさん」
{name?} のように ? を付けると省略可能になり、
関数の引数でデフォルト値を設定できます。
HTTPメソッドの種類
Webアプリケーションでは、用途に応じて異なるHTTPメソッドを使い分けます。
- Route::get() - データを取得する(ページ表示など)
- Route::post() - データを送信する(フォーム送信など)
- Route::put()/patch() - データを更新する
- Route::delete() - データを削除する
// routes/web.php
// ユーザー一覧を表示
Route::get('/users', function () {
return 'ユーザー一覧';
});
// ユーザーを新規作成
Route::post('/users', function () {
return 'ユーザーを作成しました';
});
// ユーザー情報を更新
Route::put('/users/{id}', function ($id) {
return "ユーザー{$id}を更新しました";
});
// ユーザーを削除
Route::delete('/users/{id}', function ($id) {
return "ユーザー{$id}を削除しました";
});
💡 初心者の方へ:まずは Route::get() だけを覚えればOKです。
他のメソッドは、フォーム送信やAPIを作る際に必要になります。
ルート名(Named Routes)
ルートに名前を付けることで、後からURLを変更しても影響を受けにくくなります。
ルート名の定義
// routes/web.php
Route::get('/profile', function () {
return 'プロフィールページ';
})->name('profile');
なぜルート名が必要なのか - 具体例
例えば、複数のページから「プロフィールページ」へのリンクを作る場合を考えてみましょう。
❌ ルート名を使わない場合(非推奨)
// resources/views/dashboard.blade.php
<a href="/profile">プロフィール</a>
// resources/views/header.blade.php
<a href="/profile">マイページ</a>
// app/Http/Controllers/HomeController.php
public function index()
{
return redirect('/profile');
}
問題点: URLを /profile から /user/profile に変更したい場合、
すべてのファイルを探して修正する必要があります。修正漏れがあるとリンク切れが発生します。
✅ ルート名を使う場合(推奨)
// routes/web.php
Route::get('/profile', function () {
return 'プロフィールページ';
})->name('profile');
// resources/views/dashboard.blade.php
<a href="{{ route('profile') }}">プロフィール</a>
// resources/views/header.blade.php
<a href="{{ route('profile') }}">マイページ</a>
// app/Http/Controllers/HomeController.php
public function index()
{
return redirect()->route('profile');
}
メリット: URLを変更したい場合、routes/web.php の1箇所だけ修正すればOKです。
// routes/web.php
// URLを変更しても、他のファイルは修正不要!
Route::get('/user/profile', function () {
return 'プロフィールページ';
})->name('profile');
パラメータ付きルート名
ルートパラメータがある場合も、ルート名を使うことができます。
// routes/web.php
Route::get('/user/{id}', function ($id) {
return "ユーザーID: {$id}";
})->name('user.show');
// ビューでの使用例
<a href="{{ route('user.show', ['id' => 1]) }}">ユーザー1</a>
<a href="{{ route('user.show', ['id' => 100]) }}">ユーザー100</a>
// 生成されるURL
// /user/1
// /user/100
ルート名を使うメリット まとめ
- URLの一元管理 - URLを変更しても1箇所の修正で済む
- タイポ防止 - IDEの補完が効くため、URLの書き間違いを防げる
- コードの可読性向上 -
route('profile')の方が/user/my-profileより意図が明確 - リファクタリングが容易 - URL構造を自由に変更できる
💡 実務では、ほとんどのルートに名前を付けるのが一般的です。
今のうちから ->name() を付ける習慣をつけておきましょう。
ルートグループ(Route Group)
複数のルートに共通の設定を適用したい場合、ルートグループを使うと便利です。
実務では、管理画面、API、多言語対応などで頻繁に使われる重要な機能です。
プレフィックス(prefix)でURLをまとめる
管理画面のルートを /admin で統一する例:
// routes/web.php
// ❌ グループを使わない場合(冗長)
Route::get('/admin/dashboard', function () {
return '管理画面ダッシュボード';
});
Route::get('/admin/users', function () {
return 'ユーザー管理';
});
Route::get('/admin/posts', function () {
return '記事管理';
});
// ✅ グループを使う場合(推奨)
Route::prefix('admin')->group(function () {
Route::get('/dashboard', function () {
return '管理画面ダッシュボード';
});
Route::get('/users', function () {
return 'ユーザー管理';
});
Route::get('/posts', function () {
return '記事管理';
});
});
// アクセスするURL
// /admin/dashboard
// /admin/users
// /admin/posts
メリット: /admin を何度も書く必要がなく、後から変更も容易です。
ルート名にプレフィックスを付ける
ルート名にも共通の接頭辞を付けることができます。
// routes/web.php
Route::prefix('admin')->name('admin.')->group(function () {
Route::get('/dashboard', function () {
return '管理画面ダッシュボード';
})->name('dashboard'); // ルート名: admin.dashboard
Route::get('/users', function () {
return 'ユーザー管理';
})->name('users'); // ルート名: admin.users
});
// ビューでの使用例
// {{ route('admin.dashboard') }} → /admin/dashboard
// {{ route('admin.users') }} → /admin/users
実務での使用例
📋 よくある使い方
1. 管理画面のルートをまとめる
Route::prefix('admin')->name('admin.')->group(function () {
// 管理画面のルートをここに記述
});
2. APIのバージョン管理
Route::prefix('api/v1')->group(function () {
Route::get('/users', function () {
// APIバージョン1のユーザー一覧
});
});
Route::prefix('api/v2')->group(function () {
Route::get('/users', function () {
// APIバージョン2のユーザー一覧
});
});
3. 多言語対応
Route::prefix('ja')->group(function () {
Route::get('/about', function () {
return '会社概要';
});
});
Route::prefix('en')->group(function () {
Route::get('/about', function () {
return 'About Us';
});
});
// /ja/about → 日本語
// /en/about → 英語
💡 ルートグループは、実務で必ず使う機能です。
特に、認証機能(ログインしたユーザーだけアクセス可能)を実装する際にも重要になります。
今のうちから慣れておきましょう。
定義したルートを確認する
Laravelには、定義されているすべてのルートを一覧表示するコマンドがあります。
php artisan route:list
このコマンドを実行すると、以下のような情報が表示されます:
- HTTPメソッド(GET、POSTなど)
- URI(URLのパス)
- ルート名
- 実行されるアクション
💡 デバッグやルートの確認に非常に便利なコマンドです。 「このURLはどのルートで処理されているんだろう?」と思ったら、このコマンドを使いましょう。
まとめ
この章では、Laravelのルーティングについて学びました。
重要なポイント
- ルーティングはURLとプログラムを紐付ける仕組み
- ルートは
routes/web.phpに定義する Route::get()で文字列、HTML、ビューを返せる- URLパラメータを使って動的なページを作れる
php artisan route:listでルート一覧を確認できる
次のステップ
次の章では、ビュー(View)について詳しく学びます。 HTMLを別ファイルに分離して、より保守性の高いコードを書く方法を習得しましょう。
補足:Routeの仕組み(読まなくてもOK)
※ この説明は理解しなくても、ルーティングは使えます。興味がある方だけお読みください。
Route::get() の :: とは?
:: はスコープ解決演算子と呼ばれ、
PHPで静的メソッドやクラス定数を呼び出す記号です。
// 一般的な静的メソッドの例
class Math
{
public static function add($a, $b)
{
return $a + $b;
}
}
Math::add(1, 2); // 3
LaravelのRouteは「Facade」
ただし、LaravelのRouteはFacade(ファサード)という特殊な仕組みを使っています。
見た目は静的メソッドですが、実際には内部でインスタンスメソッドを呼び出しています。
💡 Facadeとは?
Facade(ファサード)は、複雑なシステムをシンプルに使うための「窓口」です。
// ❌ Facadeを使わない場合(複雑)
$router = app('router');
$router->get('/hello', function () {
return 'Hello';
});
// ✅ Facadeを使う場合(シンプル)
Route::get('/hello', function () {
return 'Hello';
});
Facadeのおかげで、短く書けるようになっています。
初学者が覚えるべきこと
「Route::get() でルートを定義できる」
これだけでOKです。Facadeやサービスコンテナの仕組みは、Laravelに慣れてから学ぶ中級者向けの知識です。
📚 詳しく知りたい方は、Laravel公式ドキュメントの「Facades」を参照してください。
https://laravel.com/docs/12.x/facades