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
1.1k
【PIXIV MEETUP 2023】ピクシブ決済基盤のフロントエンドを改善していく話
yamashooooo
September 29, 2023
Tweet
Share
More Decks by yamashooooo
See All by yamashooooo
【mediba #developers_community】フロントエンドの フレームワーク事情2022
yamam00s
0
120
【コネヒトマルシェオンライン】Vue3触ってみた
yamam00s
0
340
【BIT VALLEY -INSIDE- Vol.17】自作キーボード入門した話
yamam00s
0
1.3k
【Roppongi.vue #3】ユーザー数1500万人のサービスにNuxtを導入して嬉しかったこと
yamam00s
1
880
Featured
See All Featured
How to build a perfect <img>
jonoalderson
1
4.8k
How to Think Like a Performance Engineer
csswizardry
28
2.4k
Leveraging LLMs for student feedback in introductory data science courses - posit::conf(2025)
minecr
0
120
Learning to Love Humans: Emotional Interface Design
aarron
274
41k
Mind Mapping
helmedeiros
PRO
0
47
A Soul's Torment
seathinner
4
2.1k
Design in an AI World
tapps
0
120
Digital Ethics as a Driver of Design Innovation
axbom
PRO
0
140
The Language of Interfaces
destraynor
162
26k
Game over? The fight for quality and originality in the time of robots
wayneb77
1
78
Effective software design: The role of men in debugging patriarchy in IT @ Voxxed Days AMS
baasie
0
190
Fantastic passwords and where to find them - at NoRuKo
philnash
52
3.5k
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開発者)
ありがとうございました