当記事では、プログラミング言語「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についての基礎理解は十分だと思います👍
【応用編】解説
ここからは、少し難しいかもです。
```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を使う理由とは?
例えば、開発していく上で必ず、複数のメソッド内で共通の処理を実行しなけられば
ならないという状況が発生します。
この状況を打開するために、before_actionメソッドがあります。
before_actionを書くことで、メソッドを実行する前にbefore_actionで宣言したメソッドを、先に自動で実行してくれます。
同じコードを書く手間が省け、開発効率もあがりますよ。
ぜひ、覚えておきたいメソッドですね!
記事は以上です、ありがとうございました!