Sun~sun~Flower's

〜ITエンジニアとして日々前向きに生きていくノウハウブログ〜

MENU

【初心者向け】railsアプリケーションのbefore_actionについて解説

f:id:mTakata:20200318133852j:plain

当記事では、プログラミング言語「Ruby」のフレームワーク「Rails」でよく利用するメソッド、「before_action」について解説します。

 

【目次】

before_actionとは?

まず直訳してみると・・・

 

「前のアクション」です。

 

つまり、before_actionとは、それぞれのアクション(メソッドとも呼びます、以降メソッドと記載)を実行する前に呼ばれるメソッドを指します。

before_actionの使用例

railsアプリケーションのコントローラーに関して以下のコードをみてください。

```Rails(Ruby)
1 class ApplicationController < ActionController::Base
2 before_action :configure_permitted_parameters , if: :devise_controller?
3
4 def configure_permitted_parameters
5 devise_parameter_sanitizer.permit(:sign_up, keys: [:nickname, :avatar])
6 end
7 end ```
 

上記のコントローラーですが、コードの流れを解説していきますね。

【基礎編】解説

1行目:まずクラスの宣言です。

「ApplicationControllerクラスと言うクラスがあるんだな」と思うだけで大丈夫です。

 

ちなみにですが、ApplicationController はActionControllerを継承していますね。

 

「 < ActionController::Base」のところです。

 

↑これは「継承」という意味でして、

ActionControllerで使用しているメソッドが、ApplicationController内でも使用可能。

という意味を持っています。

 

2行目:早速、before_actionが出てきましたね。

 

書き方は、「before_action :[呼びたいメソッド名]」となります。

 

これを使用することで、他のメソッドを呼ぶ度に、before_actionで設定したメソッドが先に呼ばれます。

 

例えば、

```Rails(Ruby)
1 class ShoppingController
2 before_action : ログインを確認するメソッド
3
4 def 商品を閲覧するメソッド
5  〜閲覧するコードを記載〜
6 end
8
9 def 商品を登録するメソッド
10  〜登録するコードを記載〜
11 end
12
13 def 商品を削除するメソッド
14  〜削除するコードを記載〜
15 end

16 end
```
 

上記のShoppingControllerクラスがあるとします。

 

商品閲覧メソッド(4〜6行目)・登録メソッド(9〜11行目)・削除メソッド(13〜15行目)を呼び出す前には、必ずbefore_actionメソッド(2行目)が先に呼ばれるという事です。

 

ところで、

 

「ナゼ、before_actionを使う必要があるの?」

 

と思ったかも知れないので、そこは後ほど解説しますね。

 

話を戻しまして・・・

 

4行目:メソッドの宣言になります。

 

もうお分かりかもですが、

 

configure_permitted_parametersメソッドが呼ばれると、

 

直前にbefore_actionで呼ぶメソッドが呼ばれている。(今回ですと、configure_permitted_parametersが呼ばれます)

 

以上がコードの流れとなります。

 

ここまで把握しておけば、before_actionについての基礎理解は十分だと思います👍

【応用編】解説

difficult-thinking

ここからは、少し難しいかもです。

```Rails(Ruby)
1 class ApplicationController < ActionController::Base
2 before_action :configure_permitted_parameters , if: :devise_controller?
3
4 def configure_permitted_parameters
5 devise_parameter_sanitizer.permit(:sign_up, keys: [:nickname, :avatar])
6 end
7 end ```
 

2行目後半に記載している、「if: :devise_controller?」のコードについてです。

 

こちらのコードが意味するのは、

 

対象メソッドを呼び出した際、before_actionの「configure_permitted_parameters」を呼ぶ前に・・・

❗️対象メソッドが「devise_controller」内に存在するか?をチェックしている

という意味です。

 

メソッドを呼び出す時、そのメソッドの所属するコントローラーが、「devise_controller」であれば、before_actionのメソッドが実行されます。

 

もちろん、devise_controller以外のコントローラーに所属するメソッドは、before_actionは実行されません。

【流し読みでOK】捕捉

以下はさらに難しいです。

 

興味ある方は読んでみてくださいね。

```Rails(Ruby)
5 devise_parameter_sanitizer.permit(:sign_up, keys: [:nickname, :avatar])
```
 

上記コードについてです。

 

configure_permitted_parametersメソッド内で、5行目の「devise_parameter_sanitizer」メソッドを呼んでいますね。

 

そして「devise_parameter_sanitizer」というメソッドは、あなたがアプリを作る前から、初めからrailsで用意されているメソッドです。

 

このメソッドが何をしているのかと言いますと、今回の場合だと

サインアップ(:sign_up)時に、入力した内容(:nickname, :avatar)を許可。

という事をやっています。

 

要は、devise_parameter_sanitizerを使うことで、

 

あなたが作ったアプリを使用しようとする、ユーザーの会員情報の登録廻りの機能を、簡単に作れるようになりますよ。

【最後に】before_actionを使う理由とは?

look-in

例えば、開発していく上で必ず、複数のメソッド内で共通の処理を実行しなけられば

ならないという状況が発生します。

 

この状況を打開するために、before_actionメソッドがあります。

 

before_actionを書くことで、メソッドを実行する前にbefore_actionで宣言したメソッドを、先に自動で実行してくれます。

 

同じコードを書く手間が省け、開発効率もあがりますよ。

 

ぜひ、覚えておきたいメソッドですね!

 

記事は以上です、ありがとうございました!