Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[2021/08/24] Frontend Night #159

Closed
jjenko opened this issue Aug 17, 2021 · 4 comments
Closed

[2021/08/24] Frontend Night #159

jjenko opened this issue Aug 17, 2021 · 4 comments

Comments

@jjenko
Copy link

jjenko commented Aug 17, 2021

Policy

  • 資料の準備をがんばらない
  • 参加・途中退席は自由
  • スキップしない

話したい・聞きたいネタを書いてく ✏️

ハッシュタグ #frontend_night

Prev: #158

Created from #65 by issue-creator

@kobayang
Copy link

kobayang commented Aug 23, 2021

A Deep Dive into Airbnb’s Server-Driven UI System

c.f. 要約版: https://www.infoq.com/jp/news/2021/08/airbnb-server-driven-ui/

  • Server-Driven UI (SDUI) は、サーバーがデータだけでなくUIも提供するという考え方。
  • Airbnb は Ghost Platform(GP) という Server-Driven UI System を実装している。

SDUI にする嬉しさ

Traditional SDUI
スクリーンショット 2021-08-23 9 58 29 スクリーンショット 2021-08-23 10 04 20

ref: https://www.facebook.com/watch/?v=1445539065813160 31分〜

UIに関するロジックやビジネスロジックをサーバー側に集約できること。
あとはモバイルのversioningでもSDUIの利点があると言ってる。

Ghost Platform(GP)

GP は UI を スクリーンとセクションという概念に分けて考えてる。

GP の Core Concept

  • セクション
    • data を UI に変換する
    • ディスプレイに表示する正確なデータ & l18n
    • セクションは スクリーンや外のセクションのことを知らない
  • スクリーン
    • セクションがどこに配置されるか、どのようにセクションを表示するかの情報を持つ(Placement と呼ぶ)
    • レスポンスをリアルタイムに反映する + 後方互換生がある

ref: https://www.facebook.com/watch/?v=1445539065813160 35分ぐらい

  • アクション
    • Swipe などのアクションのタイプを指定することでインタラクションを表す。

よく分からなかったこと

  • インタラクション後のUIの変更はどう表現してる?
    • リアルタイムにレスポンスを瞬時に反映させていると言っているのでそれで表現可能?
  • 初期描画時のレスポンスがめちゃくちゃ巨大になりそう?
    • パフォーマンス的にどうなの。

感想

  • 真に規約化されたDesignSyetemがあればできるんじゃないかという夢を感じる
  • セクション、レイアウトという考え方は UI を実装する上で参考になる。

@kobayang
Copy link

kobayang commented Aug 23, 2021

メルカリShops のフロントエンド

📝 面白いと思ったポイント

@kobayang
Copy link

kobayang commented Aug 24, 2021

新しいメルカリDesign System Web

Design System Webはメルカリ Webで使われているReactだけでなく、様々な技術スタックと共に使用できる、真にスケーラブルなライブラリでなくてはなりません。また、各ライブラリの仕様に引っ張られて細かい箇所で挙動が違ったり、メンテナンスや実装速度の都合上仕様に差分が出てくることは避けたいと考えていました。以上のことから、新しいDesign System Webを構築する技術スタックはWeb Componentsを採用しました。

Web Componentsを構築するためのライブラリはLit (採用の時点ではLitElement)を採用しています。これはシンプルな分カスタムが効きやすいという判断です。

c.f. Lit

Lit の話は https://uit-inside.linecorp.com/episode/84 のエピソードで語られていたのでおすすめ。

React上でWeb Componentを使うにはいくつかの問題があります。これを解決するためにReact Wrapperと呼ばれるライブラリを実装し、それぞれのコンポーネントに対するEvent Listener、JSXの型付け、attributeの型変換などをサポートするReact Componentを各コンポーネントごとに生成しています。

https://custom-elements-everywhere.com/

データの取り扱い

ReactはすべてのデータをHTML属性の形でCustom Elementsに渡します。プリミティブなデータの場合はこれで問題ありませんが、オブジェクトや配列のようなリッチなデータを渡す場合はシステムが破綻します。このような場合、some-attr="[object Object]"のような文字列化された値になってしまい、実際には使用することができません。

イベントの処理

Reactは独自の合成イベントシステムを実装しているため、回避策を使用せずにCustom ElementsからのDOMイベントをリッスンすることはできません。開発者は、refを使用してCustom Elementsを参照し、addEventListenerでイベントリスナーを手動でアタッチする必要があります。これにより、カスタムエレメントの扱いが煩雑になります。

📝 感想

  • 社内でもrails用(sass)のとReactのデザインシステムが混在しているのでWebコンポーネントにするのはありでは
  • React と Web Components の相性が良くないのが結構不安。
  • Lit素振りしたい。(個人的感想)

参考

@izumin5210
Copy link

facebook/react#22114

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

4 participants