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
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
yamashooooo
September 29, 2023
1.2k
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
【PIXIV MEETUP 2023】ピクシブ決済基盤のフロントエンドを改善していく話
yamashooooo
September 29, 2023
More Decks by yamashooooo
See All by yamashooooo
【mediba #developers_community】フロントエンドの フレームワーク事情2022
yamam00s
0
130
【コネヒトマルシェオンライン】Vue3触ってみた
yamam00s
0
380
【BIT VALLEY -INSIDE- Vol.17】自作キーボード入門した話
yamam00s
0
1.4k
【Roppongi.vue #3】ユーザー数1500万人のサービスにNuxtを導入して嬉しかったこと
yamam00s
1
890
Featured
See All Featured
Practical Tips for Bootstrapping Information Extraction Pipelines
honnibal
25
1.9k
ピンチをチャンスに:未来をつくるプロダクトロードマップ #pmconf2020
aki_iinuma
128
55k
The Language of Interfaces
destraynor
162
27k
The Organizational Zoo: Understanding Human Behavior Agility Through Metaphoric Constructive Conversations (based on the works of Arthur Shelley, Ph.D)
kimpetersen
PRO
0
360
Speed Design
sergeychernyshev
33
1.8k
[RailsConf 2023 Opening Keynote] The Magic of Rails
eileencodes
31
10k
Product Roadmaps are Hard
iamctodd
PRO
55
12k
Ethics towards AI in product and experience design
skipperchong
2
300
Stewardship and Sustainability of Urban and Community Forests
pwiseman
0
220
Building the Perfect Custom Keyboard
takai
2
790
Why You Should Never Use an ORM
jnunemaker
PRO
61
9.9k
Introduction to Domain-Driven Design and Collaborative software design
baasie
1
820
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開発者)
ありがとうございました