改めてdeviseの使い方をおさらいしてみる

f:id:endoakak:20200725103757j:plain

学習のためにいくつかアプリを作ってきましたが、ユーザー管理機能の実装には必ずdeviseを使っています。しかし、毎回なんとなく使っていて、deviseが何をしてくれているのかはあまり意識してこなかったので、少し考えてみることにしました。

gem 'devise'をインストール

gemfileにgem 'devise'と記述してbundle installするだけ。

deviseの設定ファイルを作成

deviseをインストールしたら、ターミナルで次のコマンドを実行します。

% rails g devise:install

f:id:endoakak:20200819092358p:plain

ファイルが二つ生成されて、メッセージが4つ出てきましたね。

まずはconfig/initializers/devise.rbというファイル。これがdeviseの機能に関する設定ファイルみたいですね。全部読むのは大変そうですが、メールアドレスやパスワードのバリデーションもここに書いてありました。

次にconfig/locales/devise.en.ymlというlocaleファイル。エラーなどのメッセージが書いてあります。

その後の4つのメッセージもみてみると、

一つ目はアプリケーションにurlを与えましょうということですかね。

二つ目が、ルートを設定しましょう。

三つ目が、フラッシュを表示するための記述をapp/views/layouts/application.html.erbに書いておきましょう。

最後に、ビューファイルを編集したければrails g devise:viewsを実行しましょう。

なるほど。普段しっかり読んでいませんでしたが、こういうことが書かれていたんですね。

deviseを使ってUserモデルを作成

続いてモデルを作成します。User以外のモデルも作れるらしいですが、Userで使うことが多いと思います。

% rails g devise user

f:id:endoakak:20200819091551p:plain

マイグレーションファイルとユーザーモデル、テスト関連のファイルが作成されています。さらにusersに関するルーティングも自動で設定されました。

マイグレーション

マイグレーションファイルに必要なカラムを追加して、マイグレーションを行います。

rails db:migrate

deviseはログイン画面などのビューも自動で用意してくれるので、これだけで最低限のログイン機能は実装できました。

f:id:endoakak:20200819095133p:plain:h200

めちゃめちゃシンプルなので自分で編集したほうがいいとは思いますが。

ビューの編集

deviseが用意してくれているビューを編集するには、次のコマンドを実行します。

% rails g devise:views

これによりapp/views/deviseのなかにビューファイルが作成されるので、自分で編集することが可能になります。

f:id:endoakak:20200819192335p:plain:w150

こんな感じでたくさん出来ています。主に使うのは新規登録画面の/registration/new.html.erbとログイン画面の/sessions/new.html.erbですかね。

deviseの機能

deviseをインストールすると使える10個のモジュールがapp/models/user.rbに書いてあります。いろいろ書いてあるなあと思いつつ今までスルーしていました。

f:id:endoakak:20200819184239p:plain

database_authenticatable

パスワードの管理・認証をしてくれています。パスワードの暗号化なども行っています。

registerable

ユーザー登録が可能になります。アカウント情報の編集や削除もできます。

recoverable

パスワードのリセットが可能になります。

rememberable

ユーザートークンを生成してクッキーに保存、もしくは保存されたトークンの削除を行います。これによってユーザーがログインしたままの状態を保つことができます。

validatable

メールアドレスとパスワードに関するバリデーションを設定してくれています。メールアドレスには、空ではない、重複していない、フォーマットが正しいというバリデーション、パスワードには、空ではない、確認用と一致、6~128文字というバリデーションが設定されているみたいです。

confirmable

登録されたメールアドレスに対して確認のメールを送る、という機能を追加できます。

lockable

一定回数ログインに失敗するとアカウントがロックされる、という機能を追加できます。ロックの解除には登録されたメールアドレスにメールを送る、もしくは一定時間待つ、の二つの方法があります。

timeoutable

ユーザーが一定時間操作を行なっていないと自動的にログアウトさせる、という機能を追加できます。

trackable

ユーザーがログインした回数、時間、IPアドレスを記録することができるようになります。

omniauthable

Twitterアカウントでのログインなどを可能にするのに必要なものです。

まとめ

deviseにはまだ使ったことのない機能もいろいろあることがわかったので、使ってみたいです。詳しいことは使う時に調べるしかないですね。

ちなみに以前にも似たような記事を書いていましたが、この頃よりはdeviseやRailsでのアプリ製作に慣れてきたような気がします。成長してる、はず。

endoakak.hatenablog.com