第5回「Rails基礎力を固める 模擬問題で学ぶ試験対策」安全で読みやすいコントローラ

みなさん、こんにちは。

Rails アプリケーションでは、コントローラが「ユーザーのリクエストを受け取り、処理し、レスポンスを返す」という中心的な役割を担います。よって、コントローラの書き方は、アプリケーション全体の安全性・可読性・保守性に直結します。

Rails7技術者認定ベーシック試験でもコントローラは重要分野で、特に重要なのは以下の2点です。

  • before_action を使った共通処理の整理
  • Strong Parameters による安全なパラメータ管理

これらは Rails の「安全設計」の中核であり、実務でも欠かせない知識です。

今回はこの2つの内容を基に、「安全で読みやすいコントローラを書くとはどういうことか」を整理していきましょう。

目次

before_action の役割と考え方

before_action は、アクションが実行される前に共通処理を差し込む仕組みです。典型的な使用例としては、以下があります。

  • ログイン済みユーザーの確認
  • 共通で使うレコードの取得
  • 権限チェック
class PostsController < ApplicationController
  before_action :set_post, only: [:show, :edit, :update, :destroy]

  def show
  end

  def edit
  end

  private

  def set_post
    @post = Post.find(params[:id])
  end
end

このように書くと、

  • 各アクションに Post.find(params[:id]) を何度も書かずに済む
  • 「このコントローラでは何を事前にしているか」が一目で分かる

というメリットがあります。

試験では、

  • before_action がどのタイミングで実行されるか
  • onlyやexcept オプションの意味

がよく問われます。

Strong Parameters が必要な理由

Rails では、ユーザーから送信されたパラメータを params に受け取れます。しかし、この params は 何でも入ってくる危険な箱でもあります。そこで登場するのが Strong Parameters です。もし Strong Parameters がなければ、

Post.create(params[:post])

のようなコードで、意図しないカラムが書き換えられてしまう可能性があります。

これを防ぐために以下のように記述します。

def post_params
  params.require(:post).permit(:title, :body)
end

ここで使われているメソッドは以下のように使用します。

  • require : 必須のキーを指定
  • permit : 許可する属性だけを明示

試験では、

  • require と permit の役割の違い
  • 許可していない値はどうなるか

といった点が問われます。

before_action × Strong Parameters

安全で読みやすいコントローラには、以下のような共通点があります。

  • 共通処理は before_action に集約されている
  • パラメータ処理は private メソッドに分離されている
  • 各アクションの中身が短く、意図が明確

例えば次のようなコードは、実務でも試験でも正解と言える書き方です。

class PostsController < ApplicationController
  before_action :set_post, only: [:update]

  def update
    if @post.update(post_params)
      redirect_to @post
    else
      render :edit
    end
  end

  private

  def set_post
    @post = Post.find(params[:id])
  end

  def post_params
    params.require(:post).permit(:title, :body)
  end
end

模擬問題

問題1

次のコードについて正しい説明を1つ選びなさい。

class PostsController < ApplicationController
  before_action :authenticate_user

  def index
  end
end

選択肢

1. index アクションの後に authenticate_user が実行される
2. index アクションの前に authenticate_user が実行される
3. authenticate_user は index では実行されない
4. authenticate_user は view の描画後に実行される

正解

2

解説

before_action は、その名の通り「アクションが実行される前」に呼び出されます。この問題では index アクションの前に authenticate_user が実行されます。

問題2

次の before_action の指定として正しい説明を1つ選びなさい。

before_action :set_post, only: [:show, :edit]

選択肢

1. show と edit 以外のアクションで実行される
2. show と edit のみで実行される
3. すべてのアクションで実行される
4. edit の後にのみ実行される

正解

2

解説

only オプションを指定すると、指定したアクションにのみ before_action が適用されます。一方、except オプションを使うと、指定したアクション以外でのみ実行されます。

問題3

次のうち、Strong Parameters の目的として最も適切なものを1つ選びなさい。

選択肢

1. params を数値型に変換する
2. コントローラの処理を高速化する
3. ユーザーから送信されるパラメータを制限する
4. before_action を簡単に書けるようにする

正解

3

解説

Strong Parameters は、ユーザーが送信できる属性を明示的に制限する仕組みです。これによって、意図しないカラムの更新(Mass Assignment 脆弱性)を防げます。

まとめ

今回は、コントローラ設計の要となる、

  • before_action
  • Strong Parameters

を中心に、安全で読みやすいコントローラの考え方を整理しました。

  • before_action によって共通処理を整理できる
  • Strong Parameters によって不正なパラメータ操作を防げる
  • 両者を組み合わせることで、短く・安全で・意図が明確なコードになる

これらは Railsで変わらない基本原則で、試験対策としても実務においても必ず身につけておきたいポイントです。

次回は、「認証・認可とコントローラ設計」 を取り上げたいと思います。current_user や権限制御についての理解を深めましょう。

Rails7認定ベーシック試験について

全国300か所で通年実施しています。詳細は以下をご覧ください。

あわせて読みたい
Rails7ベーシック試験 近年、Ruby on Railsの求人情報は上昇傾向にあり、この3年間で4倍に増加しています。(2025年7月時点)この背景にあるのはコロナ禍によって非対面営業に注目が集まり、...

また、450ページを超える教科書も安価に出版しています。学習にあたってご活用ください。詳細は以下をご覧ください。

Rails 7 技術者認定ベーシック試験公式教科書ベータ版

著者:小澤昌樹 発行:Rails技術者認定試験運営委員会

価格(税込):ペーパーバック版 2,497円 Kindle版 1250円

ページ数:471ページ

https://www.amazon.co.jp/dp/B0FZFYLRZ2/

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

目次