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
10歳の minne から、これから長く続くプロダクトを作るすべての人へ
Search
tsumichan
July 27, 2022
Programming
4.9k
9
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
10歳の minne から、これから長く続くプロダクトを作るすべての人へ
【iCARE Dev Meetup #34】10年続くRailsアプリ開発のために大事なこと
での発表資料です。
tsumichan
July 27, 2022
More Decks by tsumichan
See All by tsumichan
巻き込み力で加速する!DevRelフレンズとアンバサダーによるコミュニティ主導の成長戦略 / DevRel Friends & Ambassador Community-Led Growth
tsumichan
2
550
キャリアを2つの軸で考える / Thinking about careers on two axes
tsumichan
0
98
新卒エンジニア研修での学び
tsumichan
0
16k
Other Decks in Programming
See All in Programming
TSX の <Hoge<Fuga>> という構文に驚いた話 / tsx-type-argument-syntax
kanaru0928
0
240
為什麼你並不需要ViewModel / No, you don't need a ViewModel
lovee
1
510
VibeCodingからAgenticWorkflowへ
starfish719
0
750
FDEが実現するAI駆動経営の現在地
gonta
2
290
改善しないと、タスクが回らない。 “てんこ盛りポジション” を引き継いだ情シスの、入社3ヶ月の業務改善録
krm963
0
280
Cloudflare is Agents
chimame
0
180
Claude Code全社展開のためにやったことn選~プラグイン302個・コミッター271人を支えるために~
kenchan
5
1.6k
My Marp Sample
sinoue0108
0
110
2年かけて Deno に DOMMatrix を実装した話 / How I implemented DOMMatrix in Deno over two years
petamoriken
0
220
Android CLI
fornewid
0
230
Detecting Compromised CI with eBPF and Cilium Tetragon
lizrice
0
230
まだ間に合う!今年の夏こそSchemeのマクロ展開器を完全理解!
omasanori
0
340
Featured
See All Featured
Designing Powerful Visuals for Engaging Learning
tmiket
1
500
How STYLIGHT went responsive
nonsquared
100
6.2k
Practical Tips for Bootstrapping Information Extraction Pipelines
honnibal
25
2k
The Cult of Friendly URLs
andyhume
79
7k
Faster Mobile Websites
deanohume
310
32k
The Psychology of Web Performance [Beyond Tellerrand 2023]
tammyeverts
49
3.5k
jQuery: Nuts, Bolts and Bling
dougneiner
66
8.5k
Large-scale JavaScript Application Architecture
addyosmani
515
110k
Marketing to machines
jonoalderson
1
5.7k
Distributed Sagas: A Protocol for Coordinating Microservices
caitiem20
333
23k
Building a A Zero-Code AI SEO Workflow
portentint
PRO
0
680
Side Projects
sachag
455
43k
Transcript
1 10歳のminneから、これから長く続く プロダクトを作るすべての人へ tsumichan(市岡 なつみ) / GMO PEPABO inc. 2022.07.26
iCARE Dev Meetup #34
GMOペパボ株式会社 minne事業部 2 自己紹介 市岡 なつみ tsumichan • 2018年4月 新卒入社
• minne の バックエンド開発を担当しています • 寝ること、もふもふしたもの、お寿司🍣が好き • ねこを飼うのが夢 • マイブームはオクラです • Twitter : @tsummichan
minneは2022年1月に10周年を迎えました🎉 minneは、ハンドメイド作品を「買いたい人」と「売りたい 人」をつなぐハンドメイドマーケットです。 2012年1月よりサービス開始し、 2022年1月17日に10周年を迎えました。 これからも「ものづくりの総合プラットフォーム」として、 多くの方がものづくりを通して表現できる場となれるよ う、成長していきます!🚀 画像:https://minne.com/feature/anniversary/10th 3
minne 10周年!
4 アジェンダ 1. 10年経ってつらいところ 2. 10年経ってよいところ 3. これから長く続くプロダクトを作るすべての人へ • minne
が10年で感じ、学んだことを3つご紹介します
5 10年経ってつらいところ
6 • ユーザー、作品、注文などいろいろなデータがある • 83万人の作家・ブランド(出品者)がそれぞれ作品を作成、公開しているので作品数がすごくたくさん ある • 複数の作家・ブランドの作品を一度で決済できるが、注文レコードは作家・ブランドに紐づく • つまり1回の決済で作家A、作家B、作家Cから購入できるので、注文レコードは3件できる
• フォロー、お気に入りは無制限にできる • SNSっぽく使うユーザーがいて、数万件のお気に入りを持つユーザーもいる 1. シンプルにデータ量が増えて大変になった 10年経ってつらいところ
7 • 最近つらいのは検索サーバーへの同期と退会処理 • 検索サーバー(Elasticsearch)への作品情報を reindex するとタイムアウトするので、根気よくリトラ イしている • サーバーのスペックを上げたり並列度を上げるなどして対策する予定
• 退会時にユーザーに紐づくお気に入りレコードを削除するが、お気に入りが多いとタイムアウトしてし まうのでユーザー体験に影響が出ている • お気に入りは user に対し has_many で紐付いていて、 dependent: delete_all が設定されている • お気に入り以外にもいろいろ削除しているが、必要最低限のもの以外は非同期処理化していく予定 1. シンプルにデータ量が増えて大変になった 10年経ってつらいところ
8 2. 意図がわからない設計や命名がある 10年経ってつらいところ • 「このカラム消したいなあ…なんのために作ったんだっけ?」 「これなんでこういう仕組みになってるの?」→作られた当時にいた人が退職していて誰もわからない… • pull request
やコミットメッセージに ”なぜそうしたのか”が書かれていない • GitHub から GitHub Enterprise へ移行した時に昔の issue, PR の画像などが一部消滅した • pull request やコミットメッセージに Why を書くようにチームで取り組み中 • 改修途中で力尽きたものがある • デザインの刷新時に、ユーザーの管理ページが /user にあったが新しく /account に作り、徐々に /account の方へ移行する予定だった • 一部機能はまだ /user に取り残されていて、 controller なども user と account の2つが存在して いる
9 2. 意図がわからない設計や命名がある 10年経ってつらいところ • プロダクトビジョンが変わったが、内部の設計や命名はそのままになっている • 昔はハンドメイド作品を売買するプラットフォームではなく、ハンドメイド作品を展示するサービスだっ た •
minne の作家のトップページは昔「ギャラリー」と呼ばれていたが今は「ショップ」になった • ユーザーに見えるオモテ部分はアップデートされていても、ソースコード(クラス名など)はまだそのままになって いる
10 3. 保守コストが高い 10年経ってつらいところ • 機能の数が多すぎて保守やメンテナンスの手が回らない • あまり使われてない機能も消さずに残されている • 利用率とメンテナンスコストを天秤にかけて、コストのほうが重ければ消していきたい
• 統一されていないアーキテクチャ・設計がある • これについては何もできていません … 😥アドバイスお待ちしています • deprecated なものが存在している • Ruby, Rails のバージョンアップに伴って deprecated になったメソッドや記法とか • Controller Spec, CoffeeScript とか • Rubocop を導入し、ボーイスカウトルールでできる範囲から徐々に書き換えているところ
11 10年経ってよいところ
12 1. 古すぎてどうしようもないみたいなライブラリなどは少ない※ • ※全く無いとは言っていない • ただただ先人たちがしっかりアップデートしたり保守を頑張ってくれたおかげ • 長い間メンテナンスされていない gem
を使っていたりはするので、いつ動かなくなるかわからないと いう危険性はあり、それをどうするのかはこれからの課題 • アップデートを後回しにして溜めてはいけない(戒め) 10年経ってよいところ
13 2. マイクロサービス化により改修やリリースによるデグレが少ない • 今は認証サービスとフロントエンドの一部がマイクロサービス化されている • 開発やリリースも同時進行できるので、どちらかの作業待ちが発生しなくなり、効率的に開発を進められ るようにもなった • これも先人のおかげ(感謝しかありません)
• 今は各サービスごとにチームがあるわけではなく、1つのチームが複数のサービスを見ているので把握が 大変という声もある • これは組織や体制の話でもある 10年経ってよいところ
14 3. 規模の大きいサービスの開発ならではの経験が得られる • 新しい機能を作る時に、常にパフォーマンスや負荷を考えた設計をしないといけない • 急いでるからとりあえず動けばいい、は通用しない • 今は操作するデータ量が少ない機能でも、将来データ量が増えたときのことを考えて設計する癖がつく •
パフォーマンスチューニングもやるべきところがたくさんあってよい経験になる 10年経ってよいところ
15 これから長く続くサービスを作る すべての人へ
16 拡張性を考えた開発をするのは大切 • 今は2種類のパラメータでも、今後3種類、4種類…と増えていくかもしれない • 先を見通した設計をすることで将来つらくならない! • 作るその時点での要件だけがすべてではなく、その機能をどう使われてほしいのかや今後どう発展させ ていきたいのかをプロダクトオーナーと相談しながら設計したほうが先を見通した設計にできる これから長く続くサービスを作るすべての人へ
17 データ量が増えることは本質的にはつらいことではない • プロダクトが成長したり長く続くと必ずデータ量が増える • DBサーバーのスペックを上げる、将来データが増えても耐えうる設計にする、などデータ量が増えるた びにそれに対応していればあまりつらくならない(はず) • minneではユーザーや注文のレコードがたくさんあるが、その注文の売上によって生活が豊かになった 人がたくさんいるということであり、世の中に影響を与えた証、影響を与えた量でもある
これから長く続くサービスを作るすべての人へ
18 プロダクトを作り直したり仕組みを変えたりしないといけなくなる日が必ず来る • プロダクトが大きくなると、その状態に合った仕組みにしないといけない • 今はイケてない作りでも、作った当時はそれが最良のやり方であったはずなので、「これイケてなさすぎ るだろ、誰が作ったんだよーw」とか言えない、言っちゃいけない… • 将来のためにも私達も常に最良のやり方で作ろう •
minne では、過去に仕組みを変えることでユーザー体験を改善ができる機会があったけど、他にやるこ とがあってそこにコストをかけられず、妥協してしまったことがある • 「しっかり対応していればもっとユーザーが使いやすくできたかも」 • 規模が大きくなるほど仕組み変えるのが大変になるので、サービスの規模がそこまで大きくなくて、 作り変えるのを迷ってるひとがいたらやったほうがいい!!! これから長く続くサービスを作るすべての人へ
19 さいごに
20 レガシーなプロダクトが良くないとか 新しい技術を使っているからえらい/すごいというより、 より売上を生み出してユーザーに価値を届けることのほうが プロダクトとしては重要なので、 長く価値を届け続けられるプロダクトを作っていきましょう さいごに