Code Journey

30代未経験からプログラミング挑戦中(追うものは追われる者に勝る)

Ruby on Railsのdeviseで使えるようになるヘルパーメソッド一覧

はじめに

私は現在、フィヨルドブートキャンプにて未経験からプログラミング学習をしているものになります。

この記事は、自分自身が学習したことをまとめ、アウトプットすることを目的として書いていますので、間違いがある可能性がありますのでご注意ください。

今回は、Ruby on Railsの既存のアプリにdeviseを導入する課題に取り組みました。

このGemを導入することで使えるヘルパーメソッドの使い方を自己学習のためにまとめておきたいと思います。

deviseとは?

deviseは、Ruby on Railsフレームワークで利用される、認証とユーザー管理のための便利なGem(ライブラリ)になります。

Webアプリケーションを開発する際に、ユーザーの登録・ログイン・ログアウトなどの認証関連の機能を迅速に導入できるよう設計されています。

主な機能としては

  • ログイン認証機能: Deviseは、ユーザーがアプリケーションに登録(サインアップ)し、ログイン、ログアウトするための機能を提供します。これにより、ユーザーアカウントのセキュリティを確保しつつ、簡単に認証機能を実装できます。

  • 柔軟な設定: Deviseは多くの設定オプションを提供しており、アプリケーションのニーズに合わせてカスタマイズできます。例えば、プロフィール画像、自己紹介文などを簡単に実装できます。

  • セキュリティ機能: Deviseは、セキュリティに関する機能も提供しています。パスワードのハッシュ化、セッション管理、トークンベースの認証など、セキュアな認証の実装を支援します。

  • メールの送信:ユーザー登録やパスワードリセットなどの際に、自動的にメールを送信する機能も含まれています。これにより、ユーザーに対してアクションを促すメッセージを送ることができます。

以上のように、Deviseを導入することで、アプリケーション内でのユーザー認証の実装が大幅に簡素化されます。

使用する場合には、セキュリティに関わる部分なので、公式ドキュメントやセキュリティガイドも確認することをおすすめします。

使えるようになるヘルパーメソッド

ヘルパーメソッド 用途
authenticate_user! コントローラーに設定して、ログイン済ユーザーのみにアクセスを許可する
user_signed_in? ユーザーがサインイン済かどうかを判定する
current_user サインインしているユーザーを取得する
user_session ユーザーのセッション情報にアクセスする

authenticate_user!

authenticate_user!メソッドはコントローラーアクション内で使用され、ユーザーがログインしていない状態でアクセスしようとした場合、自動的にログインページにリダイレクトされるようになります。

これにより、特定のアクションやページをログインしたユーザーのみがアクセスできるように制限することができます。

controllerでbefore_actionとして設定して使用します。

class UsersController < ApplicationController
  before_action :authenticate_user!, only: [:index, :show, :destroy]
  
  def index
    # ...
  end

  def show
    # ...
  end

  def destroy
    # ...
  end
end

記事の一覧、詳細を確認し、削除することができるのはログインユーザーのみとなります。

しかし、私が勘違いして間違えたのがdestroy(削除)の取り扱いです。authenticate_user!メソッドではあくまでログインユーザー`であることを確認するのみで、記事の投稿者本人でなくともログインユーザーであれば削除はできてしまうので注意が必要です。

削除を投稿者本人に限定したい場合は、この後説明するヘルパーメソッドであり、非常に便利なcurrent_userメソッドを使いましょう。

user_signed_in?

user_signed_in? メソッドはビューやコントローラー内で使用され、ユーザーがログインしている場合に true を返し、ログインしていない場合に false を返します。

このメソッドを使用することで、ログイン状態に応じて表示内容などを調整することができます。

例えばviewで使う場合は以下のようにします。

<% if user_signed_in? %>
  # ユーザーがサインインしている場合に実行する処理
<% end %>

current_user

current_user メソッドは、現在ログインしているユーザーの情報を取得するために使用します。

current_user メソッドはコントローラーやビュー内で使用され、ログインしている場合にログインしているユーザーの情報(Userモデルのインスタンス)を返し、ログインしていない場合には nil を返してくれます。

非常に便利なメソッドで1番多用するヘルパーメソッドだと思います。

例えば、コメントの削除・編集・更新などはコメントした本人だけができるように実装することが大半だと思いますが、こういった際にはで本人であることを担保したいのでcurrent_userを使うことになります。

日報の削除・更新・編集ができるのが本人だけにしたい場合

class ReportsController < ApplicationController
  before_action :correct_user, only: %i[destroy edit update]

# 中略

  private

  def correct_user
    @report = current_user.reports.find_by(id: params[:id])
  end
end

user_session

user_sessionメソッドは、セッションに関連する情報を取得または操作するために使用されます。

コントローラーやビュー内で使用され、ユーザーに関連するセッション情報を取得したり、操作したりする際に利用されます。

deviseを実装してみての感想

deviseを使うことで煩雑な作業をすることなく認証機能を短時間で実装できたので、非常に便利なgemだと感じました。 メールアドレスやパスワードに実装だけでなく、自己紹介、住所、名前などカスタマイズできるなど、拡張性が高いのも魅力に感じました。

さらにパスワードを忘れた際は、メールを飛ばして再設定できる機能までdeviseを導入することで簡単に実装することができました。