Closed9

JSConf2023

まじまっちょまじまっちょ

tc39のプロセスについて
ステージ0
アイディア、企画書、問題意識

ステージ1
チャンピオンが委員会に提出?

まじまっちょまじまっちょ

https://twitter.com/baseballyama_

LLM全盛時代の開発プラクティス

Copilot

「飛行機などネットが使えないとGitHub Copilotが使えなくて困る」→ めっちゃわかる

constのみ/functionのみ/混在を比べる
既存の実装が不必要に統一されていない場合、サジェストの精度は落ちてしまう
そもそも統一感がないと「外在性認知負荷」が増えるため生産性が落ちる。

統一感がない場合TODOを貼るだけでサジェストの精度は上がる
→外在性認知負荷も下がりそう

統一感が大事

Figma To Code

AIレビューツール

まじまっちょまじまっちょ

wakamsha
マネフォのフロントエンドリアーキテクチャ
フロントエンド推進グループ(フロントエンドのイネイブリング)

老朽化+大規模改修を控えたプロダクトを優先して作り直した

やったこと

  • Rails依存のフロントエンドを剥がしてモダンなものに作り直し
  • モダンフロントエンド開発のスキルをチームに移譲する

方針

  • 丸暗記の排除(丸暗記している人が多かったらしい)
  • 一度に多くの知見を盛り込まない
  • CSSの苦手意識を払拭
  • ペアプロで小さな成功体験をたくさん積んでもらう
  • 自動テスト、ビルドを充実させる
  • ドキュメンテーション慣習の醸成
    • README環境構築、ディレクトリの責務を理解できる状態を作る
  • 意思決定の過程を後から辿れるようにする
    • Design Doc、ADRの利用
まじまっちょまじまっちょ

https://main--remarkable-figolla-a694f0.netlify.app/1
https://twitter.com/akfm_sato

App RouterのRouter Cacheの複雑さ

Data Cacheの使い道がよく分からない
それぞれどこに保存される?
このトークのメインはClient Cache
prefetchしまくって必要なリソースをとってくる仕組みをCacheと呼んでいるらしい

force-dynamic するとprefetchしても遷移時にリクエストが飛ぶ
prefetch時はLayoutの外側だけ
遷移時に中身を返す(外側も含まれている?)

cacheのexpireの条件すごい複雑

cacheのpargeする手段が複数ある、(サーバーアクションから、クライアントから)
Intercepted Routes初めて知った prefetchと相性が悪いらしい

まじまっちょまじまっちょ

App RouterでのMPA刷新

歴史がすごいレガシーアプリ
https://github.com/adobe/react-spectrum

DataCacheはPage RouterのISR相当

グループウェア(toB)だから最新データが表示されるのが期待される。
セキュリティ上の問題からDataCacheはリスクがある
→無効化

Dynamic Functionsを実行することでDataCacheが使われなくなる
Route Segment Configでキャッシュを無効化する設定にする。

cookieで認証認可してるなら実は漏洩はしないように実装されているっぽいがドキュメントにその挙動はない

Use Clientのネストは避けたほうがいいっぽいが、Server / Client Component 両方で使いたいコンポーネントがある

Next LinkはイベントハンドラーをOptional Propsとして渡すことで回避している

StorybookはServer Componentを未サポート
presentational componentの分離

test

React Testing Libraryが未対応なのでE2Eテストに倒している

Server Actions

再レンダリング時にはrevalidatePath/Tagでキャッシュをクリアすると再レンダリングされる

App Routerは従来のMPAとメンタルモデルが近い
基本はサーバーでレンダリング、動きが必要になったらクライアント側で実装

まじまっちょまじまっちょ

生成AIっぽい体験

タイムアウトとか大変そう
同時接続数とか
基本WebSocket?

発表内容

Loading Indicatorで今まではローディングを表現していたが、生成AIっぽさは生成中だということを示さないとけない

逐次的に生成されているということをユーザーにもそのまま見せるという体験

streamingですでに動画や画像については利用されている

Stream APIはNode.jsで最初に実装された。ブラウザは後
Web Stream APIにStreamingの仕様は統一されいく流れになっている

ReadbleStream/WritableStream/TransformStream

https://github.com/streamlit/streamlit

生成AIはテキストだけでなく画像もStreamになりうる

閉じタグが必要な形式は生成AIのストリーム形式のアウトプットとしては向いていないかも?
SSEとReadbleStreamの関係は?

SSEの順番が入れ替わってしまうことはない?

まじまっちょまじまっちょ

KOTLINで書かれたGRAPHQLサーバーをNODE.JSでモジュラモノリス化している話

技術スタックめっちゃバラバラなの親近感が湧く
一番古いRails(事業のコアの部分)がかなり厳しい負債化している

技術的負債の解消
技術スタックの統一
モジュラモノリス化

Node.jsを採用した理由

  • フロントエンドとバックエンドは同じ人が触るから

Platform側はパフォーマンスの要求が厳しくなることが多いのでGoでかく方針

サービス間の通信はgRPCにしようと思っていたがGraphQLにした

  • node.jsとgrpcの相性が悪い
  • GraphQLで統一することのメリットが大きい
  • パフォーマンスはgRPCの方がいい

モジュラモノリス

モノリスなアプリケーションの内部を機能単位でモジュールに分割したアーキテクチャ

重なっている部分のオーナーシップを誰が持つか?

障害対応やインターフェース変更を誰に相談したらいいか
モジュール単位で開発テスト運用していく

マイクロサービスではダメ?

マイクロサービスのつらみあるあるみたいなやつがつらい

モジュラモノリスのデメリット

  • デプロイの単位が大きい
  • CIが肥大化複雑化する
  • モジュールの境界を維持するためのコストがかかる?→脱法的に他のモジュールを参照するということができてしまうので仕組みで防がなければならない

将来的にマイクロサービスにうつしやすくする設計?

半年から一年くらいでKotlinからNode.jsに移行する

NestJSだった…

モノレポにするメリットよりデメリットの方が大きかった

prisma-importでモジュールごとにSchemaを分けている
モジュールを跨いだJOINは許可しない
モジュールを跨いだトランザクションを許可するかは検討中

テスト

テストはDIのモックを使っている
モックを提供するのは誰の役割?

疑問
サーバー間GraphQLはStichingでやっている?

まじまっちょまじまっちょ

StoryBook駆動開発

https://twitter.com/kinocoboy2

Testing ToolとしてのStorybookの説明
聴講者側のStorybookの利用率9割超えている

プロダクト開発の大変さをStorybookによって解消することを目指している
(私見)腐敗防止層としてのFrontendは考え方としてはわかるがFigmaのDesign Prototypeとかで腐敗は止めてほしい

"Story"bookのUIの単位がStoryなのがユースケースに対応するものだというイメージに繋がりやすくて良い

play関数いいよね

Chromatic使ってVRTの話もあるかと思っていたがなかった

このスクラップは2023/11/27にクローズされました