railsでdeviseを使ってみる
こんにちは!
1週間で学んだことで、何を書くか悩んでいたのですが、便利な代わりにややとっつきにくかったdeviseについて書こうと思います。
自身の理解も大したことないので、簡単に。。。
decviseとは
まず、deviseとは何かですが、rubyのライブラリであるgemの一つで、deviseを使うことでユーザ管理機能を簡単に実装することができます。
つまり、ユーザ登録とか、ログイン/ログアウトの機能を使えるようになります。
詳細はGitHubを見ていただければ。。。
GitHubへのリンク
deviseの導入
実は、上述のGitHubのReadmeにあるGetting startedを読めば、導入できてしまうのですが、作業内容をまとめていきます。
ここでの作業は、デフォルトではテーブルのカラムにemailとパスワードしかないので、usernameをマイグレーション時に追加し、usernameの情報をdbに保存するところまでです。
本当はデフォルトのビューの場合、画像のようにusernameを登録するフォームがないため、ビューの編集もしないといけないのですが、今回は割愛します。
また、以下の説明では、
rails s
によるサーバの再起動は省きます。原因不明のエラーメッセージが出たときは、サーバの再起動を試してください。
今回の手順です。
- Gemfileで使用を宣言
- ターミナルでインストール
- モデルの作成
- マイグレーション
- 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を使用して、簡単な投稿フォームを実装することができるようになりました。
学習の成果をアウトプットするために、毎週水曜日の更新を目標に頑張っていきたいと思っています。