カテゴリ: Rails 更新日: 2025/12/15

before_action完全ガイド:初心者向けにonly・except・skip_before_actionの使い方を徹底解説!

before_action完全ガイド:only/except/skip_before_actionの使い分け
before_action完全ガイド:only/except/skip_before_actionの使い分け

先生と生徒の会話形式で理解しよう

生徒

「Railsのコントローラで、共通の処理をまとめて書ける方法ってありますか?」

先生

「ありますよ。それにはbefore_actionという仕組みを使います。処理の前に自動で呼ばれるようにできます。」

生徒

「どんなときに使うんですか?ログインチェックとかですか?」

先生

「そうです。ログイン確認やデータの取得など、どのアクションでも共通して必要な処理を自動で呼ぶのに便利なんです。詳しく見ていきましょう!」

1. Railsのbefore_actionとは?

1. Railsのbefore_actionとは?
1. Railsのbefore_actionとは?

before_actionは、Railsのコントローラで使えるフィルタの一つです。フィルタとは、特定のアクション(処理)を実行する前や後に、共通処理を差し込む仕組みのことです。

before_actionは、その名前の通り「アクションが実行される前に呼ばれる処理」です。これを使うと、毎回同じコードを書かなくて済みます。

2. 基本的なbefore_actionの使い方

2. 基本的なbefore_actionの使い方
2. 基本的なbefore_actionの使い方

たとえば、全アクションの前にcheck_loginというメソッドを実行したい場合、次のように書きます。


class BooksController < ApplicationController
  before_action :check_login

  def index
    # 本の一覧を表示
  end

  def show
    # 本の詳細を表示
  end

  private

  def check_login
    # ログインしてなければリダイレクト
  end
end

このようにbefore_actionを使うことで、indexshowを実行する前にcheck_loginが必ず呼ばれます。

3. onlyオプションで特定のアクションだけに適用

3. onlyオプションで特定のアクションだけに適用
3. onlyオプションで特定のアクションだけに適用

全アクションではなく、「このアクションだけに適用したい」というときはonlyを使います。


before_action :check_login, only: [:edit, :update]

これで、editupdateアクションの前だけでcheck_loginが実行されます。他のアクションでは実行されません。

4. exceptオプションで特定アクションを除外

4. exceptオプションで特定アクションを除外
4. exceptオプションで特定アクションを除外

逆に、「特定のアクションだけ除外したい」ときはexceptを使います。


before_action :check_login, except: [:index, :show]

この場合、indexshowではcheck_loginが呼ばれず、それ以外のアクションでは実行されます。

5. skip_before_actionで呼び出しをスキップ

5. skip_before_actionで呼び出しをスキップ
5. skip_before_actionで呼び出しをスキップ

skip_before_actionは、上位の親クラス(ApplicationControllerなど)で設定されたbefore_action特定のコントローラで無効化したいときに使います。


class PublicPagesController < ApplicationController
  skip_before_action :check_login
end

この例では、ApplicationControllerで定義されたcheck_loginが、PublicPagesControllerでは実行されなくなります。

6. 複数のbefore_actionを使う場合の注意点

6. 複数のbefore_actionを使う場合の注意点
6. 複数のbefore_actionを使う場合の注意点

before_actionは複数設定することができます。書いた順番に上から順に実行されます。


before_action :check_login
before_action :set_book

この場合、まずcheck_loginが実行され、そのあとにset_bookが呼ばれます。順番を間違えると正しく動かないこともあるので注意しましょう。

7. 実行される順番を確認してみよう

7. 実行される順番を確認してみよう
7. 実行される順番を確認してみよう

実際にログにputsで出力してみると、before_actionが先に動いているのが分かります。


class SampleController < ApplicationController
  before_action :step_one
  before_action :step_two

  def index
    puts "アクション本体"
  end

  private

  def step_one
    puts "step one"
  end

  def step_two
    puts "step two"
  end
end

step one
step two
アクション本体

このように、アクションの中身よりも先にbefore_actionが実行されていることが確認できます。

8. よくある使い方

8. よくある使い方
8. よくある使い方

before_actionは、以下のような共通処理によく使われます。

  • ログインしているかのチェック
  • ログの記録
  • データの取得(例:set_userなど)
  • パラメータの検証

アプリ全体で共通の処理を自動化できるので、コードの重複を防ぐことができ、保守もしやすくなります。

まとめ

まとめ
まとめ

before_actionの役割とRails開発での重要性

今回の記事では、Railsのコントローラで非常によく使われる before_action について、基本的な仕組みから only・except・skip_before_action の使い分けまでを詳しく解説してきました。before_actionは、アクションが実行される前に自動で処理を差し込める仕組みで、Railsらしい「共通処理をまとめる設計」を実現するための重要な機能です。ログインチェックやデータ取得、アクセス制御など、Webアプリケーションでは必ず必要になる処理を、安全かつ分かりやすく書ける点が大きな特徴です。

Rails初心者のうちは、各アクションの中に同じ処理を何度も書いてしまいがちですが、before_actionを使うことでコードの重複を防ぎ、可読性と保守性を高めることができます。Railsのコントローラ設計を理解するうえで、before_actionの考え方を身につけることは避けて通れません。

only・except・skip_before_actionの考え方

before_actionは、すべてのアクションに無条件で適用されるだけでなく、onlyやexceptを使うことで対象を細かく制御できます。onlyは「このアクションだけ実行したい場合」に使い、exceptは「このアクションだけ除外したい場合」に使います。どちらもRails開発では頻出の書き方で、特にログインが必要な画面と不要な画面を分ける場面で役立ちます。

また、ApplicationControllerなどの親クラスで定義されたbefore_actionを、特定のコントローラで無効にしたい場合には skip_before_action を使います。これにより、公開ページやログイン不要ページを柔軟に設計できるようになります。Railsの継承構造と合わせて理解することで、より実践的なコントローラ設計が可能になります。

before_actionの実行順と注意点

before_actionは複数定義することができ、上から順番に実行されます。この実行順を理解していないと、「データが取得されていない」「ログインチェックより先に別の処理が走ってしまう」といった不具合につながることがあります。Railsでは、処理の流れを意識して書くことが非常に大切です。

以下のように、処理の役割ごとにbefore_actionを分けておくと、動作が理解しやすくなります。


class BooksController < ApplicationController
  before_action :check_login
  before_action :set_book, only: [:show, :edit, :update]

  def show
  end

  private

  def check_login
    # ログイン確認処理
  end

  def set_book
    # データ取得処理
  end
end

このように役割を分けることで、Railsらしい読みやすいコードになります。

before_actionを使いこなすためのポイント

before_actionは便利な反面、使いすぎると処理の流れが見えにくくなることもあります。そのため、「本当に共通処理かどうか」「アクション内に書いた方が分かりやすくないか」を考えながら使うことが大切です。Railsの設計では、シンプルさと分かりやすさのバランスが重要になります。

まずはログインチェックやデータ取得といった定番の使い方から慣れていき、徐々にonly・except・skip_before_actionを組み合わせて使えるようになると、Rails開発の理解が一段深まります。

先生と生徒の振り返り会話

生徒

「before_actionって、ただ便利な機能というだけじゃなくて、Railsの書き方そのものを表しているんですね。共通処理をまとめる理由がよく分かりました。」

先生

「そうですね。Railsでは、同じ処理を何度も書かない設計がとても大切です。before_actionは、その考え方を自然に実現できる仕組みなんですよ。」

生徒

「onlyやexceptを使えば、ログインが必要な画面と不要な画面を分けられるのも便利ですね。skip_before_actionの意味もやっと理解できました。」

先生

「理解が進んでいますね。before_actionはRailsアプリの品質を左右する重要なポイントなので、ぜひ実際にコードを書きながら慣れていきましょう。」

生徒

「これからは、共通処理を書いたら before_action にできないか考えてみます。Railsのコントローラ設計が少し楽しくなってきました。」

関連記事:
カテゴリの一覧へ
新着記事
New1
データベース
SQLの処理が遅くなる原因とは?初心者向けにデータベースパフォーマンス最適化を完全解説
New2
Ruby
RubyのネストHash操作を徹底解説!digとtransformメソッドで複雑なデータも楽々
New3
Rails
Railsインデックス設計の極意!爆速サイトを作るためのスキーマ設計ガイド
New4
データベース
SQLのCOMMITとROLLBACKとは?トランザクション操作を初心者向けに完全解説
人気記事
No.1
Java&Spring記事人気No1
Ruby
PATHと環境変数の正しい設定!Windows・Mac・Linux別チェックリスト付き
No.2
Java&Spring記事人気No2
Rails
Railsで日本語と時刻の設定をしよう!初心者でも安心のlocale/zone初期設定チートシート
No.3
Java&Spring記事人気No3
Ruby
Rubyのハッシュを徹底比較!シンボルキーと文字列キーの違いと使い分け
No.4
Java&Spring記事人気No4
Rails
Railsマイグレーションの型選びを完全ガイド!初心者が迷わないカラム設計
No.5
Java&Spring記事人気No5
Ruby
WindowsでRubyをインストールする方法!RubyInstallerとMSYS2を使った完全ガイド
No.6
Java&Spring記事人気No6
Rails
RailsモデルとActive Record基礎|ID戦略を完全理解!AUTO INCREMENT・UUID・ULIDの比較と導入手順
No.7
Java&Spring記事人気No7
データベース
ACID特性とは?データベーストランザクションの信頼性を初心者向けに徹底解説
No.8
Java&Spring記事人気No8
データベース
データベース正規化とは?初心者でもわかるデータ重複を防ぐSQL設計の基本