deviseのメモ書き


はじめに

railsでユーザー管理で欠かすことのできないgemファイルである、devise関連。
よく忘れがちなので、手順を個人的に控えておこうと思いこの記事をかき始めた。

deviseとは

そもそもdeviseとは、webアプリケーションに認証機能を付け加えるというもの。認証機能というと仰々しいが、単純にいうとログインログアウト機能をつけて、ユーザーを登録したり管理したりするもの、というとわかりやすい気がする。
基本的にwebサービスを作っていくと、ここら辺の機能はつけていきたいと思うところだ。

deviseのインストール

まずはdeviseをインストールしていく。deviseはgemの一種であるため、gemファイルに記述することでインストールが可能となる

gem `devise`

そのあとターミナルにて、gemファイルの更新をする

bundle exec bundle install

これでgemファイルは更新されたため、deviseのインストールの準備が整った状態になっている。

rails g devise:install

これにてdeviseのインストールの完了。

その後の手順

ここからは他にdeviseを用いてどういうことをやったかの一例を示していこうと思う。

viewの導入

deviseで扱うviewをまずは導入していこうと思う。

rails g devise:views

これにて、deviseを用いるときのviewファイルを作成することができた。
この中で特に扱ったファイル群としては、registrationディレクトリとsessionディレクトリである。
まずregistrationディレクトリだが、これはユーザーの登録時のviewをここで管理している。ここでnewアクション用のviewファイルを作成することで、ユーザーの登録をすることができる。
次にsessionディレクトリだが、こちらはユーザーのサインインをするために扱うことになる。

userモデルの作成

上記でdeviseを導入できているのだが、次はここからdeviseを用いてユーザーの管理をしていく。この時にまずは、ユーザーモデルの作成をしなければユーザーを登録することができないためユーザーモデルを作成していくのだが、その作成時にユーザーモデルとdeviseを結び付けて作成する。

rails g devise user

このコマンドでuserモデルを作成するとともに、devise機能をつけている。またモデルの作成であるため、この操作によりmigrationファイルが作成される。
この時に約一年前くらいまではこういうことが起きなかったのだが、現在このコマンドでモデルを作成すると一部がコメントアウトされてしまい後ほど実装に困ることになるため、以下の部分のコメントアウトを先に外しておくことを勧めておく。

      ## Trackable
      t.integer  :sign_in_count, default: 0, null: false
      t.datetime :current_sign_in_at
      t.datetime :last_sign_in_at
      t.string   :current_sign_in_ip
      t.string   :last_sign_in_ip

ここはログイン情報を担っており、ログイン時間などの情報などを格納するようにしている。このTrackableの部分がデフォルトではコメントアウトされているためここを先にコメントアウトを外しておくべきかなと思う。

その他任意の部分を編集した後、migrationファイルを適用させなければならないためいつものコマンドでmigrationファイルを更新しておく。

bundle exec rake db:migrate

configure_permitted_parameters

基本的に devise はメールアドレスパスワードの設定のみとなっている。
そこで他の要素を追加したい時に、このメソッドを使って追加できるようにする。
application_controllerに下記のように記述する。(下記例ではサインアップ時に名前の登録も追加)

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

そしてこれをbefore_actionで設定すればこのメソッドを呼び出す事ができるので、これも覚えておくと今後の追加要素に適用可能。

まとめ

deviseの導入について今回はまとめさせてもらった。よく使う機能だと思うので、知識的にまとめておけばこれからすぐに使えるようになるのではないのかな。