rails devise完全入門!結局deviseって何ができるの?

どうも!
インストラクターのババです!
Railsを使用していると「devise」というgemをよく見かけると思います。
ただよく聞く割に

deviseってよく聞くけど何?
deviseの使い方がわからない
deviseってどんな機能があるの?

と、疑問を持っておられる方も少なくありません。
そこで今回は

deviseとは
deviseの使い方
deviseに機能を追加する

という順番でdeviseについて解説していきたいと思います。
これを読めばdeviseにどういった機能があるのかしっかりイメージできます!

目次

deviseとは

deviseとはrailsで作ったwebアプリケーションに簡単に認証機能を実装できるgemのことです。

認証機能と聞くと難しく感じますがようは、login,logout機能のことです。
deviseは認証機能を追加するためのgemの中で一番使用されており、コマンドを何度か打つだけで簡単に認証機能を実装することができます!

認証機能を自分で実装しようと思うとどうしても工数がかかったり、安全性の面で不安が出てきてしまいます。

deviseはそんな問題を一挙に解決してくれる優れもののgemです!

deviseの使い方

それでは実際にdeviseを使ってみましょう!

gem install

まずgemのインストールをしていきましょう!
GemFileに以下を記述していください。

source 'https://rubygems.org'

gem 'devise'

そのあとbundle installを行ってください。
これでgemのインストールは完了です。

セットアップ

deviseのセットアップは三つのコマンドで完了します

rails g devise:install

はじめに打つコマンドはrails g devise:installです。
deviseの設定ファイルをrailsアプリケーションにインストールするためのコマンドです。

$ rails g devise:install
      create  config/initializers/devise.rb
      create  config/locales/devise.en.yml
===============================================================================

Some setup you must do manually if you haven't yet:

  1. Ensure you have defined default url options in your environments files. Here
     is an example of default_url_options appropriate for a development environment
     in config/environments/development.rb:

       config.action_mailer.default_url_options = { host: 'localhost', port: 3000 }

     In production, :host should be set to the actual host of your application.

  2. Ensure you have defined root_url to *something* in your config/routes.rb.
     For example:

       root to: "home#index"

  3. Ensure you have flash messages in app/views/layouts/application.html.erb.
     For example:

<%= notice %>

 

<%= alert %>

4. You can copy Devise views (for customization) to your app by running: rails g devise:views ===============================================================================

出てくる文章について解説します。

1, Ensure you have defined default url options in your environments files.
デフォルトのURLを設定してくださいという意味です。デフォルトのURLは開発環境の場合localhost:3000になるので、例を元に記入していってください。

2, Ensure you have defined root_url to *something* in your config/routes.rb.
rootを設定してくださいという意味です。rootにしたいpathを例にならって設定しましょう。

3, Ensure you have flash messages in app/views/layouts/application.html.erb.
flashメッセージを表示するためのタグをapplication.html.erbに記入しましょう。
flashメッセージはそれぞれnotice, alertという変数に格納されます。

4, You can copy Devise views (for customization) to your app by running:
deviseのviewはデフォルトだと味気ないものになってしまいます。
viewをカスタマイズするためには rails g devise:views を打つ必要があります。
今回はカスタマイズを行わないので、何も打ち込まず進めていきます。

rails g devise User

次にdeviseで認証するためのモデルを作成していきます。
今回はUserモデルを作成するのでUserにしていますが、他のモデルを使用したい時はそのモデル名を打ち込むようにしてください。

$ rails g devise User
Running via Spring preloader in process 75195
Expected string default value for '--jbuilder'; got true (boolean)
      invoke  active_record
      create    db/migrate/20170104102510_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

rake db:migrate

おなじみmigrationファイルを読み込むためのコマンドです。

$ rake db:migrate
== 20170104102510 DeviseCreateUsers: migrating ================================
-- create_table(:users)
   -> 0.0232s
-- add_index(:users, :email, {:unique=>true})
   -> 0.0066s
-- add_index(:users, :reset_password_token, {:unique=>true})
   -> 0.0015s
== 20170104102510 DeviseCreateUsers: migrated (0.0317s) =======================

これでセットアップは完了です!

サインアップ

http://localhost:3000/users/sign_up
%e3%82%b9%e3%82%af%e3%83%aa%e3%83%bc%e3%83%b3%e3%82%b7%e3%83%a7%e3%83%83%e3%83%88-2017-01-04-19-46-50

サインイン

http://localhost:3000/users/sign_in
%e3%82%b9%e3%82%af%e3%83%aa%e3%83%bc%e3%83%b3%e3%82%b7%e3%83%a7%e3%83%83%e3%83%88-2017-01-04-19-48-16

このように画面が表示されていれば導入完了です。
このようにとても簡単に導入を行うことができます!

deviseに機能を追加する

作成したばかりのUserファイルを見てみると、このようになっていることがわかります。

class User < ActiveRecord::Base
  # Include default devise modules. Others available are:
  # :confirmable, :lockable, :timeoutable and :omniauthable
  devise :database_authenticatable, :registerable,
         :recoverable, :rememberable, :trackable, :validatable
end

このdeviseの後に続くシンボルが現在Userに導入されている機能です。
現在導入されている機能の他にも合計で10個のモジュールが用意されています。
それぞれの機能について解説していきます。

Database Authenticatable

データベースに保存されたパスワードが正しいかどうかの検証とを行ってくれます。
また暗号化も同時に行うためセキュリティ面でも安心できます。

Omniauthable

twitter, facebookなど現代のwebサービスで必須なSNS認証を行うためのモジュールです。
SNS認証をする場合このほかにもgemを追加する必要が出てくるので注意が必要です。

Confirmable

登録後メールを送り、そのメールのURLをクリックすると本登録が完了するといったような仕組みを作ることが可能になります。

Recoverable

パスワードをリセットするためのモジュールです。

Registerable

基本的にUser登録、編集、削除機能を作成することができます。

Rememberable

20日間ログインしたままにすると言った、永続ログイン機能を作成することができます。
ログイン画面の下の方にチェックボックスがあって、それをチェックすると永続ログインが有効化するといったような仕組みを作ることができます。

Trackable

サインイン回数、サインイン時間など、ユーザーの分析に必要なデータを保存しておくことができます。
サービスが成長するにはユーザーの分析が不可欠なので、有用な機能ですね。

Timeoutable

一定期間活動していないアカウントのログインを破棄する機能です。
ログインしたままだとログイン情報がオンライン上に残ってしまい悪用されてしまう可能性もあります。
セキュリティ面での向上を期待できる機能です。

Validatable

emailのフォーマットやパスワードの長さなど、一般的なバリデーションを追加してくれるモジュールです。

Lockable

ログインに何度も失敗すると、アカウントをロックすることができる機能です。
こちらの機能もセキュリティ面で向上が期待できますね。

まとめ

今回はdeviseの簡単な使い方とそれぞれの追加機能について解説していきました。
deviseは簡単だからこそ、何をしているか理解しないと、思わぬエラーが出てしまうことがあります。
この記事を参考にdeviseのイメージをしっかりつかむようにしましょう。

参考記事


【永久保存版】Railsのform_for使い方(select, checkbox, etc.)
更新日:2024年3月1日

この記事を書いた人

こんにちは!
今年大学を飛び出し、フリーランスエンジニアとして働いています、ババです!

エンジニアはしんどい仕事と思われていますが、実はそんなにしんどくなくて、お金ももらえて、社会のためになる素晴らしい仕事というのを伝えるために、侍で業務委託として働いています!!

フリーランスの日常やら書いているブログやってます=>http://www.babashun.net/

目次