コントローラー
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 にアクセスされたら、ArticleController の show メソッドを呼ぶ」という対応をルーティングで定義する。コントローラー側は、そのルートから渡された値を使って必要なデータを取り出し、画面や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)を具体例で説明してください。