Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Speaker Deck
PRO
Sign in
Sign up for free
とあるプロジェクトでコードを書き始めた僕がつまづいた石たち
zaru
April 05, 2019
Technology
0
72
とあるプロジェクトでコードを書き始めた僕がつまづいた石たち
zaru
April 05, 2019
Tweet
Share
More Decks by zaru
See All by zaru
Hotwire を 本番環境で使ってみた感想
zaru_sakuraba
7
4.5k
失敗から学ぶ個人開発
zaru_sakuraba
18
4.9k
伝わらない Issue の書き方
zaru_sakuraba
0
260
Ruby との対話 : pry を使い pry をデバッグし pry のバグを直す話
zaru_sakuraba
3
330
もう「クレデンシャルください」なんて言わせない
zaru_sakuraba
4
900
個人プロジェクト現状報告会
zaru_sakuraba
0
51
僕と契約して、メソッドになってよ!
zaru_sakuraba
0
86
Other Decks in Technology
See All in Technology
CADDi HCMC Technology Center
caddi_eng
0
250
エンタープライズにおけるSRE立ち上げとNew Relic選定に至った背景とは / SRE Startup and New Relic in the Enterprise
tomoyakitaura
2
140
[SRE NEXT 2022]ヤプリのSREにおけるセキュリティ強化の取り組みを公開する
mmochi23
1
320
Stripe Search APIを利用した、LINEとStripeの顧客情報連携/line-dc-202205
stripehideokamoto
0
120
AWS CLI入門_20220513
suzakiyoshito
0
3.7k
プロダクション環境の信頼性を損ねず観測する技術
egmc
4
360
Deeplearning from almost scratch
hn410
0
580
ISUCON で使えるツールを作った
shotakitazawa
0
350
プロダクトグロースと技術のベースアップを両立させるRettyのアプリ開発スタイル / Achieve Product Growth and Tech Update
imaizume
1
290
Babylon.js で簡単 WebXR
yuhara0928
2
1k
JAWS-UG 朝会 #33 登壇資料
takakuni
0
380
#BabylonJS5 の祭ツイートまとめ Let's take a look at what people create with the latest #BabylonJS5
chomado
0
780
Featured
See All Featured
Designing on Purpose - Digital PM Summit 2013
jponch
106
5.6k
Designing for Performance
lara
596
63k
Building Applications with DynamoDB
mza
83
4.6k
What's new in Ruby 2.0
geeforr
336
30k
The Language of Interfaces
destraynor
148
20k
Ruby is Unlike a Banana
tanoku
91
9.2k
Web Components: a chance to create the future
zenorocha
303
40k
Easily Structure & Communicate Ideas using Wireframe
afnizarnur
181
15k
The Illustrated Children's Guide to Kubernetes
chrisshort
14
34k
Art, The Web, and Tiny UX
lynnandtonic
280
17k
Clear Off the Table
cherdarchuk
79
280k
BBQ
matthewcrist
74
7.9k
Transcript
とあるプロジェクトで コードを書き始めた僕が つまづいた石たち 2019.04.05 TGIF @zaru
site = Site.find site_id
いたるところにある Site.find id | Site.find name … site.name というのは c1234567890
のような識別子
まさかの find を override していた def find id any_of({_id: id},
{name: id}).first end id もしくは name どちらでもヒットする 気持ちはわかるけど検索キーはどちらかに統一したほうが良い なぜならアプリケーション全体で id と name どちらで持ち回るのか が曖昧になる。ここで透過的に処理するのではなく、もう少し手前 で透過的な処理をしたほうが良い 例外出すと信じてたのに…
site = Site.find site_id
特定ドキュメントの場合、とにかく遅い 大量にある embeds_many が原因 ferret One サービスサイトだと 5MB 以上ある fetch
するのに 200-300msec くらいかかってた Site.without(:hoge) や Site.only(:piyo) でスリムに 20-30msec くらいに改善 embeds_many -> has_many にしたい
Site.without(:hoge).find
mongoid の仕様で一部のフィールドのみを取得した場合は save でき ない set で直接書き換えるしかない… site = Site.without(:hoge).first
site.title = 'update' site.save # NG site.set(title: 'update') # OK これは今後しんどくなりそうな雰囲気を感じている ActiveRecord ってどうだったっけ… ?
response = RestClient.get(query_images)
これ自体はなんてことはない普通のコード rest-client という gem を使っている ただし Gem le には rest-client
は存在しない mailjet というメール配信の gem が rest-client に依存 それを利用している… しかし mailjet はもう使っていないので gem を削除すると死ぬ そして faraday という別の HTTP クライアント gem がありバッティ ングしている
resources :hoge
resources :hoge ← 全部 action あるのかな? 実は使っているのは update だけでした only
except を使った方が良い
# TODO: これは使われているのか… ?
テストコードやリファクタをする際に、メソッドが使われているの か使われていないのかが、すぐ判断できなかった そのメソッドに依存したコードが山のようにあるし URL も露出し ている lograge -> redash があったので実際に
call されているかどうかで判 断 使わなくなったコードはすぐに削除しましょう
TemporaryPage.find(1).site_id
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
どんどん良くしていくぞ! という気持ち