はじめに
deviseの導入手順について説明していきます。
deviseとはログイン機能を実装できるライブラリで、非常に便利です。deviseについてしらない人や、知っている人でも導入手順に自信がない人などの参考になればと思います。
deviseのインストール
まずはgemファイルにdeviseを追加しましょう。
gem 'devise'
忘れずににbundle installしておきます。
$ bundle install
その後deviseのインストールをします。
$ rails g devise:install
bundle installとdeviseのインストールが必要なので注意しましょう!
インストールを忘れて次に進むとマイグレーションに失敗し、少々面倒になります。
もしそうなった場合でも以下のリンクを参考に解決してください。
https://qiita.com/penguin_note/items/93b00c09c0da1f1a0eab
Userモデル、usersテーブルの作成
$ rails g devise user
このコマンドでマイグレーションファイルが作成され、devise用のルーティングが設定されます。
Usersテーブルに追加するカラムがある場合はこの段階でマイグレーションファイルに記述してマイグレーションさせておくと良いです。
(後から追加する場合は変更用のマイグレーションファイルを作成します)
# マイグレーションファイル
class DeviseCreateUsers < ActiveRecord::Migration[5.2]
def change
create_table :users do |t|
## Database authenticatable
t.string :name, null: false # 追加
t.string :email, null: false, default: "" # デフォルトで記載あり
t.string :encrypted_password, null: false, default: "" # デフォルトで記載あり
t.integer :group, null: false # 追加
# (略)
end
# (略)
end
マイグレーションファイルの内容を確認したらマイグレーションさせておきます。
$ rails db:migrate
画面確認
Userモデルを作成したときにルーティングは勝手に設定されているので、ターミナルでrails routes
と打って確認してみましょう。
sessionsがログイン・ログアウトに関するもので、registrationsが新規登録・編集・削除に関するものぐらいに思っておけばOKです。
試しに新規登録画面を見てみます。
registrationsのnewが新規登録ページのアクションなので該当するURIを指定してアクセスします。
ローカルサーバーを立ち上げてブラウザからhttp://localhost:3000/users/sign_up
にアクセスしてみましょう。
ちゃんと新規登録画面が表示されました。
ビューファイル
初期設定のままでは殺風景すぎるので、いろいろ装飾したいかと思います。
しかし、ビューファイルを探しても該当するものがありません。(たぶんどっかに隠れてる)
なので、ビューファイルを表示させる必要があります。これはターミナルで次のように入力するだけです。
$ rails g devise:views
これでapp/views/devise
以下に各種ビューファイルが表示されます。
新規登録画面はapp/views/devise/registrations/new.html.erb
、ログイン画面のビューはapp/views/devise/sessions/new.html.erb
が対応しています。
その他
deviseを導入するといくつか便利なメソッドが使えるようになります。
とりあえず次の2つは覚えておいて良いかと思います。
user_signed_in?
ログイン状態かどうかを判定するメソッドです。ログインしていればtrue、していなければfalseを返します。
ifの条件にして、ログインしてなければログインページにリダイレクトさせるなどのように使えます。
current_user
ログインしているuserのactive recordを返します。
マイページのpathを指定するときなんかにcurrent_user.id
とすれば、ログインしているuserのidを返してくれるので便利です。
最後に
これだけの操作で新規登録やログインなどの機能を実装できるのは便利すぎます。
deviseの導入は一つのアプリ製作で1回しかやらないので、手順を覚えておくことは難しいと思います。導入の際はこの記事を参考にしてもらえると幸いです。