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
820
【PIXIV MEETUP 2023】ピクシブ決済基盤のフロントエンドを改善していく話
yamashooooo
September 29, 2023
Tweet
Share
More Decks by yamashooooo
See All by yamashooooo
【mediba #developers_community】フロントエンドの フレームワーク事情2022
yamam00s
0
82
【コネヒトマルシェオンライン】Vue3触ってみた
yamam00s
0
290
【BIT VALLEY -INSIDE- Vol.17】自作キーボード入門した話
yamam00s
0
1.1k
【Roppongi.vue #3】ユーザー数1500万人のサービスにNuxtを導入して嬉しかったこと
yamam00s
1
820
Featured
See All Featured
Reflections from 52 weeks, 52 projects
jeffersonlam
347
20k
Put a Button on it: Removing Barriers to Going Fast.
kastner
59
3.6k
Cheating the UX When There Is Nothing More to Optimize - PixelPioneers
stephaniewalter
280
13k
How to Think Like a Performance Engineer
csswizardry
22
1.2k
Building Better People: How to give real-time feedback that sticks.
wjessup
365
19k
Done Done
chrislema
181
16k
Making Projects Easy
brettharned
116
5.9k
Imperfection Machines: The Place of Print at Facebook
scottboms
266
13k
CoffeeScript is Beautiful & I Never Want to Write Plain JavaScript Again
sstephenson
159
15k
Helping Users Find Their Own Way: Creating Modern Search Experiences
danielanewman
29
2.3k
Testing 201, or: Great Expectations
jmmastey
40
7.1k
Chrome DevTools: State of the Union 2024 - Debugging React & Beyond
addyosmani
2
170
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開発者)
ありがとうございました