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

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

Sponsored · Ship Features Fearlessly Turn features on and off without deploys. Used by thousands of Ruby developers.
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