一言でいうと、コントローラーはWebアプリケーションの「頭脳」であり、リクエストとレスポンスの「交通整理」を行う司令塔です。 ユーザーがブラウザで行うアクション(例:「ログインボタンを押す」「商品を購入する」など)に応じて、どの処理を実行するかを判断し、適切な結果を返します。
コントローラーがないと、全ての処理をルーティングファイル(`web.php`)に直接書くことになります。 簡単なWebサイトなら問題ありませんが、機能が増えるほどファイルは膨れ上がり、メンテナンスが不可能になってしまいます。
コントローラーを使うことで、ルーティングは「どのURLが、どのコントローラーの、どのメソッドに対応するか」という地図の役割に徹し、実際の処理はコントローラーに任せることができます。
📌コントローラーの役割をより分かりやすく!
あなたの体が「Webアプリ」だと考えてみましょう。
ブラウザからのリクエストは「何かをしたい!」という命令です。
この命令を、コントローラーという「頭脳」が受け取ります。
- リクエスト: 「ログインしたい!」(ブラウザ)
- コントローラー: 「OK、ログイン処理のプログラムを動かせ!」(頭脳)
- レスポンス: 「ログインに成功しました!」(画面)
ルーティングとコントローラーの関係
Laravelでは、ユーザーからのリクエストが最初に`web.php`に到達します。 従来のルーティングは、以下のように処理を直接記述していました。
Route::get('/login', function () {
// ログイン処理のロジックをここに書く
return view('login');
});
しかし、コントローラーを使うと、ルーティングは非常にシンプルになります。 これは、リクエストの「目的地」をコントローラーに指定しているからです。
use App\Http\Controllers\LoginController;
Route::get('/login', [LoginController::class, 'showLoginForm']);
このように書くことで、「`/login`というリクエストが来たら、`LoginController`の`showLoginForm`というメソッドを実行しなさい」と指示していることになります。
コントローラーの基本メソッド
コントローラーの中には、目的ごとに役割を持ったメソッド(関数)を定義します。 特に、リソースフルコントローラーでよく使われるメソッドは、CRUD(作成・読み込み・更新・削除)の操作と密接に関係しています。
index()
:一覧画面の表示(例:ブログ記事の一覧)create()
:新規作成フォームの表示store()
:新規作成データの保存処理show()
:詳細画面の表示(例:特定のブログ記事)edit()
:編集フォームの表示update()
:更新データの保存処理destroy()
:削除処理
💡コード例:シンプルなログインコントローラー
簡単なログイン機能でコントローラーの役割を見てみましょう。
まず、ログインフォームを表示するコントローラーのメソッドです。
// app/Http/Controllers/LoginController.php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
class LoginController extends Controller
{
// ログインフォームを表示するメソッド
public function showLoginForm()
{
return view('auth.login');
}
// ログイン処理を行うメソッド
public function login(Request $request)
{
// フォームから送信されたユーザー情報を取得
$credentials = $request->only('email', 'password');
// ログイン認証のロジック
if (Auth::attempt($credentials)) {
// 認証成功
return redirect()->intended('/dashboard');
}
// 認証失敗
return back()->withErrors([
'email' => '認証情報が一致しません。',
]);
}
}
このコードでは、`showLoginForm()`が「ログインフォームを表示する」という役割を、`login()`が「フォームが送信された後の認証処理」という役割を担っています。 このように、役割ごとにメソッドを分けることで、コードがとても見やすくなります。

Laravelの「ルーティング」ってどう使う?図解でわかる基本のキ – ガチ…
Laravelの「ルーティング」ってどう使う?図解でわかる基本のキ – ガチ…
Laravelのルーティングをゼロから学ぶ!超基本の書き方から、Controllerへの紐付け、名前付きルート、ルートモデルバインディングまで丁寧に解説。もう迷わない。
Laravelのルーティングをゼロから学ぶ!超基本の書き方から、Controllerへの紐付け、名前付きルート、ルートモデルバインディングまで丁寧に解説。もう迷わない。
なぜコントローラーを使うべきなのか?
コントローラーの必要性がなんとなく分かったところで、具体的なメリットを3つ紹介します。
1. コードの整理整頓
全ての処理を`web.php`に書くと、ファイルが長くなり、どこに何があるか分からなくなります。 コントローラーを使えば、役割ごとにファイルを分けることができ、プロジェクト全体がスッキリと整理されます。
2. ロジックの再利用性
例えば、ある商品を複数の場所(トップページ、カテゴリページなど)で表示したい場合。 コントローラーのメソッドを一度作っておけば、どのルーティングからでもそのメソッドを呼び出すだけで済みます。 同じコードを何度も書く必要がなくなります。
3. チーム開発の効率アップ
コントローラーによって役割が明確になるため、複数人で開発を行う際にも、他のメンバーが書いたコードを理解しやすくなります。 「このコントローラーはユーザー関連の処理を担っているんだな」とすぐに把握できるため、共同作業がスムーズに進みます。
これらのメリットを最大限に活かすために、単一責任の原則を意識しましょう。 これは「一つのコントローラーは一つの役割だけを担う」という開発の考え方です。
例えば、ユーザーの登録・更新・削除を行うコントローラーは`UserController`とし、ブログ記事の投稿・編集・削除を行うコントローラーは`PostController`として分けます。 これにより、どこにどんな処理があるか迷うことがなくなります。
💡コントローラーの役割分担イメージ
図:Webリクエストがコントローラーによって処理され、モデルやビューと連携する流れ
![]() | 改訂新版 最短距離でゼロからしっかり学ぶ Python 入門 実践編 〜ゲーム開発・データ可視化・Web開発 [ Eric Matthes ] 価格:3850円 |

![]() | 実装で学ぶフルスタックWeb開発 エンジニアの視野と知識を広げる「一気通貫」型ハンズオン 価格:3299円 |

よくある質問(FAQ)
それに対して、モデルは「データベースとのやりとり」を担当します。
例えば、
- コントローラー: 「ユーザー一覧のデータを取得してね」とモデルに指示を出す
- モデル: 実際にデータベースにアクセスして、データを取ってくる
しかし、少しでも複雑なロジックやデータベースとのやりとりが必要になる場合は、コントローラーを使うべきです。 将来的なコードの管理や機能追加が圧倒的に楽になります。
まとめ:次のステップへ!
お疲れ様でした!これでコントローラーの全体像はつかめましたね。
コントローラーは、Laravelの心臓部であり、Webアプリのロジックをきれいに整理するための非常に重要なツールです。
今回の記事で紹介した内容を頭に入れておくだけでも、今後の学習効率がぐっと上がるはずです。
最後に、この記事で学んだことを活かすための、次のアクションを提案します。
🔥 次は「CRUD」に挑戦しよう!
自分で簡単なブログアプリやToDoリストアプリを作りながら、以下の機能をコントローラーを使って実装してみましょう。
- Create(新規作成): `store` メソッド
- Read(読み込み): `index`, `show` メソッド
- Update(更新): `update` メソッド
- Delete(削除): `destroy` メソッド
もし途中で困ったことがあれば、この記事をいつでも見返してください。
あなたのエンジニアとしての成長を心から応援しています!
![]() | Bootstrap4フロントエンド開発の教科書 ウェブ開発の知識とコツをしっかりマスター [ 宮本麻矢 ] 価格:3608円 |
