SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

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

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

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


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

 前回、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

会員登録無料すると、続きをお読みいただけます

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

次のページ
deviseによって追加されたルーティングの確認

この記事は参考になりましたか?

  • このエントリーをはてなブックマークに追加
これだけは押さえておきたい! Rails開発で使えるgemパッケージ/ツール連載記事一覧

もっと読む

この記事の著者

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

WINGSプロジェクトについて> 有限会社 WINGSプロジェクトが運営する、テクニカル執筆コミュニティ(代表 山田...

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

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

静岡県榛原町生まれ。一橋大学経済学部卒業後、NECにてシステム企画業務に携わるが、2003年4月に念願かなってフリーライターに転身。Microsoft MVP for Visual Studio and Development Technologies。執筆コミュニティ「WINGSプロジェクト」代表。主な著書に「独習シリーズ(Java・C#・Python・PHP・Ruby・JSP&サーブレットなど)」「速習シリーズ(ASP.NET Core・Vue.js・React・TypeScript・ECMAScript、Laravelなど)」「改訂3版JavaScript本格入門」「これからはじめるReact実践入門」「はじめてのAndroidアプリ開発 Kotlin編 」他、著書多数

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/10899 2018/07/05 11:41

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング