Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
_Ruby失敗談_Zeals編.pdf
Search
kodera123
November 28, 2019
Technology
110
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
_Ruby失敗談_Zeals編.pdf
Zealsで実際に起きた事件です
kodera123
November 28, 2019
Other Decks in Technology
See All in Technology
10年後、Engineering 行為を剥奪されるとして、わたしたちは、どう、何を創ればいいだろうか。 / If Engineering Is Taken Away in 10 Years, How and What Should We Create?
bitkey
PRO
1
190
大型犬好きによるPugの紹介
yamanoku
1
160
Claude の新機能を、 出た日に触って社内に届けるまで
rfdnxbro
1
170
実践!Cloud Run ハンズオン!! / Cloud Run handson
y0hgi
2
280
Active Record Connection Adaptersにおける長年の課題に再び取り組む
yahonda
0
150
Railsで挑む大量データ永続化 〜600億件を永続化するための設計とボトルネックとの戦い〜
occhi
1
580
「Docker Desktop不要の時代」は 来たのか?
ueponx
0
770
夫婦で子育てするための育児標準化
codmoninc
PRO
0
330
Metadata - Section 1: HTML Basics
mohab1
0
120
WasmをRustにする
sansantech
PRO
0
250
Webの常識が通じないHTMLメールのダークモード
teamlab
PRO
0
120
M5Stackで作る BLEマウス GPSログの世界
tomokusaba
0
420
Featured
See All Featured
Thoughts on Productivity
jonyablonski
76
5.4k
Lightning Talk: Beautiful Slides for Beginners
inesmontani
PRO
2
730
Producing Creativity
orderedlist
PRO
348
41k
BBQ
matthewcrist
90
10k
Tips & Tricks on How to Get Your First Job In Tech
honzajavorek
1
800
How to Grow Your eCommerce with AI & Automation
katarinadahlin
PRO
2
330
Building AI with AI
inesmontani
PRO
1
1.3k
How GitHub (no longer) Works
holman
316
150k
Java REST API Framework Comparison - PWX 2021
mraible
34
9.8k
DevOps and Value Stream Thinking: Enabling flow, efficiency and business value
helenjbeal
2
410
Agile Actions for Facilitating Distributed Teams - ADO2019
mkilby
0
310
How Fast Is Fast Enough? [PerfNow 2025]
tammyeverts
3
940
Transcript
Zealsで実際に起きた事件 【Rails失敗談】 テクノロジー開発部 小寺 京佑
• 自己紹介 • 実際あった失敗談 • まとめ Agenda
自己紹介
ZEALS Engineer Rubyエンジニア 小寺 京佑 :kodera123 :kody015 :nil :kodera123 -
DMM Infratop (旧Infratop) - Zeals - Ruby - JS(React, Vue)
rubocop disable減らない問題
rubocop disable の箇所が増えるばかり - rubocop.yml はほぼデフォルト - 急ぎながらもコードベースを 綺麗に保ちたかった -
「後でやります!」が免罪符 - スケジュール的に、直すリソー スを考慮してなかった
None
対応策 - 運用ルールを決め、チームで共通認識をとった
放置 TODO/FIXME 問題
大量のTODO/FIXME - 先ほどと同じだが回収されない - もう辞めてしまった人が残したものがある - 2年前に書かれた化石もある
大量のTODO/FIXME
対応策 - 優先度が上がらず未対応... - rubocopの時と同様運用ルールを決め、チームで共 通認識をとりたい
DRYすぎたspec 問題
DRY にしすぎて可読性が下がってしまった https://qiita.com/jnchito/items/eb3cfa9f7db752dcb796
- テストデータで何が作られているのかが理解に 時間かかる - expect で何を期待してるのかが予測しにくく なる
- 対象のコードの仕様がひと目でわかること (仕様書になっていること) - 確実にバグを検出できること
ランダム落ちspec
rspec がランダムで落ちてしまう - 単純にテストデータを作り間違えていた - CI落ちるので急いでる時にめんどい - gem faker を使用していて安心していた
- Faker::Pokemon.name - ポケモン 53種類しかいない - 2%くらいの確率で落ちる
対策 - factory の seaquense 使って連番するなりユニー ク制約があるテストデータを作る時には気をつけ る
テストカバレッジの罠
94 ~ 95%までカバレッジあげたが 普通にリグレッション発生する - コントローラーのテストばっかり書いていた - response status -
render template - くらいしかテストできない - 異常系のテストをそんなに書いてなかった
対策 - 費用対効果の高いテストを書くことを気をつける - ユニットテストを書くように進行中 - テストデータを作りやすい - テストケースも想定しやすい -
数字に騙されない
いたずらに増えるサービスクラス
とりあえず複雑な処理を サービスクラスに押し込んでしまった
対策 - ドメイン駆動設計を参考にリファクタリングの方 針を立て実行中 ※あくまで草案なので変更の可能性はあります
rollbar鳴りすぎて狼少年化
150 ~ 250 件くらい溜まってしまった - 誰も見なくなる - 重大なインシデント埋もれる 【原因】 -
例外設計がずさんだった - validation error も rollbar 鳴らしてた - js 側の error とか
対応策 - 例外設計ちゃんとやりましょう - 何でもかんでも rescue しない - システムのエラーなのかユーザーのエラーなのか適 切に伝えてあげる
- https://qiita.com/jnchito/items/3ef95ea144ed 15df3637
query クラス(じゃなくても) に直書きSQL
メンテに恐怖感覚える - 100行くらい - group concat とか色々使われ てて読むの億劫 -> 先ほどのリファクタリング計
画に合わせて直していく予定
rake タスク でメモリ食いつぶした
each で バッチ実行時にメモリ食いつぶした - 以下の記事の通りARのアンチパターンハマってた https://blog.toshimaru.net/rdm2018-active-re cord-anti-patterns/ - 50万レコードの処理にeachを使ってメモリ食いつ ぶし
対策 - each -> find_each を使うようにする - update -> update_all
を使うようにする - validation skip するので気をつける
まとめ
まとめ • 後でやらない or スケジュール決める • 失敗した後の対策が大事 • 外部の方にレビューしてもらうのも大事
LET'S START NEXT INDUSTRIAL REVOLUTION WITH OUR FLYING SHUTTLE
Thank you!!