とあるプロジェクトでコードを書き始めた僕がつまづいた石たち

1e68801494505bd0e0ce67e2e1398af3?s=47 zaru
April 05, 2019

 とあるプロジェクトでコードを書き始めた僕がつまづいた石たち

1e68801494505bd0e0ce67e2e1398af3?s=128

zaru

April 05, 2019
Tweet

Transcript

  1. とあるプロジェクトで コードを書き始めた僕が つまづいた石たち 2019.04.05 TGIF @zaru

  2. site = Site.find site_id

  3. いたるところにある Site.find id | Site.find name … site.name というのは c1234567890

    のような識別子
  4. まさかの find を override していた def find id any_of({_id: id},

    {name: id}).first end id もしくは name どちらでもヒットする 気持ちはわかるけど検索キーはどちらかに統一したほうが良い なぜならアプリケーション全体で id と name どちらで持ち回るのか が曖昧になる。ここで透過的に処理するのではなく、もう少し手前 で透過的な処理をしたほうが良い 例外出すと信じてたのに…
  5. site = Site.find site_id

  6. 特定ドキュメントの場合、とにかく遅い 大量にある embeds_many が原因 ferret One サービスサイトだと 5MB 以上ある fetch

    するのに 200-300msec くらいかかってた Site.without(:hoge) や Site.only(:piyo) でスリムに 20-30msec くらいに改善 embeds_many -> has_many にしたい
  7. Site.without(:hoge).find

  8. mongoid の仕様で一部のフィールドのみを取得した場合は save でき ない set で直接書き換えるしかない… site = Site.without(:hoge).first

    site.title = 'update' site.save # NG site.set(title: 'update') # OK これは今後しんどくなりそうな雰囲気を感じている ActiveRecord ってどうだったっけ… ?
  9. response = RestClient.get(query_images)

  10. これ自体はなんてことはない普通のコード rest-client という gem を使っている ただし Gem le には rest-client

    は存在しない mailjet というメール配信の gem が rest-client に依存 それを利用している… しかし mailjet はもう使っていないので gem を削除すると死ぬ そして faraday という別の HTTP クライアント gem がありバッティ ングしている
  11. resources :hoge

  12. resources :hoge ← 全部 action あるのかな? 実は使っているのは update だけでした only

    except を使った方が良い
  13. # TODO: これは使われているのか… ?

  14. テストコードやリファクタをする際に、メソッドが使われているの か使われていないのかが、すぐ判断できなかった そのメソッドに依存したコードが山のようにあるし URL も露出し ている lograge -> redash があったので実際に

    call されているかどうかで判 断 使わなくなったコードはすぐに削除しましょう
  15. TemporaryPage.find(1).site_id

  16. Site has_many Page TemporaryPage extends Page temporary_page.site #=> <Site ....>

    temporary_page.site_id #=> nil リレーションしているのだからあるはずでは… ? def site で定義されていた… def site self.public_page.try(:site) end
  17. どんどん良くしていくぞ! という気持ち