ユーザー認証機能を実装(1)
ここからは実際にdeviseを使ってユーザー認証機能を実装していきます。実装するにあたり、Rubyインストール等の環境構築、rails new
コマンドでRailsアプリを作成するまでの手順は省略します。開発環境は以下の通りです。
- macOS High Sierra
- Ruby 2.5.1
- Ruby on Rails 5.2.0
- PostgreSQL 10.3
なお、開発環境構築手順は過去のCodeZine連載「サンプルコードで学ぶRuby on Rails 5実践入門」の以下記事をご参考ください。Ruby/Railsのバージョンは古いですが、同じ手順で環境構築できます。
実装する機能の概要
deviseがデフォルトで提供する機能をRailsプロジェクトに導入し、各機能の動作を確認していきます。
具体的には、まずdeviseが提供するgenerateコマンドでdeviseをRailsプロジェクトにインストールします。その後、generateコマンドの実行結果に示される通り、Railsアプリの動作を定義していきます。最低限の環境が整った時点で、Railsアプリを起動しユーザー登録の動作を確認します。最後にログアウト/ログインの動作確認も行えるように修正していきます。
deviseの基本機能を導入
開発環境で示した通り、データベースはPostgreSQLを使います。以下のコマンドでRailsアプリを作成した直後を前提としてdeviseのインストールから手順を解説します。
bundle exec rails new . -d postgresql
まず、deviseをインストールするためにGemfile
にdeviseを追記します。
gem 'devise'
以下のコマンドでdeviseをインストールします。執筆時点ではdeviseのバージョンは4.4.3がインストールされました。
bundle inst
deviseがインストールされるとdeviseが提供するgenerateコマンドを使用することができます。以下のコマンドを実行し、deviseの基本機能をRailsアプリにインストールします。
bin/rails g devise:install
Running via Spring preloader in process 19733 create config/initializers/devise.rb create config/locales/devise.en.yml =============================================================================== Some setup you must do manually if you haven't yet: …(中略)… ===============================================================================
実行後、deviseの設定ファイルが2つ新規作成され、その後、deviseの各種機能のセットアップ手順について詳細が表示されます。この手順通りにdeviseのセットアップを行っていきましょう。
動作定義用設定ファイルを確認
deviseのセットアップを開始する前に、作成された2つの設定ファイルを確認します。設定ファイルの役割は以下の通りです。
設定ファイル | 役割の概要 |
---|---|
config/initializers/devise.rb | deviseの機能ごとの各種動作定義 |
config/locales/devise.en.yml | 各種メッセージのローカライズファイル |
config/initializers/devise.rb
の設定のうち、デフォルトで有効になっているものを中心に以下の通り紹介します。
設定項目 | デフォルト値 | 役割 |
---|---|---|
mailer_sender | 'please-change-me-at-config-initializers-devise@example.com' | パスワードを忘れた場合などの際に送られるメールのfromアドレスを指定 |
require | 'devise/orm/active_record' | deviseがサポートするORマッパーを指定。デフォルトではActiveRecordを使用 |
case_insensitive_keys | [:email] | 大文字/小文字を区別しないカラム名を指定 |
strip_whitespace_keys | [:email] | 空白を除去するカラム名を指定 |
password_length | 6..128 | Validatableモジュール用の設定で、パスワードの長さを指定 |
reset_password_within | 6.hours | パスワードリセットするためのURLの有効期限を指定 |
紹介したもの以外の設定もあります。機能を変更する場合にどの設定を変更するといいかある程度事前に把握しておくことが求められますので、面倒でもどういった設定があるかは一度ざっと目を通しておいた方が良いでしょう。
また、デフォルトのままでも基本的には動作しますが、環境に合わせて適宜変更してください。ここではひとまずデフォルトのままで進めます。