railsでdeviseを使ってみる

こんにちは!

1週間で学んだことで、何を書くか悩んでいたのですが、便利な代わりにややとっつきにくかったdeviseについて書こうと思います。
自身の理解も大したことないので、簡単に。。。

decviseとは

まず、deviseとは何かですが、rubyのライブラリであるgemの一つで、deviseを使うことでユーザ管理機能を簡単に実装することができます。
つまり、ユーザ登録とか、ログイン/ログアウトの機能を使えるようになります。
詳細はGitHubを見ていただければ。。。
GitHubへのリンク


deviseの導入

実は、上述のGitHubのReadmeにあるGetting startedを読めば、導入できてしまうのですが、作業内容をまとめていきます。
ここでの作業は、デフォルトではテーブルのカラムにemailとパスワードしかないので、usernameをマイグレーション時に追加し、usernameの情報をdbに保存するところまでです。
本当はデフォルトのビューの場合、画像のようにusernameを登録するフォームがないため、ビューの編集もしないといけないのですが、今回は割愛します。

f:id:kojiprg:20200812170026p:plain
デフォルトのユーザ登録ページ

また、以下の説明では、

rails s

によるサーバの再起動は省きます。原因不明のエラーメッセージが出たときは、サーバの再起動を試してください。

今回の手順です。

  1. Gemfileで使用を宣言
  2. ターミナルでインストール
  3. モデルの作成
  4. マイグレーション
  5. dbへのデータ保存の許可
1. Gemfileで使用を宣言

まずは、アプリケーションを作成した時に、自動で作成されているGemfileに以下の記述をします。一番最後に書き加えます。

gem 'devise'
2. ターミナルでインストール

続いて、実際にdeviseを使用できるように設定します。
新しくgemを導入したので、使えるようにするためにターミナルで以下のコマンドを実行します。

bundle install

上記のコマンドは、gemを追加したとき必ず実行します。
deviseではさらに次のコマンドも実行する必要があります。これにより、deviseを使うために必要なファイルが作成されます。

rails g devise:install

これで、deviseの機能を使うことができるようになりました。

3. モデルの作成

次に、ユーザ情報を登録するためにモデルを作成します。
今回モデル名は、Userモデルにします。
deviseでモデルを作成する場合、通常とコマンドが異なります。

rails g devise user

これで、Userモデルとマイグレーションファイルが作成されます。

4. マイグレーション

今回は、マイグレーションファイルに以下のように追記して、usernameカラムを作成します。

      t.string :username,           null: false

null: falseは空登録を防ぐためです。(あくまで空なので、バリデーションをしないと""はok)
全体としては、以下のようになります。

# frozen_string_literal: true

class DeviseCreateUsers < ActiveRecord::Migration[6.0]
  def change
    create_table :users do |t|
      ## Database authenticatable
      t.string :username,           null: false
      t.string :email,              null: false, default: ""
      t.string :encrypted_password, null: false, default: ""
(後略)

編集が完了したら、ターミナルからマイグレーションします。
マイグレーションは通常通りです。

rails db:migrate
5. dbへのデータ保存の許可

最後に、データベースへの保存の許可をします。
deviseでは、デフォルトで存在しているカラム以外へのデータの保存が許可されていません。
そこで、app/controllers/application_controller.rbを編集して、マイグレーションで追加したusernameカラムへのデータ保存を許可します。
以下の方法は、最もシンプルな方法でこれ以外にも設定の方法はあります。
詳細は、「devise ストロングパラメータ」で調べられると思います。

class ApplicationController < ActionController::Base
  before_action :configure_permitted_parameters, if: :devise_controller?

  protected

  def configure_permitted_parameters
    devise_parameter_sanitizer.permit(:sign_up, keys: [:username])
  end
end

終わりに

以上で、deviseの基本的な内容のまとめになります。
ブログの性能を使い切れていないところがあるので、少しずつ慣れていきたいと思います。
最後まで、お付き合いいただきありがとうございました!

はじめまして、エンジニアを目指します

今月2020年の8月からプログラミングの勉強をはじめました。

最初の目標はエンジニアとして、働けるようになることです。

1週間ほど勉強した成果は、HTML/CSSにより、Webページの実装と、Rubyの基礎や、Ruby on Railsを使用して、簡単な投稿フォームを実装することができるようになりました。

学習の成果をアウトプットするために、毎週水曜日の更新を目標に頑張っていきたいと思っています。