見出し画像

【Rails6】[初学者向け]Q&Aサイトを作ろう!★③Devise導入編★

Deviseを導入してみよう

rails にはユーザー認証機能を実装するのに便利なDeviseというgemがあります。Deviseを利用することで、ログイン、ログアウト、会員登録、メール認証などのきのを簡単に実装することができます。

まず、下準備として、ログイン機能の実装のためのgitブランチを用意しましょう。
1つのアプリケーションを開発するのに、たくさんの機能実装をします。masterブランチやdevelopブランチだけで作業を行うことも個人開発の上では特に問題ありませんが、1つのブランチ上に全てのコミットログが積まれていくので、後でログを見返したときに、どこからどこまでが「いいね!機能」を実装したログなのか、把握するのが難しくなってしまいます。

なので、ブランチは可能な限り実装機能単位でブランチを切っていき、その機能に関連したコミットをそのブランチのログに残していくようにしましょう。

今回は、Deviseを使ったユーザー認証機能の実装なので、「user_auth」という名前でブランチを切りたいと思います。

以下のコマンドで新しくブランチを切ってみてください。

ubuntu:~/environment $ cd QA_site

ubuntu:~/environment/QA_site (master) $ git checkout -b user_auth

user_authブランチが生成できたら、さっそくDeviseを導入してみましょう。
railsプロジェクトにgemを導入する場合は、Gemfileにインストールしたい記述します。Gemfileはappディレクトリに直下にあります。

>> Gemfile

~~省略~~

gem 'bootsnap', '>= 1.4.2', require: false

group :development, :test do
gem 'byebug', platforms: [:mri, :mingw, :x64_mingw]
end

group :development do
gem 'web-console', '>= 3.3.0'
gem 'listen', '~> 3.2'
gem 'spring'
gem 'spring-watcher-listen', '~> 2.0.0'
end

group :test do
gem 'capybara', '>= 2.15'
gem 'selenium-webdriver'
gem 'webdrivers'
end

gem 'tzinfo-data', platforms: [:mingw, :mswin, :x64_mingw, :jruby]

//ここに追加
gem 'devise'

Gemfileの最下部にgem 'devise'を記述します。

次にターミナルからdeviseをインストールするコマンドを叩きます。

ubuntu:~/environment/QA_site (master) $ bundle install

ubuntu:~/environment/QA_site (user_auth) $ rails generate devise:install

// create  config/initializers/devise.rb
// create  config/locales/devise.en.yml
// 上記2つのファイルが作成されます 

下のようなメッセージも表示されますが、こちらはエラーではないので問題ないです。

画像1

続いて、deviseで用意されているviewファイルを作成します。

ubuntu:~/environment/QA_site (user_auth) $ rails g devise:views

画像2

様々なhtml.erbファイルが作成されました。

次に、Userモデルを作成していきます。

ターミナルで以下のコマンドを入力してUserモデルを作成してください。

ubuntu:~/environment/QA_site (user_auth) $ rails generate devise User

画像3

Userモデルに関係するファイルが一括生成されました。

次に、config/routes.rbを開き、ユーザーがアクセスしたときに、deviseで用意されているデフォルトのhtmlが表示されるように、ルーティングを設定しましょう。

>> config/routes.rb

Rails.application.routes.draw do
// ここから
devise_for :users
// ここまで追加

root 'top#index'
end

routes.rbにdevise_for :usersと記述することで、deviseで用意されたhtmlページを呼び出すことが可能になります。

続いて、Userモデルに対応するusersテーブルを作成しましょう。

先程、Userモデルを作成した際に、マイグレーションファイルも一緒に生成されました。

create    db/migrate/20210806120815_devise_create_users.rb

// 「20210806120815」は生成された日時になります

マイグレーションファイルは、テーブルの設計図です。テーブルはこのマイグレーションファイルに記述されている通りに作成されます。

Userモデル作成時に生成されたマイグレーションファイルを確認してみましょう。

db/migrate/20210806120815_devise_create_users.rbを開いて見てください。

// frozen_string_literal: true

class DeviseCreateUsers < ActiveRecord::Migration[6.0]
def change
 create_table :users do |t|
  
   〜デフォルトから有効化されている〜
   t.string :email,              null: false, default: ""
   t.string :encrypted_password, null: false, default: ""

   〜デフォルトから有効化されている〜     
   t.string   :reset_password_token
   t.datetime :reset_password_sent_at

   〜デフォルトから有効化されている〜   
   t.datetime :remember_created_at

   〜デフォルトの状態では有効化されていない〜
   // t.integer  :sign_in_count, default: 0, null: false
   // t.datetime :current_sign_in_at
   // t.datetime :last_sign_in_at
   // t.string   :current_sign_in_ip
   // t.string   :last_sign_in_ip

   〜デフォルトの状態では有効化されていない〜
   // t.string   :confirmation_token
   // t.datetime :confirmed_at
   // t.datetime :confirmation_sent_at
   // t.string   :unconfirmed_email // Only if using reconfirmable

   〜デフォルトの状態では有効化されていない〜
   // t.integer  :failed_attempts, default: 0, null: false // Only if lock strategy is :failed_attempts
   // t.string   :unlock_token // Only if unlock strategy is :email or :both
   // t.datetime :locked_at


   t.timestamps null: false
 end

  add_index :users, :email,                unique: true
  add_index :users, :reset_password_token, unique: true
  // add_index :users, :confirmation_token,   unique: true
  // add_index :users, :unlock_token,         unique: true
 end
end

先程も言及した通り、このマイグレーションファイルはusersテーブルの設計図になります。

その設計図を見ると、ほとんどのカラムが無効化されており、最低限のカラムしか有効されていないことがわかりますね。

まずは、デフォルトの状態でdeviseを動かしてみましょう。

ターミナルで以下のコマンドを入力してください。

ubuntu:~/environment/QA_site (user_auth) $ rails db:migrate

画像4

画像のように、create_table(:users)と表示されればusersテーブルが生成されています。

それでは実際にdeviseを使ってユーザー登録画面を表示させてみましょう。

今回、deviseという新しいgemを追加したので、ターミナルでcontrol + cを押して一度サーバーを落とし、$ rails sever でサーバーを再起動させください。サーバーを再起動しないと、画像のようなエラーが表示されます。

画像5

サーバーを再起動させたら、Hello Worldを表示させているブラウザのurlの末尾に「/users/sign_up」を追加してアクセスしてみてください。

https://xxxxxxxxxx.vfs.cloud9.ap-northeast-1.amazonaws.com/users/sign_up

画像6

問題なければシンプルですがこのような画面が表示されます。

また、末尾に「/users/sign_in」を追加してアクセスすると、デフォルトのログイン画面が表示されます。

https://xxxxxxxxxx.vfs.cloud9.ap-northeast-1.amazonaws.com/users/sign_in

画像7

上記のような画面が表示されれば大丈夫です。
ただ、デフォルトのhtmlのままだと味気ないですよね。

なので、ここからはBootstrapというHTML/CSS/JavaScriptのフレームワークを導入しながらviewを整えていく方法をお伝えしていきます。

いいなと思ったら応援しよう!