みなさん、こんにちは。
Rails アプリケーションは MVCという構造に基づいて設計されています。その中でもコントローラは、ユーザーのリクエストを受け取り、処理の流れを制御する司令塔と言える存在です。ルーティングで振り分けられたリクエストは、必ずコントローラに到達し、そこで「何をするか」「どの画面を表示するか」「どこへ遷移するか」が決まります。
Rails 技術者認定ベーシック試験では、コントローラ単体の文法だけでなく、「params はどこから来るのか」「render と redirect_to の違いは何か」といったリクエスト処理の流れを理解しているかも問われます。これは実務でも非常に重要で、コントローラの理解が浅いと、ロジックが肥大化したり、バグの原因になったりします。
今回は、コントローラの基本構造と役割を整理し、試験対策として押さえておくべきポイントを解説します。
コントローラの役割
Rails におけるコントローラの主な役割は次の3つです。
- ルーティングによって割り当てられたリクエストを受け取る
- 必要なデータをモデルから取得・加工する
- 適切なレスポンス(HTML描画やリダイレクト)を返す
重要なのは、コントローラは「処理の流れ」を担当するだけで、ビジネスロジックの中心ではないという点です。Rails では「Fat Model / Skinny Controller(モデルは厚く、コントローラは薄く)」という考え方が基本とされています。
コントローラの基本構造
コントローラは ApplicationController を継承して定義します。
| class PostsController < ApplicationController def index end end |
- クラス名は複数形(PostsController)
- アクション名はメソッドとして定義
- 各アクションは1つのリクエストに対応
Rails では、アクション名と同名のビューが自動的に描画されるという規約があります。index アクションが実行されると、特に指定がなければ app/views/posts/index.html.erb が表示されます。
params の仕組み
コントローラを理解する上で欠かせないのが params です。params は、以下の情報をまとめたハッシュです。
- URL パラメータ
- フォームの送信内容
- ルーティングで指定された :id など
| def show @post = Post.find(params[:id]) end |
ここで使われている params[:id] は、/posts/1 のようなURLから渡されます。重要なのは、params はユーザー入力を含むため、そのまま信頼してはいけないという点です。この考え方が、strong parametersにつながります。
render と redirect_to の違い
試験で特に問われやすいのが、render と redirect_to の違いです。「バリデーションエラー時は render、新規作成成功時は redirect_to」というパターンがよく使われます。
render
- 現在のリクエストのままビューを表示する
- URLは変わらない
- 同じアクション内で別のテンプレートを描画できる
| render :new |
redirect_to
- 別のURLへリクエストを送り直す
- URLが変わる
- HTTPステータスは 302(リダイレクト)
| redirect_to posts_path |
HTTPメソッドとアクションの関係
Railsでは、HTTPメソッドとアクションの対応関係が明確に決まっています。
- GET:データの取得・画面表示
- POST:新規作成
- PATCH / PUT:更新
- DELETE:削除
この対応を理解していないと、form_with や resources の挙動が分からなくなります。
模擬問題
問題1
次のうち、コントローラの役割として適切なものをすべて選びなさい。
- データベースのテーブル構造を定義する
- リクエストを受け取り処理の流れを制御する
- ビューに表示するデータを用意する
- HTMLテンプレートを直接記述する
正解
2、3
解説
コントローラはリクエスト処理とデータ受け渡しを担当します。テーブル定義はマイグレーション、HTML記述はビューの役割です。
問題2
次のコードの説明として、適切なものを1つ選びなさい。
| redirect_to posts_path |
- index.html.erb を直接描画する
- URLを変更せずに画面を表示する
- 別のURLへ新しいリクエストを送る
- HTTPステータスは200になる
正解
3
解説
redirect_to は新しいリクエストを発生させるため、URLが変わり、HTTPステータスは 302 になります。
問題3
URL が /posts/10 のとき、次のルーティング設定が定義されている場合、params[:id] に格納される値として適切なものを1つ選びなさい。
| get “/posts/:id”, to: “posts#show” |
- “posts”
- “show”
- 10
- “10”
正解
4
解説
params は ActionController::Parameters オブジェクトであり、URL やフォームから渡される値はすべて文字列として扱われます。よって、/posts/10 の場合は、params[:id] には数値の 10 ではなく “10” が入ります。
まとめ
今回は、Railsにおけるコントローラの基本的な役割と構造について整理しました。コントローラは、リクエストを受け取り、必要な処理を行い、その結果をどの画面に返すか、あるいはどこに遷移させるかを決める部分です。MVCの中でも、アプリケーションの処理の流れを理解するうえで重要な位置づけにあります。
今回取り上げたような、params がユーザーから送られてきた値をまとめたハッシュであることと、renderとredirect_toの違い、そしてHTTPメソッドとアクションの関係は重要です。試験でもよく問われるポイントですが実務でもよく使われる知識です。ここが曖昧なままだと、画面遷移や処理の流れを正しく理解できず、思わぬ不具合につながることもあります。コントローラについては、「何を受け取り、何をして、次に何を返すのか」を整理しながら読んでみましょう。
次回は、before_action や Strong Parameters を取り上げて、コントローラを安全かつ読みやすくする部分について解説します。実務で役立つ内容なので、理解していきましょう。
Rails7認定ベーシック試験について
全国300か所で通年実施しています。詳細は以下をご覧ください。

また、450ページを超える教科書も安価に出版しています。学習にあたってご活用ください。詳細は以下をご覧ください。
Rails 7 技術者認定ベーシック試験公式教科書ベータ版
著者:小澤昌樹 発行:Rails技術者認定試験運営委員会
価格(税込):ペーパーバック版 2,497円 Kindle版 1250円
ページ数:471ページ




