0
0

Railsでコードを書く時に気をつけること

Last updated at Posted at 2024-05-28

前提

  • 既存のコードに合わせなくて良い、良い状態を考えて作ること

簡単なチェック

  • シリアライザは単数系で書くこと
  • 各ファイル、クラス名の単数複数が正しいこと
  • 各種URLが本番用のURLになっていること -dev などがつかないURL になってること。

一般的なチェック

  • メソッドに ! をつける場所は適切ですか
  • Aws::SQS::Client のテストは instance double を使わずに、AWS SDK for Ruby を利用
  • raise した エラーは 明示的に capture せずとも Sentry が自動で拾ってる可能性を考慮

rspec

subject の命名

# context など rspec 命名と被るものを利用している部分があるが避けたい
subject(:context) { described_class.call }
# 一般的には result や outcome などが推奨される。
subject(:result) { described_class.call }

時間停止系処理

# travel_back を忘れがちなのでブロックで書く
travel_to Time.zone.local(2024, 5, 25, 10, 0, 0)

# 固定した日付は 
around { |e| freeze_time { e.run } }

変更がない時の matcher

# before
result
expect { result }.not_to change { member_last_access.reload.last_access_at }

# expectにブロックを渡して、not_to changeのテストにする
expect(member_last_access.reload.last_access_at).to eq(2.days.ago)

変更、更新系のテストの際は change mather を利用したい。

インタラクタ

# interactor のテストは result.success? であることも確認したい
expect(result).to be_success

Serializable Resources

ActiveModelSerializers::SerializableResource.new(
  user,
  serializer: UserSerializer,
  adapter: :attributes,
  hoge: 'test'
).serializable_hash

以下の様に参照できるので、シリアライザで複数のデータソースから作ったほうがSQLがシンプルになる場合は活用していきたい。

SQLを無理に分割しようとするよりも2つ渡して処理したほうがいい時もある。

class UserSerializer < ApplicationSerializer
  attribute :test_val do
    instance_options[:hoge]
  end
end

Serializable Resources new で実行しなくても渡せる

render(
    json: result.members,
    each_serializer: MemberSerializer,
    sorted_messages: result.sorted_messages,
)

イベント計測

Chrome拡張機能で検査可能
pushLaEventを利用すること

0
0
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
0
0