JSConfJP 2024
https://gyazo.com/d9a450822700367667220e6e50db2714
https://jsconf.jp/2024/
当日視聴予定
https://www.youtube.com/watch?v=ew1zmA7y9q8
https://www.youtube.com/watch?v=2BXwigWGjWQ
https://www.youtube.com/watch?v=E3yTtaGr7V8
https://www.youtube.com/watch?v=5Wt0r5vHOwQ
Promise.try: シンプルで強力な同期/非同期処理の未来 - 実装の深層とPromiseの進化
Promise.try: シンプルで強力な同期/非同期統合の未来 - 実装の深層とPromiseの進化
直近あったTC39 Meetingsで8年を経てStage4にあがった
async await の議論が同時進行でそっちが優先
これがあることで勝ちがあるのか?
需要の可視化が困難だった
要約:Promise.tryはPromise不要なthen
仕様は7行でシンプル
C++ではなくJSで実装している
類似するライブラリ
Promise.try/Promise.attempt
p-try
Cancellation in Promise
2024ではAbortControllerでPromiseをキャンセルできるようになっている
互換性を保つ必要がある
JavaScriptを支えるエコシステム(漫才)
ECMAボーイ - JSConf JP 2024 - Google Slides
Storybook との上手な向き合い方を考える
Storybook との上手な向き合い方を考える - Speaker Deck
zero configはPoCのとき便利
Storybookはゼロコンフィグを謳ってる
目的を考えて天秤にする
恩恵を逆算する
Storybookを前提としたテストを考えるようになる
テストを分離して考えてみてはどうか?
composeStory
ステップバイステップで進めるYahoo!知恵袋のフロントエンドリアーキテクト
https://gyazo.com/a0221194ed19c3af259da4440e41d631
https://gyazo.com/73d75cf8cc9ab1f89908b0c49bf3c208
https://gyazo.com/468fc35f66e8721a1b9f89ad635bbf18
https://gyazo.com/c004608482771fa703a8fdcbac7076b0
https://gyazo.com/af0474df78a630c51797272150ce5c68
https://gyazo.com/a2204b186a4598baa7b872041ba879f3
https://gyazo.com/e1927ec351d4447b5c487afa754cf805
React への依存を最小にするフロントエンドの設計
React への依存を最小にするフロントエンド設計 - Speaker Deck
フレームワークの依存を最小にする話
Reactに限らない
依存が最小になっているとは何か?
Remixさまざまなランタイムでうごくものがある
どこで切り替えても動くようにする
Honoもさまざまなエッジ環境で動ける
remix-hono-adapterがNode.jsでも動くようになった
VanillaJSで書ける部分はどれだけあるか?という指標
なぜ依存を最小にするのか?
動機
エコシステムへの追従を減らしたい
e18e
一休レストランは2006から
プロダクトはフレームワークよりも長寿命
スマートフォンやChromeがない時代
jQuery 1.0が波及していった
近日くるメジャーバージョンアップ
React 19
React Router v7
Remix v3
フレームワークを切り替えたい
旧版はvue2/Nuxt2
依存しすぎたのでそのままもってこれなかった
Remixへの移行
2023/10App Routerでリリース
2023/12Remixへ切り替える
よりよい設計を考える
React初心者やらかしなコードが量産された
書き換えを決心する
依存関係を薄くする
見通しが悪くてコードの理解が大変
テストを書くのが大変
特にuseEffectが厄介だった
技術選定
依存しないライブラリ
SWR→TanStack Query
Recoil→Jotai
XState→自前実装
薄いフレームワーク
規約よりAPI
規約への依存は見えない
明示的なAPIは参照箇所を追える
規約自体がわるいことではない
Ruby on Railsは流行らない
標準APIを尊重
エスケープハッチの存在
レールを外すときにどうなるかを検討できる
設計
バックエンドの知見に倣う
依存を最小にする考え方
オブジェクト指向の流行
テスト駆動開発(TDD)
依存性逆転の法則
SOLID原則のD
腐敗防止層
一休レストランへの実践
hooksにできるかぎりロジックを書かない
コンポーネントは薄く書く
簡易的なDIコンテナをつくる
React CompilerとFine-Grained Reactivityと宣言的UIのこれから
React CompilerとFine Grained Reactivityと宣言的UIのこれから / The next chapter of declarative UI - Speaker Deck
https://gyazo.com/de285e2c48057fa7d57a7861a77a4428
Vapor Revolution: Unleashing Vue evolution and Potential with Vapor Mode
Vapor Revolution - Speaker Deck
Vue Vapor Mode
仮想DOMをやめてネイティブなDOM APIで操作する
生のDOM Nodeを表現する
ランタイム
仮想DOMより50%以上小さくなっている
Intermediate representation(IR)
コンパイラとトランスフォーム
ポテンシャル
電話を切らさない技術:電話自動応答サービスを支えるフロントエンド
電話を切らさない技術 電話自動応答サービスを支える フロントエンド - Speaker Deck
ブラウザ通話
Twilio
リアルアセットとWebのシームレスな活用のためのパスキー
東急株式会社URBAN HACKS
ログインのストレスを減らす取り組み
Q SKIP
https://www.q-skip.tokyu.co.jp/
ログインに手間取るボトルネックを探す
そもそもログイン作業
IDプロバイダにアクセス
ID/パスワード入力
2要素認証
144秒かかる
2要素認証でメールをまつ時間がもっとも長かった
やめることはできない
安全性を捨てることはできない
パスキーを導入する
あまり意識させない
利用者層としてWebに明るくない人がおおい
認知負荷が高いのではないか?
Conditional UI autocomplete
従来と違うものであることを強く意識させる
パスキーというワードを強く出す
こちらを採用することにする
GitHub - MasterKale/SimpleWebAuthn: WebAuthn, Simplified. A collection of TypeScript-first libraries for simpler WebAuthn integration. Supports modern browsers, Node, Deno, and more.
パスキーを使い始めるとログインの所要時間は短くなった
まだ使ってない人がいる
どう踏襲していったのか
パスキーログインはあきらかに違うものであることを提供する
登録したあとにパスキー導入を促す
うまくログインできなかった場合に問い合わせ対応でパスキー登録を促す
メールでパスキー宣伝する
開封率が高かった
小さい端末でもファーストビューで全部表示する(above the fold)
パスワードマネージャーを使っているかどうかで遷移先を変える
JavaScriptのモジュール解決の相互運用性
JavaScriptのモジュール解決の相互運用性 / JSConf JP 2024 - Interoperability of Module Resolutions in JavaScript - Speaker Deck
モジュール解決をしているのはどこでやっている?
どのランタイムで関わっているか?
CJS
require
Folders as modulesはレガシー挙動
ESM
モジュール解決の話は仕様ではしてない(ホスト依存)
拡張子はかならず書く
import d ,{ n1, n2 } from "./some/module/"
偽物のようなESM
ESMで動いてるけどCJSみたいな動き
@berlysia: 14時50分からの「JavaScriptのモジュール解決の相互運用性」の中でチラッと確認できるとうれしそうな表を先に出しておきます #jsconfjp #jsconfjp_b
https://pbs.twimg.com/media/GdC_8XXasAAOsvH.jpg
アプリケーション開発者はNative ESMだと良い
ExpoはFake
ライブラリはNative ESM一択
CJS配布は利用者を想定して考える程度
import m from "foo.ts"は有用?
Native ESMを書くならOK
--allowImportingTsExtensions
対応するファイルをJSで書き出さない場合有用
あとはバンドラ次第
import path aliasの設定はつらい
Subpath Importsのサポートは広がっている
Type-safe module mocking in Storybook
CJSを噛ませるのはNG
Modular Monolith Monorepo
Modular Monolith Monorepo ~シンプルさを保ちながらmonorepoのメリットを最大化する~ - Speaker Deck
徹底解剖!医療業務システムのReactコンポーネント設計
徹底解剖! 医療業務システムのReactコンポーネント設計 / Deep Dive into React Component Design for Medical Systems - Speaker Deck
啓蒙者の視点で振り返るウェブ
Web Audio API
Web2.0の時代
HTML5
イノベーションとして新しく機能を作りたい
啓蒙
国内の楽器メーカーを呼んでハッカソン
YAMAHA, Roland
オシロスコープ、木魚
https://www.youtube.com/watch?v=MocPwUT4UTk
https://www.g200kg.com/en/webknobman/gallery.php
Web ComponentsをKnobで再現したい
https://github.com/g200kg/webaudio-controls
Payment Request API
PCI-DSSの対応
これに対応していないサイトはクレジットカード支払いしてはいけない
iframeで穴を開けている
暗黒時代
会社都合でチームをシャッフルさせられて会社の意向についていけずに多くの人が辞めた
SmartLock Password
モバイルOSのはなし
機種変更したときにいちいちログインしなくても済むようにしたい
Credential Management API
Password Credential
Federated Credential
ブラウザベンダやTwitterなど大きい企業が導入に乗り気だった
しかし広まることはなかった
振り返りでアプリとブラウザとで特性が違うことに気付いた
Entry Points
App: トップページが起点
Web: 検索から枝葉のところからやってくる
Session duration
App: セッションが盗まれることはないのでログイン長い
Web: 色々と脆弱性が多いので短め
Passkeys
2要素認証などは安全性は高まるけど利便性は低くなる
安全でカンタンなもの→Passkeys