2
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

ロジックはviewに書かないで切り出してHelperメソッドで運用する

Last updated at Posted at 2024-11-14

この記事はプログラミング学習者がアプリ開発中に躓いた内容を備忘録として記事におこしたものです。内容に不備などあればご指摘頂けると助かります。

記事投稿の背景

Xのクローンサイトを制作している時に色々と躓いたので、知識整理も兼ねて記事として残すことにしました。

実際のコード - 変更前

私が制作していたアプリの場合、あるロジックは1箇所だけでなく、合計で12箇所ありました。
ロジックを切り出す前は変更の度に12箇所全てを修正しており、とても手間が
掛かり、時には変更漏れがあったりしました。

list.html.slim
- if current_user.present? # ツイートのユーザーとログインユーザーが共に所属するチャットルームが存在するかをデータベースから検索する
    - room_with_tweet_user = Room.joins(:entries).where(entries: { user_id: [current_user.id, bookmark.tweet.user.id]}).group('rooms.id').having('COUNT(entries.id) = 2').first

Helperとは?

動作を処理する場合にメソッド化して使えるようにRuby on Railsへ組み込まれた機能です。
Helperは既にRailsの中に沢山登録されており、具体的にはlink_to, form_with, image_tagなどが頻繁に使われるHelperとして挙げられます。
また、予め登録されているHelperの他に自分で作成して呼び出すことも可能です。

実際のコード - 変更後

Viewファイルから切り出したロジックをHelperでメソッド化
内容を変更したい場合はこの1箇所を変更するだけで対応できる

rooms_helper.rb
def check_rooms(tweet_user)
    Room.joins(:entries).where(entries: { user_id: [current_user.id,
                                                    tweet_user.id] }).group('rooms.id').having('COUNT(entries.id) = 2').first
end

ロジック部分をメソッドとして切り出しました。
これによりviewファイルは見易くなりました。
ロジックを切り出してからは1箇所だけの修正で済ませられるようになりました。メンテナンス性が格段に上がっています。

list.html.slim
- if current_user.present? # ツイートのユーザーとログインユーザーが共に所属するチャットルームが存在するかをデータベースから検索する
    - room_with_tweet_user = check_rooms(bookmark.tweet.user)

まとめ

viewにロジックを書かないでHelperメソッドに切り出すことで二つのメリットを確認できました。

1, viewファイルが整理されて短くなることで可読性が上がる

2, 変更する際のメンテナンス性が上がる(変更する場所はHelperメソッド内の1箇所のみ)

逆にロジックをviewに書くことで二つのデメリットが出現します。

1, コード全体が冗長になり、可読性が落ちる

2, 変更する際のメンテナンス性が落ちる(変更する場所はview内の同じロジック全て)
数が増えるほど大変で変更漏れも起こる

参考にした記事

Rails Viewに〇〇ロジックは書かない (※後日追記)
【Rails入門】helperの使い方まとめ

2
3
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
2
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?