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
【PIXIV MEETUP 2023】ピクシブ決済基盤のフロントエンドを改善していく話
Search
yamashooooo
September 29, 2023
0
800
【PIXIV MEETUP 2023】ピクシブ決済基盤のフロントエンドを改善していく話
yamashooooo
September 29, 2023
Tweet
Share
More Decks by yamashooooo
See All by yamashooooo
【mediba #developers_community】フロントエンドの フレームワーク事情2022
yamam00s
0
76
【コネヒトマルシェオンライン】Vue3触ってみた
yamam00s
0
280
【BIT VALLEY -INSIDE- Vol.17】自作キーボード入門した話
yamam00s
0
1.1k
【Roppongi.vue #3】ユーザー数1500万人のサービスにNuxtを導入して嬉しかったこと
yamam00s
1
810
Featured
See All Featured
Code Review Best Practice
trishagee
64
17k
KATA
mclloyd
29
14k
Designing Experiences People Love
moore
138
23k
The Straight Up "How To Draw Better" Workshop
denniskardys
232
140k
Docker and Python
trallard
40
3.1k
Designing on Purpose - Digital PM Summit 2013
jponch
115
7k
Keith and Marios Guide to Fast Websites
keithpitt
409
22k
XXLCSS - How to scale CSS and keep your sanity
sugarenia
246
1.3M
I Don’t Have Time: Getting Over the Fear to Launch Your Podcast
jcasabona
28
2k
Imperfection Machines: The Place of Print at Facebook
scottboms
265
13k
Visualization
eitanlees
145
15k
GitHub's CSS Performance
jonrohan
1030
460k
Transcript
pixiv Inc. ピクシブ決済基盤の フロントエンドを 改善していく話 @yamasho
Profile yamasho フロントエンドエンジニア • 2023/04 中途入社 • フロントエンド歴5年 • 最近ハマっているものは
いろいろな味のサバ缶
今日話すこと • ピクシブ決済基盤とフロントエンドの課題について • どう解決するか ◦ 技術選定について ◦ 断続的なリプレイス戦略について •
まとめ
今日話さないこと • 詳細な実装の内容 • 各ライブラリや用語の説明(一部を除く) • いろいろな味のサバ缶について
ピクシブ決済基盤 について
ピクシブ決済基盤について • カード一覧/選択/登録画面 • 決済前確認画面 • 銀行口座入力画面 • etc… 主な画面
カード登録画面
決済前確認画面
フロントエンドについて • Scala/Play Framework + テンプレートエンジン (twirl) • 基本VanillaJS(少しだけjQuery) •
Storybook(htmlが2重管理されてる) • Tailwind CSSを使用した弊社デザインシステム • メンテナンスが滞っている
フロントエンド専任は yamashoのみ
ピクシブ決済基盤 フロントエンドの 改善できそうな課題
改善できそうな課題 • テストが充実していない • 型安全でない(TypeScriptでない) • 命令的UIによる可読性 • フロントエンドとバックエンドが密結合 •
統一されたデザインに対してUIが再利用されていない • Storybookとテンプレートエンジンの親和性が低い
主に開発体験や 堅牢性部分の不安 → 改修のハードル
どう解決していくか
コンポーネント化から モダンフロントエンドの 領域を作り、 改修のハードルを下げる
コンポーネント化から モダンフロントエンドの 領域を作り、 改修のハードルを下げる テスト 型安全 再利用性 宣言的UI
改善できそうな課題 • テストが充実していない • 型安全でない(TypeScriptでない) • 命令的UIによる可読性 • フロントエンドとバックエンドが密結合 •
統一されたデザインに対してUIが再利用されていない • Storybookとテンプレートエンジンの親和性が低い
改善できそうな課題 • テストが充実していない • 型安全でない(TypeScriptでない) • 命令的UIによる可読性 • フロントエンドとバックエンドが密結合 •
統一されたデザインに対してUIが再利用されていない • Storybookとテンプレートエンジンの親和性が低い 脱テンプレートエンジン コンポーネント管理(TSX)
技術選定について
1. 脱テンプレートエンジン
バックエンドからの データの受け渡し方法
アプリケーションは常に Growthしていくもの
チーム状況的に リプレイスに注力は 難しい時期もある
コストの軽い コンポーネント化に 注力する
脱テンプレートエンジン → 後回しでいいという選択
改善できそうな課題 • テストが充実していない • 型安全でない(TypeScriptでない) • 命令的UIによる可読性 • フロントエンドとバックエンドが密結合 •
統一されたデザインに対してUIが再利用されていない • Storybookとテンプレートエンジンの親和性が低い 脱テンプレートエンジン コンポーネント管理(TSX)
改善できそうな課題 • テストが充実していない • 型安全でない(TypeScriptでない) • 命令的UIによる可読性 • フロントエンドとバックエンドが密結合 •
統一されたデザインに対してUIが再利用されていない • Storybookとテンプレートエンジンの親和性が低い テンプレートエンジン上で コンポーネント管理(TSX)
2. コンポーネントの管理
ピクシブ社内では ReactやNext.jsが人気
社内の知見が多いのは かなり魅力的
選ばれたのは Preactでした
Preactとは • とにかく軽量な仮想DOM系ライブラリ • Reactとほぼ同様のコードでコンポーネント作成が可能 • Reactとエコシステムの互換性が高い (が、苦戦したという話もチラホラ…) → 今回の用途はあくまでコンポーネント化
function Counter() { const [value, setValue] = useState(0); const increment
= useCallback(() => { setValue(value + 1); }, [value]); return ( <div> Counter: {value} <button onClick={increment}>Increment</button> </div> ); }
選ばれた理由 • 目的を絞って最小限の機能で使う → バンドルサイズを最小限に • Reactとほぼ同様のコード → Preactで苦しみを感じた際、Reactへ移行しやすい •
Web Components出力をサポート → テンプレートエンジンに組み込みやすい
改善できそうな課題 • テストが充実していない • 型安全でない(TypeScriptでない) • 命令的UIによる可読性 • フロントエンドとバックエンドが密結合 •
統一されたデザインに対してUIが再利用されていない • Storybookとテンプレートエンジンの親和性が低い テンプレートエンジン上で コンポーネント管理(TSX)
改善できそうな課題 • テストが充実していない • 型安全でない(TypeScriptでない) • 命令的UIによる可読性 • フロントエンドとバックエンドが密結合 •
統一されたデザインに対してUIが再利用されていない • Storybookとテンプレートエンジンの親和性が低い テンプレートエンジン上で Preactを使った コンポーネント管理(TSX)
断続的なリプレイス戦略
今までの経験
技術選定 今まで経験したリプレイス リリース! リリースまでの流れ アプリケーションのリプレイス 新機能A 新機能Aの取り込み レガシー リプレイス バグ修正
バグ修正 取り込み 既存の凍結期間
苦しかった点 • 一定期間大量にリソースを消費する • 現行システムとの同期を取ることに工数を使う ◦ 凍結期間でアプリケーションのGrowthが止まる • リリースまでの期間が長く伸びやすい ◦
技術選定の事情も変化していく • 関わり方でリプレイスに対する意識の乖離が起きる
長期戦故の消耗
今回
環境構築 リリースまでの流れ 既存機能A リプレイス 新機能A レガシー リプレイス バグ修正 新機能A リプレイス
VRT 導入 新機能B 作成 リリース リリース リリース リリース 予定 断続的リプレイス LP作ったり
昔: アプリケーションの技術刷新 今: 機能ごとのコンポーネント化
小さい課題を短期間で 片付けていくことが可能
アプリケーションの Growthを止める事なく 断続的に改善していく
まとめ • 課題を管理し、現在のチームの状態に合う選択を ◦ 今回の話: リソースを考慮し、目的を絞った上での 負荷の少ない技術選定とリリース計画 • 改善タスクに完璧な終わりはない →
常に新陳代謝を繰り返す気持ち
Fluxライブラリは眼鏡のようなものです: あなたが必 要な時にいつでも分かるのです。 --Dan Abramov(Redux開発者)
ありがとうございました