LoginSignup
2
1

More than 3 years have passed since last update.

Railsでの開発ルールを考えてみた

Last updated at Posted at 2020-01-06

推奨リスト

テーブルのカラムにコメント

  • 何のためのカラムなのかを明確にするため
  • Rails6系から使用可能
  • 設定値を管理する際にあると便利

ex) db/migrate/YYYYMMDD_create_members.rb

class CreateMembers < ActiveRecord::Migration[6.0]
  def change
    create_table :members do |t|
      t.string :name, null: false, default: '', comment: '名前'
      t.string :email, null: false, default: '', comment: 'メールアドレス'
    end
  end
end

メソッドにコメントアウト

  • メンテナンス性の向上のため

ex)

# サイトのURLを返却する
def site_url
end

なるべくRailsの機能 (scope, active_support, association) を使用

  • テストコードを最小限にするため

Rspec書く (単体テスト)

  • gemやRubyのアップデートを定期的に行うため
  • 不具合を極限まで抑えるため

定期的にRubyとRailsアップデート

  • 最新バージョンに追従するため
  • ライブラリにセキュリティホールが存在したり、サポート終了した際にすぐにアップデートできるようにするため

メソッド名や変数名は長くなっても意味が通るように

  • 可読性向上のため

NGリスト

コールバック

  • メンテナンス性が著しく落ちるため

STI

  • 異なる振る舞いをするオブジェクトを同一テーブルに保持するケースが多いため
  • STI化しても結局typeカラムの値で条件分岐する記述が出てくるため

ex)

return if type == "Server::Web"

エラーメッセージの二元管理 (ex: モデルレイヤー + validationEngine)

  • 受け入れテストや単体テストがしづらくなるため
  • jQuery等に依存するため
  • モデルレイヤーに記述せず、validationEngineのみバリデーションを定義すると、検証ツール等でvalidationEngineの記述を外して容易に500エラーを起こせてしまうため

SQL直書き

  • Railsの良さが出なくなるため
  • 他の人が開発するときに効率が落ちるため

文字列足し算

  • nilになった瞬間に500エラーになるため
  • 式展開を利用する

ex)

# NG
# `host` がnilの場合、500エラーが発生する
def site_url
  'https://' + host
end

# OK
def site_url
 "https://#{host}"
end

Ruby Syntax

  • 可読性向上のため

unless

  • if !(condition) を代わりに使用する

ex)

# NG
unless user_signed_in?

# OK
if !user_signed_in?
end

ex)

# NG
def hoge
  return if (condition1)
  return if (condition2)
  return unless (condition3)
end

# OK
def hoge
  return if (condition1)
  return if (condition2)
  return if !(condition3)
end

nil? または blank?

  • present? を代わりに使用する
  • カラム名のアクセサであれば ActiveRecordの(column_name)? メソッドを使用する

ex)

# NG
@user.name.nil?

# OK
@user.name?
# NG
@shop.company.nil?
@shop.company.blank?

# OK
@shop.company.present?

none?

  • any? を代わりに使用する
# NG
@shop.web_servers.none?

# OK
!@shop.web_servers.any?
2
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
2
1