17年周年のWebアプリケーションにTanStack Queryを導入する / Implementing TanStack Query in a 17th Anniversary Web Application
by
Tadao Iseki
×
Copy
Open
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
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