ここではRuby on Rails でdeviseを用いた新規登録機能を実装してくための方法を教えています。
本記事の内容は
- deviseとは何か
- deviseの使用方法
- ユーザー管理に必要なテーブルの作成及びカラムの追加方法
- maxlengthオプションについて
- devise_parameter_sanitizerメソッドについて
それでは早速みていきましょう。
目次
deviseとは何か
deviceとはユーザー管理を簡単に行うためのGemです。Gemとはライブラリとも呼ばれ、Rubyが公開しているパッケージのこと。ゲームでいうところの追加コンテンツみたいなものです。
Gemには様々な便利な機能があり、deviceのようにユーザー管理を行うことや認証機能など副ざるな機能もGemを使えば比較的簡単に実装することができるというものです。
実はRailsも複数のGemが組み合わされて作られているんです。
deviseの使用方法
✔︎deviceの使用方法
以下の手順に沿ってdeviceを使用できるようにします。
- Gemfileの最後の行に「gem ‘devise’」と記述する
- ターミナルで作成中のアプリディレクトリで「bundle install」コマンドを実行する
- ターミナルで「rails s」コマンドを実行しサーバーを起動する。サーバー起動時にGemが反映されるから
- ターミナルで「rails g devise:install」を実行しdevise設定ファイルを作成
- ターミナルで「rails g devise user」を実行しUserモデルを作成する
- routes.rbに自動でdevise情報が追記される(編集の必要なし)
- 先ほど作成したdevise_create_users.rbを確認する(編集必要なし)
- マイグレーションを実行する
- Sequelでテーブルが作成された確認する
- もう一度「rails s」でサーバーを再起動する(情報を更新したため、Gemを反映させる)
これで1通りdeviseを使用してユーザー管理することができます。これでサーバーサイドが完成したので今度はクライアントサイドの入力フォームを作成する必要があります。新しい入力フォームビューを作成すればOKです。
ちなみにdevise用のビューの作成方法は「rails g devise:views」で作成することができます。作成されたファイルはdeviseディレクトリに保存されています。サインアップ画面はregistrationsというファイルを使用し、ログインはsessionsのファイルを使用します。
ユーザー管理に必要なテーブルの作成及びカラムの追加方法
✔︎ユーザー情報を登録するカラムをテーブルに追加する
以下の手順に沿って実装してみよう
- デフォルトでサインアップ時に必要なメールアドレスとパスワードのカラムは作られています。
- ターミナルで「rails g migration」コマンドを実行する。3をよく読んで
- 2のコマンドに加えて「Addカラム名To追加したいテーブル名 追加するカラム名:型」という風に入力します
- アドレス・pass以外に必要な情報があれば2~3を実行しカラムを増やします。
- Sequelでカラムが追加されたかを確認する
- 「rails s」でサーバー再起動
✔︎Railsで習慣的な命名規則
Railsではクラスやメソッド、変数名に命名する時には規則が設けられています。絶対的なルールではないですが、エンジニアの間では習慣となっているので覚えておいた方がいいものです。
命名するときの単語の区切り方の方法でスネークケースとキャメルケースというものがあります。簡単にいうとスネークケースは単語の区切りを_で区切ります。キャメルケースは区切りをAなどの大文字で区切ることを言います。
- スネークケース→nakahara_blog_new
- キャメルケース→nkaharaBlogNew
- アッパーキャメルケース→NakaharaBlogNew(先頭が大文字)
命名規則は以下の通り
- クラス名→アッパーキャメルケース
- メソッド名→スネークケース
- 変数名→スネークケース
maxlengthオプション
✔︎入力文字数を制限する方法
例えばユーザー名の登録をする際に文字数を制限することができるメソッドがあります。それがmaxlengthオプションです。maxlengthオプションはinputタグのtext_fieldで使えるヘルパーメソッドの1つです。
使い方は「<%= f.text_field :ユーザー名, autofocus: true, maxlength: “最大文字数” %>」といった具合で、ユーザー名の部分と最大文字数の部分は好きにアレンジして使ってみましょう。
devise_parameter_sanitizerメソッド
✔︎devise用のストロングパラメーターを設定する
作成中のRailsのコントローラーは編集することができますが、deviseはGem内にコントローラーがあるので直接編集することができません。なので、devise専用のパラメーター取得のメソッドを使用する必要があります。それが、devise_parameter_sanitizerメソッドです。
✔︎device_parameter_sanitizerメソッドとは
deviceにおけるparamsのようなメソッドのこと。このメソッドとpermitメソッドを組み合わせることでストロングパラメーターを設定することができます。書き方はコントローラーに「devise_parameter_sanitizer.permit(:deviseの処理名, keys: [:許可するキー])」といった感じに書きます。
Railsにおけるパーミットメソッドとは引数の書き方が若干違う点に注意しましょう。
deviseの処理名の部分にはすでにdeviceで準備されている処理を使用します。
- :sign_in (ログイン)
- :sign_up (新規登録)
- :account_update (更新)
✔︎application_controllerを使おう
application_controllerは全てのコントローラーの親要素的な存在です。このコントローラーに処理を記述すれば全てのコントローラーに反映させることができます。
先ほど、お話ししましたがdeviseのコントローラーはGem内にあるため編集することができません。そのため、 application_controllerを使ってストロングパラメーターをを定義して処理するように設定します。
application_controllerの編集をする際にbefore_actionを用いることで命令を下すコントローラーを指定することができます。
書き方は「before_action :処理させたいメソッド名, if: :devise_controller?」といった感じ。
ここではbefore_actionのifオプションを使用しています。ifオプションとは戻り値がtrueだった場合のみ実行するというもの。「もし、deviseに関するコントローラー処理であれば実行する」という読み下しになります。
今回はdeviseというGemを用いてユーザー管理機能を実装する方法を学びました。今後もRailsに関しての情報発信をしていきますのでご覧になってください。
コメント