1
1

[ Rails ] アプリ内のコメント通知をLINEで行う方法

Posted at

はじめに

こんにちは!
個人開発アプリの通知機能のまとめ記事です。
全3回構成となっており、今回は最終回として、アプリ内のコメント通知をLINEで行う方法について説明します。

個人開発のまとめ記事はこちらからご覧ください。

前回記事たちはこちらからご覧ください。

開発環境

・Ruby on Rails 7.1
・Ruby 3.2.3

完成物

ユーザーの投稿に新規コメントが作成されると、LINEに通知が送られます。
通知にはリダイレクトURLも含まれており、簡単にアプリに戻ることができます。

image.png

手順

1. post_id に line_user_id を紐付ける
2. コメントモデルに通知設定をする

1. post_id に line_user_id を紐付ける

まずは post_id に line_user_id を紐付けます。
Postモデルに以下のメソッドを追加します。
post.rb
class Post < ApplicationRecord
  has_many :comments, dependent: :destroy
  
  def line_user_id
    user.line_user_id
  end
end

これにより、line_user_id メソッドを通じて、アプリのユーザーIDとLINEアカウントIDを投稿に紐付けることができます。
このメソッドを、後ほどコメントモデルから呼び出します。

2. コメントモデルに通知設定

次に、コメントが作成された際にLINE通知を送る機能を実装します。
comment.rb
class Comment < ApplicationRecord
  validates :body, presence: true, length: { maximum: 255 }
  belongs_to :user
  belongs_to :post
  after_create :send_line_notification

  private

  def send_line_notification
    # postの所有者のline_user_idを取得
    line_user_id = self.post.user.line_user_id

    # line_user_idが存在する場合のみ、LINE通知を送信
    if line_user_id.present? && line_user_id.is_a?(String)
      post_url = "https://kousiennow.onrender.com/post/#{self.post.id}"
      message = "#{self.post.user.user_name}さん、あなたの投稿に#{self.user.user_name}さんからコメントがあります。\n\"#{self.body}\" \n#{post_url}"
      Notification.create_and_send_line_notification(line_user_id, message)
    end
  end
end

after_create により、コメントが作成されると自動的に send_line_notification メソッドが呼び出され、LINE通知が送信されます。
通知は、LINEアカウントと連携している場合のみ送信されるため、連携していない場合でもエラーは発生しません。
LINEメッセージを送る処理は、notification.rb にすでに記述済みです。
そのため、この部分では、誰にどのような内容のメッセージを送るかを定義するだけで済みます。

これで、投稿に新規コメントがついた際にLINE通知が送信されるようになりました!

最後に

最後までお読みいただきありがとうございます!
これで公式LINE追加からコメント通知を送るまでの流れをまとめることができました。
備忘録ですが、参考になれば幸いです。
初学者ゆえ、誤解や説明不足があるかもしれませんが、ご指摘いただければ幸いです。
1
1
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
1
1