2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

[Rails] deviseの導入方法

Posted at

はじめに

Ruby on RailsのGemであるdeviseの導入方法について紹介します。
私自身プログラミングを初めて半年程の初心者の為、不備等あるかも知れませんが、最後までご覧頂けたら嬉しいです。

それでは早速始めていきましょう!

deviseとは

RubyのGem(ライブラリ)の1つ。
User管理機能を簡単に実装するためのGem。
実際に運用されている多くのRailsアプリケーションで使用されている。

deviseインストール

Gemfileに追記

Gemfile
# 最後の行
gem 'devise'

Gemfile記述後、ターミナルでGemのインストールをおこなう。
※カレントディレクトリが作業ディレクトリになっていること

ターミナル
% bundle install

設定フォイルも一緒に作成
deviseを使用するためには、Gemのインストールに加え、 devise専用のコマンドで設定ファイルを作成する必要がある。
※現時点では、Gem(devise)をインストールしたら、最初に1度実行しておく程度の認識で問題ありません。

ターミナル
% rails g devise:install

Userモデルを作成

deviseのモデル作成用コマンドでUserモデルを作成
rails g deviseコマンドは、deviseによるユーザー機能の対象を指定することで、モデルとマイグレーションの生成やルーティングの設定などをまとめておこなってくれる。

ターミナル
% rails g devise user

実行すると、モデルが生成され、routes.rbにはdeviseに関連するパスが追加される。

テーブルを作成

db/migrate/20XXXXXXXXX_devise_create_users.rb
class DeviseCreateUsers < ActiveRecord::Migration[6.0]
 def change
   create_table :users do |t|
     ## Database authenticatable
     t.string :email,              null: false, default: ""
     t.string :encrypted_password, null: false, default: ""
     # 追加カラム
     t.string :nickname,           null: false

     ## Recoverable
     t.string   :reset_password_token
     t.datetime :reset_password_sent_at

     ## Rememberable
     t.datetime :remember_created_at

     # 省略

     t.timestamps null: false
   end

   add_index :users, :email,                unique: true
   add_index :users, :reset_password_token, unique: true
   # add_index :users, :confirmation_token,   unique: true
   # add_index :users, :unlock_token,         unique: true
 end
end

マイグレーションファイルを見てみると、
emailとパスワード用のカラムは自動で生成されるようになっているので、
他に追加したいものがあればここでマイグレーションファイルに追記する。
(今回はnicknameカラムを追加する)

マイグレーションを実行

ターミナル
% rails db:migrate

ここまででusersテーブルが作成できました。

deviseのビュー作成

現時点でdeviseのログイン/サインアップ画面が自動的に生成されるがビューファイルとしては生成されない。
これは、deviseのGem内に存在するビューファイルを読み込んでいるため。
deviseのビューファイルに変更を加えるためには、deviseのコマンドを利用して、ビューファイルを生成する必要がある。

ターミナル
% rails g devise:views

これで、deviseに用意されたビューファイルをコピーし、app/viewsの配下に作成できる。
ビューをカスタマイズしたい場合は、ここで生成されたファイルを編集すれば良い。

今回はニックネームカラムを追加した為、サインアップ画面にニックネーム入力欄を追加する。

app/views/devise/registrations/new.html.erb
<h2>Sign up</h2>

<%= form_for(resource, as: resource_name, url: registration_path(resource_name)) do |f| %>
  
 # 省略

  <div class="field">
    <%= f.label :nickname %><br />
    <%= f.text_field :nickname, autofocus: true %>
  </div>

  <div class="field">
    <%= f.label :email %><br />
    <%= f.email_field :email %>
  </div>

  # 省略

<% end %>

<%= render "devise/shared/links" %>

コントローラの編集

サインアップ時にUser情報を受け取れるようにする。
deviseの処理を行うコントローラーはGem内に記述されているため、編集することができない。

application_controller.rbに記載する。
このフォイルに記述することで、全てのコントローラーに継承される。

app/controllers/application_controller.rb
class ApplicationController < ActionController::Base
  before_action :configure_permitted_parameters, if: :devise_controller?

  private
  def configure_permitted_parameters
    devise_parameter_sanitizer.permit(:sign_up, keys: [:nickname])
  end
end

上記のコード説明

if: :devise_controller?
deviseに関するコントローラーの処理であれば、そのときだけconfigure_permitted_parametersメソッドを実行するように設定している。
:devise_controller?とは、deviseのヘルパーメソッド。

configure_permitted_parameters
deviseの提供元では、新たに定義するメソッド名をconfigure_permitted_parametersと紹介していることから、慣習的にこのメソッド名で定義することが多い。
あくまで慣習なので定義するメソッド名は自由。

devise_parameter_sanitizer
deviseにおけるparamsのようなメソッド。deviseのUserモデルに関わる「ログイン」「新規登録」などのリクエストからパラメーターを取得できる。

permit(:sign_up, keys: [:nickname])
deviseに定義されているpermitメソッドであり、Railsではじめから使用できたpermitメソッドとは異なるもの。
第一引数にdeviseの処理名、第二引数にkeysというキーに対し、配列でキーを指定することで、許可するパラメーターを追加する。

devise_parameter_sanitizerメソッドとpermitメソッドを組み合わせることにより、deviseに定義されているストロングパラメーターに対し、自分で新しく追加した(今回ならnickname)カラムも指定して含めることができる。

おまけ

deviseでよく使うメソッドを紹介します。
user_signed_in?
Userがログイン済みかtrueかfalseを得ることができる。

最後に

今回は私がRuby on Railsを始めて一番最初に難しいと思った実装について紹介しました。

どうしても分からなかったり、間違い箇所がありましたら、質問を頂ければと思います。
Twitterアカウント: https://twitter.com/DeguchiRyo0527

最後までご覧頂きありがとうございます。

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?