Shoeisha Technology Media

CodeZine(コードジン)

特集ページ一覧

Railsでユーザー認証機能を実装しよう~定番のgem「devise」活用法(2)

これだけは押さえておきたい!Rails開発で使えるgemパッケージ/ツール 第2回

  • LINEで送る
  • このエントリーをはてなブックマークに追加
2018/06/27 14:00

 前回、Railsアプリ開発におけるRubyGemsの役割を確認するとともに、deviseにおける基本的な機能の概要を理解し、実際にdeviseが提供するコマンドを使用してdeviseの導入を開始しました。今回は、deviseを用いることで、Railsチュートリアルなどの実装と異なり、ほとんどプロダクトのコードを記述することなくユーザー認証機能を追加できることを体験していきます。  

目次

Userモデルを自動生成する

 前回rails g devise:installコマンド実行時に提示された手順に従って、ビューファイルの生成をrails g devise:viewコマンドで行いました。

 次に、データベースにユーザー情報を格納するDatabase Authenticatableモジュールの機能を使うために、さらにユーザー情報を格納するUserモデルをビュー同様にdeviseが提供するgenerateコマンドで作成します。

bin/rails g devise User
Running via Spring preloader in process 21678
      invoke  active_record
      create    db/migrate/20180321101835_devise_create_users.rb
      create    app/models/user.rb
      invoke    test_unit
      create      test/models/user_test.rb
      create      test/fixtures/users.yml
      insert    app/models/user.rb
       route  devise_for :users

 なお、ユーザー情報を格納するモデルクラス名はUser以外を指定することも可能です。例えばMemberを指定すると、作成されるモデルクラスはapp/models/member.rbとなります。

 実行結果から、モデルに対応するusersテーブルを作成するマイグレーションファイルや自動テスト用のファイルが生成されていることが分かります。まず、自動生成されたUserモデルを確認します。

[リスト 1]app/models/user.rb
class User < ApplicationRecord
  # Include default devise modules. Others available are:
  # :confirmable, :lockable, :timeoutable and :omniauthable
  devise :database_authenticatable, :registerable,
         :recoverable, :rememberable, :trackable, :validatable
end

 deviseというDSLの後、deviseが提供するモジュールが指定されています。前回の表の通り、デフォルトで有効となっているのは:database_authenticatableなど6つです。デフォルトでは無効となっている:confirmableなどを有効にする場合は、deviseのDSLの後に追加で指定します。ここではデフォルト設定のままで進めます。

マイグレーションの実行

 続いて、マイグレーションファイルを確認しましょう。

マイグレーションファイルの設定
モジュール フィールド名 データ型 意味
Database authenticatable email string  ユーザー登録時のメールアドレス
Database authenticatable encrypted_password string 暗号化されたパスワード
Recoverable reset_password_token string パスワードリセット時のトークン
Recoverable reset_password_sent_at datetime パスワードリセットメール送信日時
Rememberable remember_created_at  datetime [Remember me]チェックボックスをON
Trackable sign_in_count integer ログインした回数
Trackable current_sign_in_at datetime 直近でログインした日時
Trackable current_sign_in_ip inet  直近でログインした接続元IP
Trackable  last_sign_in_at inet inet 前回ログインした接続元IP

 モジュールごとに使うカラムが定義されています。こちらもデフォルトで有効となっているモジュールで使うカラムのみ、コメントアウトが外されています。無効となっている機能を有効にする場合は、該当モジュールのコメントアウトを外してマイグレーションを実行します。ここではデフォルトのままで進めます。

 以下のコマンドでマイグレーションを実行します。データベースを作成していない場合は先にデータベースを作成してください。

bin/rails g db:create # DB未作成なら実行
bin/rails g db:migrate

  • LINEで送る
  • このエントリーをはてなブックマークに追加

著者プロフィール

  • WINGSプロジェクト 竹馬 力(チクバ ツトム)

    <WINGSプロジェクトについて> 有限会社 WINGSプロジェクトが運営する、テクニカル執筆コミュニティ(代表 山田祥寛)。主にWeb開発分野の書籍/記事執筆、翻訳、講演等を幅広く手がける。2018年11月時点での登録メンバは55名で、現在も執筆メンバを募集中。興味のある方は、どしどし応募頂...

  • 山田 祥寛(ヤマダ ヨシヒロ)

    静岡県榛原町生まれ。一橋大学経済学部卒業後、NECにてシステム企画業務に携わるが、2003年4月に念願かなってフリーライターに転身。Microsoft MVP for ASP/ASP.NET。執筆コミュニティ「WINGSプロジェクト」代表。 主な著書に「入門シリーズ(サーバサイドAjax/XMLD...

バックナンバー

連載:これだけは押さえておきたい! Rails開発で使えるgemパッケージ/ツール
All contents copyright © 2005-2018 Shoeisha Co., Ltd. All rights reserved. ver.1.5