4
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

[Rails5]deviseってなんぞ?

Last updated at Posted at 2019-01-07

はじめに

Railsの勉強としてgem周りを触ってみる企画です。
まずは手始めに有名どころ

devise

を試してみようかと思います。

どういうgemなの?

簡単にいうとログインログアウト等の認証機能を簡単に追加できるgemとのこと。
百聞は一見に如かずということでとりあえず触ってみます。

検証環境

以下の環境で実施しました。

[client]
・MacOS Mojave(10.14.2)
・Vagrant 2.2.2
・VBoxManage 6.0.0

[virtual]
・CentOS 7.6
・Rails 5.2.2
・ruby 2.3.1

ご参考までに。

devise導入

1.gemのインストール

事前にRails勉強用に作成したプロジェクトで進めます。
各MVCは適当に掲示板アプリを想定してPostsコントローラーなどを生成済みです。
(index,show,editの空ページが見れる程度)

$ rails g model post
$ rails g controller posts index show edit

その前提のもと、Gemfileに以下を追記。

Gemfile
# Devise
gem 'devise'

追記したらインストール。

$ bundle install

-----------
Fetching devise 4.5.0
Installing devise 4.5.0
-----------
→無事に完了。

2.deviseインストールと設定の調整

rails generateでdeviseをインストールしたら以下のメッセージが表示された。

$ 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:

       <p class="notice"><%= notice %></p>
       <p class="alert"><%= alert %></p>

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

       rails g devise:views

===============================================================================

英語分からないマンなので、文章を翻訳ツールにかけてみて、
ざっと見たところ

  • 1.デフォルトURLを設定してね
  • 2.root_url設定してね
  • 3.フラッシュメッセージ出すにはこう設定してね
  • 4.Deviseのviewはこのコマンドで作ってね

ということらしいので、それぞれ調整。

development.rb
# Devise
config.action_mailer.default_url_options = { host: 'localhost', port: 1234 }
routes.rb
root 'posts#index'
application.html.erb
<!DOCTYPE html>
<html>
  <head>
    <title>掲示板アプリと見せかけたRails gemトライアル</title>
    <%= csrf_meta_tags %>
    <%= csp_meta_tag %>

    <%= stylesheet_link_tag    'application', media: 'all', 'data-turbolinks-track': 'reload' %>
    <%= javascript_include_tag 'application', 'data-turbolinks-track': 'reload' %>
  </head>

  <body>
    <p class="notice"><%= notice %></p>
    <p class="alert"><%= alert %></p>
    <%= yield %>
  </body>
</html>
$ rails g devise:views

ここまでで最低限の設定はおそらく完了。

3.Userモデル生成とマイグレーション実行

続いてdeviseを使ってUserモデルを生成します。

$  rails g devise User

そうするとUserモデルとマイグレーションファイルが生成されます。
また、routes.rbに

rotes.rb
devise_for :users

が同時に自動で追記されました。

生成されたUserモデルやマイグレーションはざっと目を通しておきつつ、
今回は生成された際のデフォルトのままで進めてみます。

$ bundle exec rake db:migrate

4.viewを編集

ログイン/ログアウトやログイン情報を出すように
メニューを追加してみます。以下を追記。

application.html.erb
<header>
  <nav>
    <% if user_signed_in? %>
    <%= link_to 'ログアウト', destroy_user_session_path, method: :delete %>
    <% else %>
    <%= link_to 'サインアップ', new_user_registration_path %>
    <%= link_to 'ログイン', new_user_session_path %>
    <% end %>
  </nav>
</header>

CSSは今回スルー。
(本当はキッチリ綺麗なものを作りたいけど!)

5.動作確認

ではサーバーを立ち上げてページを見てみましょう。

cap1.png

cap2.png
cap3.png
cap4.png

Foo!
クソみたいなデフォルト画面ですが、
無事に表示されましたね。

サインアップ、ログイン、ログアウトそれぞれ動作確認を行い、
特に問題なく動作することを確認して完了!

所感

やはりgemは便利だと思った。(小並感)
ただし当然カスタマイズして使わないと無骨なモノになってしまうので、
上記まではあくまでようやくスタートラインに立った感じであることは念頭に。

ということで後日deviseについて掘り下げます。
他gemも触りたいので、実施・掲載日は未定・・・。

おわりに

何かお気づきの点がありましたら、
ご指摘やアドバイス等頂けると大変助かります!

4
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?