Upgrade to Pro — share decks privately, control downloads, hide ads and more …

作って学ぶ、 JSX (TSX) ランタイムの基本

Avatar for syumai syumai
June 06, 2026

作って学ぶ、 JSX (TSX) ランタイムの基本

フロントエンド・PHPカンファレンス 北海道 2026の発表資料です
https://fortee.jp/frontend-phpcon-do-2026/proposal/9702d654-e233-4608-bffb-0fa04cff75c1

Avatar for syumai

syumai

June 06, 2026

More Decks by syumai

Other Decks in Programming

Transcript

  1. syumai X: @__syumai Website: https://syum.ai © LayerX Inc. whoami LayerX

    ソフトウェアエンジニア バクラクヘルプデスク エージェントを開発中 Asakusa.go / ECMAScript 仕様輪読会 主催
  2. h関数に渡るもの © LayerX Inc. 名前 → "outer" 属性 → {

    attr1: "attribute 1" } 子要素 → h("inner", ...), h("inner", ...) 9
  3. JSXランタイムはどこで動く? © LayerX Inc. クライアントサイド (ブラウザ上) だけでなく、サーバーサイドで使うのも一般的 React Server Components、hono-jsx

    など SSG (静的サイト生成) のユースケースもある ejsなどのテンプレートエンジンを代替する用途だけでも十分便利 11
  4. h関数の名前の由来は? © LayerX Inc. Vue.jsのドキュメントによると hyperscript 同名の、ほぼ同じインターフェースのライブラリが2012年に開発されていた https://github.com/hyperhype/hyperscript/ Reactは h

    の名前を使っていない React 17以降は _jsxs および _jsx 、その前は React.createElement Preact、Vue.jsなどの他のJSXランタイムは h の名前を使っている 13
  5. h関数のTypeScript版 https://github.com/syumai/minimum-jsx/blob/main/basic/src/jsxRenderer.ts © LayerX Inc. JSX namespaceの IntrinsicElements には、組み込み要素 (小文字始まり)

    の名前、プロ パティの組を指定する 今回は、どんな名前の要素も通す設定にしている これが無いと、 <example>Hello!</example> などの式が型エラーになってしまう 30
  6. TypeScriptのドキュメント上の要素 (element) の分類 https://www.typescriptlang.org/docs/handbook/jsx.html © LayerX Inc. TypeScriptのドキュメントでは、以下のように要素の種類を分類している intrinsic elements

    組み込み要素 名前が小文字で始まる value-based elements JSXの式の書かれたスコープ内で参照可能な識別子で指定 名前が大文字で始まる 今回コンポーネントと呼んでいるのはこちら 41
  7. JSXの要素の型の制約 © LayerX Inc. string | number などと指定しても、使うコンポーネントの種類で型が決まらない JSXの式の評価結果が string

    の1種類に定まるようなケースではある程度有効かもしれ ない? しかし、ユーザー定義のコンポーネントがどう書かれるか制約できないので厳しい 52