← 用語集一覧へ戻る

コントローラー

Controller
development beginner
Webアプリにおいてリクエストを受け取り、適切な処理を呼び出してレスポンスを返す役割を担うコンポーネント。
コントローラー (Controller)

概要(サマリー)

コントローラーとは、Webアプリでユーザーのリクエスト(操作)を受け取り、何をすべきかを判断して処理を振り分ける「指揮役」である。

レストランにたとえると、ウェイター(コントローラー)がお客さんの注文を受けて厨房(モデル)に伝え、料理ができたらお客さん(ブラウザ)に届ける流れに近い。フレームワークによるWebアプリ開発では、ほぼ必ず登場する重要な概念である。

詳細解説

コントローラーとは何か

コントローラーはMVC(Model-View-Controller)というアーキテクチャの「C」にあたる部分である。ユーザーがURLにアクセスしたとき、ルーティングがそのリクエストを適切なコントローラーの関数(メソッド)に届け、コントローラーがデータの取得や保存をモデルに依頼し、最終的に画面(ビュー)に結果を渡す。

// PHPのLaravelでのコントローラー例
class ArticleController extends Controller
{
    public function show($articleId)
    {
        $article = Article::findOrFail($articleId);
        return view('article.show', ['article' => $article]);
    }
}

上の例では、記事IDを受け取り、データベースから記事を取得して、ビュー(表示用テンプレート)に渡すコントローラーメソッドを示している。findOrFail を使うと、対象の記事が見つからない場合にエラー応答へつなげやすくなる。実務では「見つからなかったとき」「権限がないとき」「入力値が不正なとき」の処理も、コントローラー周辺で必ず考える必要がある。

MVCパターンにおける役割

MVCはWebフレームワークでよく使われる設計パターンである。

  • Model(モデル): データの管理・データベース操作
  • View(ビュー): 画面の表示
  • Controller(コントローラー): リクエストの受け取りと処理の振り分け

コントローラーはモデルとビューをつなぐ「橋渡し役」だと理解するとわかりやすい。ロジックをコントローラーに詰め込みすぎると「太ったコントローラー」になり保守性が下がるため、なるべく処理はモデルに委譲する設計が推奨される。

ルーティングとの関係

コントローラーは単体では動かない。ユーザーがどのURLにアクセスしたらどのコントローラーのどのメソッドを呼ぶか、という対応表がルーティングである。ルーティングとコントローラーはセットで動作する。

たとえば「/articles/10 にアクセスされたら、ArticleControllershow メソッドを呼ぶ」という対応をルーティングで定義する。コントローラー側は、そのルートから渡された値を使って必要なデータを取り出し、画面やJSONなどのレスポンスを返す。初心者は「URLを見て入口を決めるのがルーティング、実際の処理の流れを受け持つのがコントローラー」と覚えると理解しやすい。

REST APIでのコントローラー

REST APIでは、コントローラーがHTTPメソッド(GET・POST・PUT・DELETE)に対応したアクションを持つ設計が一般的だ。たとえば「GETリクエストで一覧を返す」「POSTリクエストで新規作成する」といった責務分担をコントローラーが担う。

典型的には、一覧取得は index、詳細取得は show、新規作成は store、更新は update、削除は destroy のような名前で整理される。これにより、APIを読む人もAIにコード生成を依頼する人も、「どの操作がどのメソッドに対応するか」を予測しやすくなる。ただし、すべての処理を無理にREST風の名前へ押し込む必要はなく、業務上の意味が強い処理では専用のメソッドやサービス層に分けることもある。

フレームワーク別のコントローラー

Laravelではクラスベースのコントローラーが主流で、php artisan make:controllerコマンドで自動生成できる。Ruby on Railsでもコントローラーが中心的な役割を担い、rails generate controllerで作成できる。バックエンドフレームワークを使うと、コントローラーのひな形を自動生成できるため開発効率が高い。

AIコーディングとの関係

AIにWebアプリのコード生成を依頼するときは、「どのフレームワークを使っているか」「どのコントローラーにどんな処理を持たせたいか」を具体的に伝えると精度が上がる。たとえば「Laravelでブログ記事のCRUD操作ができるコントローラーを作って」といった形で依頼するのが効果的だ。AIが生成したコントローラーは「太りすぎ」になることがあるため、責務が適切に分離されているかを確認しよう。

よくある勘違い

コントローラー = すべての処理を書く場所?

コントローラーはリクエストの受け取りと振り分けが役割であり、データベース操作などの重いビジネスロジックを直接書く場所ではない。処理はモデルやサービス層に任せて、コントローラーはスリムに保つのがよい設計とされている。

コントローラーはフロントエンドでも使う?

この用語集で扱うWeb開発の文脈では、MVCのコントローラーは主にバックエンド側の概念として説明されることが多い。ただし、React・Vue・Angularなどのフロントエンドフレームワークにも「コントローラー的な役割」を持つコンポーネントが存在する。文脈によって意味が違うことがある。

コントローラーがなくてもWebアプリは作れる?

小規模なスクリプト静的サイトにはコントローラーは不要だが、フレームワークを使う中規模以上のWebアプリでは事実上必須の概念となる。

まとめ

  • コントローラーはMVCアーキテクチャの「C」で、リクエストを受けて処理を振り分ける役割を担う
  • ルーティングとセットで動作し、モデルとビューをつなぐ橋渡し役である
  • 処理をコントローラーに詰め込みすぎず、モデルに委譲するのが良い設計
  • LaravelやRuby on RailsなどのフレームワークでREST APIを作る際に頻繁に登場する
  • AIへの依頼ではフレームワーク名と処理内容を具体的に伝えると精度が上がる

情報ソース

より詳しくAIに聞いてみよう

  • MVCアーキテクチャを、初心者でもわかるようにたとえ話で説明してください。
  • コントローラーとルーティングの関係を具体的な例で教えてください。
  • 「太ったコントローラー」の問題とその改善方法を教えてください。
  • AIにLaravelのコントローラーを書いてもらうときの、効果的な依頼方法を教えてください。
  • REST APIでのコントローラーの責務分担(GET・POST・PUT・DELETE)を具体例で説明してください。