Link
Embed
Share
Beginning
This slide
Copy link URL
Copy link URL
Copy iframe embed code
Copy iframe embed code
Copy javascript embed code
Copy javascript embed code
Share
Tweet
Share
Tweet
Slide 1
Slide 1 text
17周年のWebアプリケーションに TanStack Queryを導入する さいと / Muddy Web #10
Slide 2
Slide 2 text
自己紹介 ● 2022年新卒入社 (3年目) ● フロントエンドエンジニア ● 最近CloudflareとHonoが熱い ● ポケモンカードが好き さいと @saitolume
Slide 3
Slide 3 text
“好き”に出会えるイラスト・マンガ・小説作品の 投稿プラットフォーム サービス開始日 2007年9月10日 登録ユーザー数 約1億ユーザー 累計投稿作品数 約1億4000万作品
Slide 4
Slide 4 text
● 変えることは難しい ● でも、変えられる ● 変えるためには泥臭く (Muddyに) 課題に向き合うことも必要 今日伝えたいこと
Slide 5
Slide 5 text
アジェンダ ● pixivの歴史と負債 ● 変える ● 課題と向き合う ● 事例: 非同期データ管理ライブラリの導入
Slide 6
Slide 6 text
pixivの歴史と負債
Slide 7
Slide 7 text
No content
Slide 8
Slide 8 text
● 2007年 pixiv誕生 ○ 個人サイトや掲示板からSNSの時代へ ○ 動的なコンテンツを扱うためPHPとSmartyで実装 pixivの歴史と負債
Slide 9
Slide 9 text
● 2010年 pixiv touch誕生 ○ ガラケーからスマホの時代へ ○ スマホに最適化するために新規で実装 pixivの歴史と負債
Slide 10
Slide 10 text
● 2018年 SPA移行 ○ 仮想DOMによる高速なレンダリングが可能なライブラリ・フレー ムワークが台頭 ○ デスクトップはReactを採用 ○ モバイル (touch) はVue.jsを採用 pixivの歴史と負債
Slide 11
Slide 11 text
● 2022年 大統一時代 ○ デスクトップとモバイルの実装が分離していることによる生産性 の低さが課題に ○ 解決するためにレスポンシブデザインの実装が増加する ○ Next.jsに移行して実装を統合するプロジェクトが始動 pixivの歴史と負債
Slide 12
Slide 12 text
● 2024年 現在 ○ Smarty、React、Vue、Next.jsの4つの実装が存在 ○ 各時代で移行しきれなかったコードが断層のように残っている ○ それぞれを切り取って見るとうまくいっていそうだったが、振り返 ると負債になっている pixivの歴史と負債
Slide 13
Slide 13 text
● 課題 ○ 実装が分散しているため作業量が多い ○ 1億人以上のユーザーに影響を与える可能性がある ○ テストが不足している ○ フロントエンドエンジニアが各チームに分散している ○ 相談先や相談する場所がない pixivの歴史と負債
Slide 14
Slide 14 text
変える
Slide 15
Slide 15 text
● ソフトウェアエンジニアはスペシャリスト ● 要求に応じて、より早くより高い質で変えることが求められる ● プラットフォームには様々な要求が発生する ○ ユーザーの声、プロダクトの方針 ○ 技術革新、法令対応、決済リスク 変える
Slide 16
Slide 16 text
● 17周年を迎えたpixivは変更容易性が低い状態 ● 変えることは難しい 変える
Slide 17
Slide 17 text
● 課題 ○ 実装が分散していて作業量が多い ○ 1億人以上のユーザーに影響を与える可能性がある ○ テストが不足している ○ フロントエンドエンジニアが各チームに分散している ○ 相談先や相談する場所がない pixivの歴史と負債 (再掲)
Slide 18
Slide 18 text
課題と向き合う
Slide 19
Slide 19 text
● ゴールを「変更容易性を手に入れること」とする ● 何を得られると変えられるようになるのか ○ 人月 ○ 堅牢な設計 ○ テスト ○ ?? 課題と向き合う
Slide 20
Slide 20 text
● pixivに最も必要だったものは「合意」 ○ 1つのプロダクトを複数のチームで開発している ○ 個人やチームで完結できない ○ 変えるときにやっていいのか不安になる ○ いざやってみても手戻りが発生するリスクがある 課題と向き合う
Slide 21
Slide 21 text
● 失敗事例 ○ 2023年末にApp Routerを導入しようとした ○ 一部ページを移行する実装のレビューをお願いしたときに、設計 で折り合いがつかなかった ○ 凍結へ 課題と向き合う
Slide 22
Slide 22 text
● 合意に必要なもの ○ 意思決定の仕組み ○ 意思決定の場所 課題と向き合う
Slide 23
Slide 23 text
意思決定の仕組み
Slide 24
Slide 24 text
● Architecture Decision Record (ADR) を導入 ● ソフトウェア開発における意思決定を文書化する手法 ● 文脈、選択内容、選択理由などを記録 ● 後から辿ることができる ○ “なぜフェンスが建てられたのかわかるまで、決してフェンスをと りはずしてはならない” 意思決定の仕組み
Slide 25
Slide 25 text
● ルール ○ 開発者全員が提案・コメントできる ○ 提案者は提案に責任を持って進行する ○ 提案内容は同期的に意思決定される (後述) 意思決定の仕組み
Slide 26
Slide 26 text
● テンプレート ○ 文脈: どのような状況で選択が迫られているか ○ 選択: 意思決定の内容 ○ 比較・検討: 事実ベースで選択に必要な情報をまとめる ○ 結果: 意思決定がシステムやメンバーに与える影響 意思決定の仕組み
Slide 27
Slide 27 text
● 変えるためのレールが敷かれた ○ レールに乗って進めば変えられる! ○ わかりやすくなった ○ やることが減った ○ 心理的なハードルが低くなった 意思決定の仕組み
Slide 28
Slide 28 text
意思決定の場所
Slide 29
Slide 29 text
● フロントエンドエンジニアが集まって同期的に話す会を開催 ○ 隔週 ○ 誰でも参加可能 ○ 最大30分 ○ トピックがないときは解散 意思決定の場所
Slide 30
Slide 30 text
● テンプレート ○ 前回までの宿題 ○ 今週の議題 ○ 更新・追加された開発マニュアルの確認 ○ 提案中のADRの確認 意思決定の場所
Slide 31
Slide 31 text
● 場所ができると人が集まってくる ○ 今までは別チームにいて議論することが少なかった人も ○ 関心が可視化されて雰囲気が良くなった ○ カイゼンに伴う孤独感が薄れる 意思決定の場所
Slide 32
Slide 32 text
● 納得感 ○ オープンな場所で透明性がある ○ 関心のあるメンバーが集まっている ○ 「フロントエンドで悩んだらあそこで決めよう」 意思決定の場所
Slide 33
Slide 33 text
● 実績 ○ ちょうど1年間継続 (計23回開催) ○ 62件のトピックを議論 ○ 11人がトピックを起票 ○ 25件の意思決定をサポート 意思決定の場所
Slide 34
Slide 34 text
事例: 非同期データ管理ライブラリ
Slide 35
Slide 35 text
● 2023年5月 Slackではじめて言及される ○ 当時はADRも会もなかったので話が進まない ● 2024年2月 会のトピックに上がる ● 2024年4月 ?? ● 2024年5月 検討を再開 ● 2024年8月 承認・導入 🎉 事例: 非同期データ管理ライブラリ
Slide 36
Slide 36 text
● 検討から導入まで3ヶ月かかった ● 最初は隔週の会だけで話していて期間が空いてしまった ● 主務の部署の業務が優先されるため、優先度が下がりがち ● 開発者によって選択肢に好みがある ○ SWR、TanStack Query、RTK Queryなど ○ 納得感の醸成が必要 事例: 非同期データ管理ライブラリ
Slide 37
Slide 37 text
● 隙間時間を活用してプロトタイピング ○ ライブラリごとの違いを客観的に評価 ○ コードを見ながら議論する ● 目的と手段を見比べる ○ 例えば、目的の1つに「Reduxをやめたい」もある ○ RTK QueryだとReduxへの依存をやめられない 事例: 非同期データ管理ライブラリ
Slide 38
Slide 38 text
● 結論 ○ TanStack Queryを選択 ● 理由 ○ クエリ単位で抽象化ができる ○ context.metaを活用できる ○ SWRは既存のAPIクライアントクラスと相性が悪かった ○ など 事例: 非同期データ管理ライブラリ
Slide 39
Slide 39 text
● 意思決定の仕組みと場所があるおかげで話を進められた ● ADRで選択肢の比較と意思決定の記録ができた ● 会が定期的に開かれていることで気軽に提案できる 事例: 非同期データ管理ライブラリ
Slide 40
Slide 40 text
● 2023年5月 Slackではじめて言及される ○ 当時はADRも会もなかったので話が進まない ● 2024年2月 会のトピックに上がる ● 2024年4月 ?? ● 2024年5月 検討を再開 ● 2024年8月 承認・導入 🎉 事例: 非同期データ管理ライブラリ (再掲)
Slide 41
Slide 41 text
● 2023年5月 Slackではじめて言及される ○ 当時はADRも会もなかったので話が進まない ● 2024年2月 会のトピックに上がる ● 2024年4月 Muddy Web #8 でTanStack Query導入の話を聞く ● 2024年5月 検討を再開 ● 2024年8月 承認・導入 🎉 事例: 非同期データ管理ライブラリ
Slide 42
Slide 42 text
Muddy Webがきっかけで モチベーションを高められました 感謝🙏
Slide 43
Slide 43 text
まとめ
Slide 44
Slide 44 text
● pixivは17年の積み重ねで変えることが難しくなっていた ● 変えられる状態 = 変更容易性を手に入れたい ● そのためにADRと場所をつくって運用している ● 成果の1つとして、TanStack Queryの導入ができた まとめ
Slide 45
Slide 45 text
● 変えることは難しい ● でも、変えられる ● 変えるためには泥臭く (Muddyに) 課題に向き合うことも必要 今日伝えたいこと (再掲)
Slide 46
Slide 46 text
● ピクシブは一緒に「創作活動を、もっと楽しくする。」メンバーを募集し ています ● pixivのフロントエンドにはまだ課題が山積み ● しかし、それらを変えられるベースができてきた ● 一緒に挑戦したい方をお待ちしています 最後に https://hrmos.co/pages/pixiv/jobs