Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
ペンディングプロジェクトでの学び / What I learned from the Pend...
Search
Kotaro Nishioka
January 24, 2021
Programming
0
210
ペンディングプロジェクトでの学び / What I learned from the Pending Project
社内で発表した資料から一部Confidentialな情報を削除したものです。
Kotaro Nishioka
January 24, 2021
Tweet
Share
More Decks by Kotaro Nishioka
See All by Kotaro Nishioka
Active Admin と JS と 私 / Active Admin and JS and me
kotaro0522
0
290
Other Decks in Programming
See All in Programming
ベクトル検索のフィルタを用いた機械学習モデルとの統合 / python-meetup-fukuoka-06-vector-attr
monochromegane
2
530
最初からAWS CDKで技術検証してもいいんじゃない?
akihisaikeda
4
170
条件判定に名前、つけてますか? #phperkaigi #c
77web
2
800
LM Linkで(非力な!)ノートPCでローカルLLM
seosoft
0
210
テレメトリーシグナルが導くパフォーマンス最適化 / Performance Optimization Driven by Telemetry Signals
seike460
PRO
2
160
20260313 - Grafana & Friends Taipei #1 - Kubernetes v1.36 的開發雜記:那些困在 Alpha 加護病房太久的 Metrics
tico88612
0
230
ロボットのための工場に灯りは要らない
watany
12
3.2k
Geminiをパートナーに神社DXシステムを個人開発した話(いなめぐDX 開発振り返り)
fujiba
0
100
KagglerがMixSeekを触ってみた
morim
0
300
「接続」—パフォーマンスチューニングの最後の一手 〜点と点を結ぶ、その一瞬のために〜
kentaroutakeda
3
1.9k
[PHPerKaigi 2026]PHPerKaigi2025の企画CodeGolfが最高すぎて社内で内製して半年運営して得た内製と運営の知見
ikezoemakoto
0
290
How to stabilize UI tests using XCTest
akkeylab
0
140
Featured
See All Featured
BBQ
matthewcrist
89
10k
16th Malabo Montpellier Forum Presentation
akademiya2063
PRO
0
79
Visualization
eitanlees
150
17k
Building Better People: How to give real-time feedback that sticks.
wjessup
370
20k
It's Worth the Effort
3n
188
29k
Designing for humans not robots
tammielis
254
26k
CoffeeScript is Beautiful & I Never Want to Write Plain JavaScript Again
sstephenson
162
16k
The Straight Up "How To Draw Better" Workshop
denniskardys
239
140k
[RailsConf 2023] Rails as a piece of cake
palkan
59
6.4k
Google's AI Overviews - The New Search
badams
0
950
Visualizing Your Data: Incorporating Mongo into Loggly Infrastructure
mongodb
49
9.9k
Applied NLP in the Age of Generative AI
inesmontani
PRO
4
2.2k
Transcript
ペンディングプロジェクトPh1での学び Nov 26th, 2020 Nishioka Kotaro CXI team Rakuten, Inc.
2 ⽬次 - 概要 - 設計 - 開発 - テスト
- QA - 監査 - リリース・監視 - Feature Toggleの使い⽅ - 今後の展望
3 概要 Confidential
4 設計 仕様調査 商品が表⽰される箇所全てを洗い出す必要がある。 RubyMineのパス内検索を活⽤。(grepとかでも良いと思う) Itemモデルのそれっぽいメソッドが呼ばれている箇所をかたっぱしから洗い出す。 さらにそのそれっぽいメソッドの中で呼ばれてるそれっぽいメソッドを洗い出す…という具合に抜け漏れない ように調べ上げる。 タイムライン 特定商品を除外するという既存の実装を参考に実装。
→問題発⽣…特定商品でタイムラインが埋め尽くされる場合商品が⼀切返らなくなる問題が起きる。 既存の実装に倣うのが必ずしも正解ではない。 むしろ古いコードは現状動いていたとしても何かしら問題を抱えてると疑ってかかるくらいの⽅が良さそう。
5 開発 ブランチ Good • 変更量が膨⼤になることが予想されたため、レビューのことを考え、リリースブランチを作り、そこに対し て機能ごとにPRを作成した。 Bad • ⼀通り開発が終わった後にFTを⼊れることになったため、既に各機能がマージされたリリースブランチから
ブランチを切ってまとめてFTを導⼊しPRを作成。FTの導⼊のみなのでレビューも⼤変ではないだろうと思 いきや、レビュワーとしては機能全体を把握する必要が出てくるのでレビューコストがヤバいことになる。 →結局チーム内レビューで対応。FTを導⼊するだけでもブランチは機能ごとに分けた⽅が良い。できればFT を導⼊するかどうかは⾒積もりの段階で話し合っておく⽅がベター。(スケジュール的にも) • リリースブランチに対して直接コミットしない。→どのコミットがapproveされてるのか分からなくなり、 リリース前⽇に⼿作業でコミットを集計し直す⽻⽬に…。 パフォーマンス N+1問題を防ぐ→Bulletを活⽤しよう。(開発機)
6 テスト 複数のFTのkey(購⼊者側と出品者側)の組み合わせによってテストケースが複雑化。 Mindmapを使って抜け漏れないようテストケースを網羅して実施。 →しかし後のQAで指摘が…境界値に着⽬したテストをすべき • 最⼤ケース • コーナーケース
7 QA 機能追加・修正の影響範囲が多岐にわたっているため、既存の問題・仕様で多数のチケットが切られる。 • Confidential • STGのGSPはかなり遅延する。下⼿すると30分くらい。 切り分けをどうするか。 • コードを読む。→仕様理解。
• ログを読む。→キャッシュ絡みで挙動が変わる • 別環境と⽐較して差分があるか(STGとQA01)
8 監査 エンドポイントの⼀覧とパラメータを提出する必要がある。 Githubのpostmanリポジトリにまとまっている。
9 リリース・監視 FT⼊れていても100%安全ではない。 FTを上げるときよりもむしろリリース直後に注意すべき。 →FTを上げるときの変化に注⽬していてリリース前との変化を注視してなかった New RelicやDatadogを使ってレスポンスタイムとエラー数をチェック。 →レスポンスが遅すぎる場合Webサーバーでエラーになってレスポンスタイムに影響が⾒られないので、 Datadogでエラー数を監視することが⼤事。
10 Feature Toggleの使い⽅ Feature Toggleに渡す値としてuserのインスタンスが必要。 →安易にUser.findするとパフォーマンスに影響が出る。 呼び出し回数が多そうな箇所(bulk~みたいなバッチは危ない)はOpenStructを使うことでDBへの負荷を減らせ る。(Email指定できなくなるので注意。) FTのかかる範囲を最⼩限にする。 if
FeatureToggle hoge && fuga && piyo end ではなく hoge && fuga && piyo def piyo if FeatureToggle … end end
11 今後の展望 リリースサイクルを短くしたい QA中に別プロジェクトの変更で、とあるモデルが削除され、そのモデルのメソッドを使っていたためエラーが 発⽣することがあった。 開発が⻑期化すると他プロジェクトの影響を受ける可能性が⾼くなる。 競合をなくすためには、新規テーブル・モデルの作成など既存の機能から切り離されている部分や、FTを⼊れ るなどして本番で動かない状態のコードはこまめにリリースすると良さそう。 理想はGoogleなどでやられているトランクベース開発︖(各⾃が変更を毎⽇masterブランチに反映させる)
None