【PIXIV MEETUP 2023】ピクシブ決済基盤のフロントエンドを改善していく話
by
yamashooooo
Link
Embed
Share
Beginning
This slide
Copy link URL
Copy link URL
Copy iframe embed code
Copy iframe embed code
Copy javascript embed code
Copy javascript embed code
Share
Tweet
Share
Tweet
Slide 1
Slide 1 text
pixiv Inc. ピクシブ決済基盤の フロントエンドを 改善していく話 @yamasho
Slide 2
Slide 2 text
Profile yamasho フロントエンドエンジニア ● 2023/04 中途入社 ● フロントエンド歴5年 ● 最近ハマっているものは いろいろな味のサバ缶
Slide 3
Slide 3 text
今日話すこと ● ピクシブ決済基盤とフロントエンドの課題について ● どう解決するか ○ 技術選定について ○ 断続的なリプレイス戦略について ● まとめ
Slide 4
Slide 4 text
今日話さないこと ● 詳細な実装の内容 ● 各ライブラリや用語の説明(一部を除く) ● いろいろな味のサバ缶について
Slide 5
Slide 5 text
ピクシブ決済基盤 について
Slide 6
Slide 6 text
ピクシブ決済基盤について ● カード一覧/選択/登録画面 ● 決済前確認画面 ● 銀行口座入力画面 ● etc… 主な画面
Slide 7
Slide 7 text
カード登録画面
Slide 8
Slide 8 text
決済前確認画面
Slide 9
Slide 9 text
フロントエンドについて ● Scala/Play Framework + テンプレートエンジン (twirl) ● 基本VanillaJS(少しだけjQuery) ● Storybook(htmlが2重管理されてる) ● Tailwind CSSを使用した弊社デザインシステム ● メンテナンスが滞っている
Slide 10
Slide 10 text
フロントエンド専任は yamashoのみ
Slide 11
Slide 11 text
ピクシブ決済基盤 フロントエンドの 改善できそうな課題
Slide 12
Slide 12 text
改善できそうな課題 ● テストが充実していない ● 型安全でない(TypeScriptでない) ● 命令的UIによる可読性 ● フロントエンドとバックエンドが密結合 ● 統一されたデザインに対してUIが再利用されていない ● Storybookとテンプレートエンジンの親和性が低い
Slide 13
Slide 13 text
主に開発体験や 堅牢性部分の不安 → 改修のハードル
Slide 14
Slide 14 text
どう解決していくか
Slide 15
Slide 15 text
コンポーネント化から モダンフロントエンドの 領域を作り、 改修のハードルを下げる
Slide 16
Slide 16 text
コンポーネント化から モダンフロントエンドの 領域を作り、 改修のハードルを下げる テスト 型安全 再利用性 宣言的UI
Slide 17
Slide 17 text
改善できそうな課題 ● テストが充実していない ● 型安全でない(TypeScriptでない) ● 命令的UIによる可読性 ● フロントエンドとバックエンドが密結合 ● 統一されたデザインに対してUIが再利用されていない ● Storybookとテンプレートエンジンの親和性が低い
Slide 18
Slide 18 text
改善できそうな課題 ● テストが充実していない ● 型安全でない(TypeScriptでない) ● 命令的UIによる可読性 ● フロントエンドとバックエンドが密結合 ● 統一されたデザインに対してUIが再利用されていない ● Storybookとテンプレートエンジンの親和性が低い 脱テンプレートエンジン コンポーネント管理(TSX)
Slide 19
Slide 19 text
技術選定について
Slide 20
Slide 20 text
1. 脱テンプレートエンジン
Slide 21
Slide 21 text
バックエンドからの データの受け渡し方法
Slide 22
Slide 22 text
アプリケーションは常に Growthしていくもの
Slide 23
Slide 23 text
チーム状況的に リプレイスに注力は 難しい時期もある
Slide 24
Slide 24 text
コストの軽い コンポーネント化に 注力する
Slide 25
Slide 25 text
脱テンプレートエンジン → 後回しでいいという選択
Slide 26
Slide 26 text
改善できそうな課題 ● テストが充実していない ● 型安全でない(TypeScriptでない) ● 命令的UIによる可読性 ● フロントエンドとバックエンドが密結合 ● 統一されたデザインに対してUIが再利用されていない ● Storybookとテンプレートエンジンの親和性が低い 脱テンプレートエンジン コンポーネント管理(TSX)
Slide 27
Slide 27 text
改善できそうな課題 ● テストが充実していない ● 型安全でない(TypeScriptでない) ● 命令的UIによる可読性 ● フロントエンドとバックエンドが密結合 ● 統一されたデザインに対してUIが再利用されていない ● Storybookとテンプレートエンジンの親和性が低い テンプレートエンジン上で コンポーネント管理(TSX)
Slide 28
Slide 28 text
2. コンポーネントの管理
Slide 29
Slide 29 text
ピクシブ社内では ReactやNext.jsが人気
Slide 30
Slide 30 text
社内の知見が多いのは かなり魅力的
Slide 31
Slide 31 text
選ばれたのは Preactでした
Slide 32
Slide 32 text
Preactとは ● とにかく軽量な仮想DOM系ライブラリ ● Reactとほぼ同様のコードでコンポーネント作成が可能 ● Reactとエコシステムの互換性が高い (が、苦戦したという話もチラホラ…) → 今回の用途はあくまでコンポーネント化
Slide 33
Slide 33 text
function Counter() { const [value, setValue] = useState(0); const increment = useCallback(() => { setValue(value + 1); }, [value]); return (
Counter: {value} Increment
); }
Slide 34
Slide 34 text
選ばれた理由 ● 目的を絞って最小限の機能で使う → バンドルサイズを最小限に ● Reactとほぼ同様のコード → Preactで苦しみを感じた際、Reactへ移行しやすい ● Web Components出力をサポート → テンプレートエンジンに組み込みやすい
Slide 35
Slide 35 text
改善できそうな課題 ● テストが充実していない ● 型安全でない(TypeScriptでない) ● 命令的UIによる可読性 ● フロントエンドとバックエンドが密結合 ● 統一されたデザインに対してUIが再利用されていない ● Storybookとテンプレートエンジンの親和性が低い テンプレートエンジン上で コンポーネント管理(TSX)
Slide 36
Slide 36 text
改善できそうな課題 ● テストが充実していない ● 型安全でない(TypeScriptでない) ● 命令的UIによる可読性 ● フロントエンドとバックエンドが密結合 ● 統一されたデザインに対してUIが再利用されていない ● Storybookとテンプレートエンジンの親和性が低い テンプレートエンジン上で Preactを使った コンポーネント管理(TSX)
Slide 37
Slide 37 text
断続的なリプレイス戦略
Slide 38
Slide 38 text
今までの経験
Slide 39
Slide 39 text
技術選定 今まで経験したリプレイス リリース! リリースまでの流れ アプリケーションのリプレイス 新機能A 新機能Aの取り込み レガシー リプレイス バグ修正 バグ修正 取り込み 既存の凍結期間
Slide 40
Slide 40 text
苦しかった点 ● 一定期間大量にリソースを消費する ● 現行システムとの同期を取ることに工数を使う ○ 凍結期間でアプリケーションのGrowthが止まる ● リリースまでの期間が長く伸びやすい ○ 技術選定の事情も変化していく ● 関わり方でリプレイスに対する意識の乖離が起きる
Slide 41
Slide 41 text
長期戦故の消耗
Slide 42
Slide 42 text
今回
Slide 43
Slide 43 text
環境構築 リリースまでの流れ 既存機能A リプレイス 新機能A レガシー リプレイス バグ修正 新機能A リプレイス VRT 導入 新機能B 作成 リリース リリース リリース リリース 予定 断続的リプレイス LP作ったり
Slide 44
Slide 44 text
昔: アプリケーションの技術刷新 今: 機能ごとのコンポーネント化
Slide 45
Slide 45 text
小さい課題を短期間で 片付けていくことが可能
Slide 46
Slide 46 text
アプリケーションの Growthを止める事なく 断続的に改善していく
Slide 47
Slide 47 text
まとめ ● 課題を管理し、現在のチームの状態に合う選択を ○ 今回の話: リソースを考慮し、目的を絞った上での 負荷の少ない技術選定とリリース計画 ● 改善タスクに完璧な終わりはない → 常に新陳代謝を繰り返す気持ち
Slide 48
Slide 48 text
Fluxライブラリは眼鏡のようなものです: あなたが必 要な時にいつでも分かるのです。 --Dan Abramov(Redux開発者)
Slide 49
Slide 49 text
ありがとうございました