リファレンス・ターゲット:あなた自身で包み込んだものを食べること。

2026/01/31 14:32

リファレンス・ターゲット:あなた自身で包み込んだものを食べること。

RSS: https://news.ycombinator.com/rss

要約▶

Japanese Translation:

概要:
Reference Target は ShadowRoot オブジェクトに新しく追加されたプロパティで、ホスト要素が属性ベースの参照(例:

for
、
commandForElement
)に対して内部要素を指し示すことを可能にします。
<template shadowRootReferenceTarget="…">
を使って宣言的に設定するか、
shadowRoot.referenceTarget = 'inner-input'
で命令的に設定できます。この仕組みはクロスシャドウ参照を再帰的に解決し、以前の提案が必要とした属性ごとの転送を排除します。
この機能は、隠れた入力要素へのラベル付け、ポップオーバーターゲットの設定、ARIA 属性の適用、およびシャドウツリー内でフォームを関連付けるなどの一般的な問題に対処します。また、仕様には新しい「element reference」属性タイプが導入されます。
解決済み対象と未解決対象:解決済み対象は実行時効果(例:ポップオーバーのトリガ)に使用され、未解決対象は開発者に実装詳細を露出します。
実装状況:Chromium は
Experimental Web Platform Features
フラグ後ろで完全実装しています。WebKit と Firefox はそれぞれ機能フラグ(
ShadowRootReferenceTargetEnabled
、
dom.shadowdom.referenceTarget.enabled
)の背後にプロトタイプ実装を提供しています。
残された課題は、任意のクロスシャドウ参照(例:
aria-activedescendant
、
aria-labelledby
)とアクセシビリティツールが更新されたツリーと同期し続けることです。これらの API の WPT サポートを通じてアクセシビリティテストが拡張されています。
資金は NLNet Foundation(WebKit/Firefox)および Microsoft エンジニア(Chromium/Edge)から提供されます。

この改訂された概要では、解決済み/未解決対象の区別を追加しつつ、他の主要ポイントはすべて維持しています。

本文

2026年1月30日
shadowdom html accessibility aria

3年前、私は 「Shadow DOM とアクセシビリティが衝突する理由」 というブログ記事を書きました。そこで、シャドウルートによって提供されるカプセル化は、特にアクセシビリティの観点から両刃の剣であると説明しました。ある要素から別の要素へプログラム的に関係を表現できることは、視覚的ヒントに頼らないユーザー体験を構築する上で不可欠です。しかし、シャドウルート内の要素はライトDOM の要素から参照できません。このカプセル化こそが、コンポーネント作成者が依存関係や追加ビルド手順なしに、安全に再利用可能なアクセシブルなコンポーネントを構築できる理由でもあります。

その後数年でさらに英雄的な試みが続きました。最終的に残りそうなのは Reference Target です。本稿ではこの機能の仕組み、私が好きな点、現在の仕様・実装状況(Igalia の NLNet 資金援助のおかげ)について解説します。


簡単な紹介

referenceTarget
はシャドウルートオブジェクトに新たに追加されたプロパティで、シャドウホストへの属性ベースの参照先として、シャドウルート内のサブツリーにある要素を指名できます。

例 –

<custom-input>
コンポーネントがそのシャドウルートに隠れた
<input>
を持っているケース。
このパターンはカスタムエレメントライブラリで広く使われ、組み込み要素の振る舞いをコンポジションで拡張できるためです。

<label for="track">Track name:</label>
<custom-input id="track">
  <!-- #shadowRoot -->
  <input id="inner-input">
</custom-input>

シャドウルートの

referenceTarget
を設定すると、
<label>
が内部
<input>
を正しくラベル付けできるようになります。

// custom-input のコンストラクタ内:
const shadowRoot = this.attachShadow({mode: 'open'});
shadowRoot.referenceTarget = 'inner-input';
shadowRoot.innerHTML = '<input id="inner-input">';

これにより、

<label>
は
<custom‑input>
を
<input>
と同様に参照できるようになり、
<custom‑input>
が内部の
<input>
へ参照を透過的にプロキシします。

referenceTarget
は
<template>
要素でシャドウルートを作成する際にも宣言的に設定できます。

<label for="track">Track name:</label>
<custom-input id="track">
  <template shadowRootMode="open"
            shadowRootReferenceTarget="inner-input">
    <input id="inner-input">
  </template>
</custom-input>

これは、属性が他の要素を参照する場合(例:

commandForElement
のように反射プロパティで設定したとき)にも同様に機能します。

<button id="settings-trigger">Site settings</button>

<custom-dialog id="settings-dialog">
  <!-- #shadowRoot referenceTarget="inner-dialog" -->
  <dialog id="inner-dialog">
    <button id="close"
            aria-label="close"
            commandFor="inner-dialog"
            command="request-close"></button>
    <slot></slot>
  </dialog>

  <fieldset>
    <legend>Colour scheme:</legend>
    <label for="dark">
      <input type="radio" id="dark" name="appearance"
             value="dark" checked>
      Dark
    </label>
    <!-- TODO: more colour schemes -->
  </fieldset>
</custom-dialog>

<script>
const settingsButton = document.getElementById('settings-trigger');
settingsButton.command = 'show-modal';
settingsButton.commandForElement =
  document.getElementById('settings-dialog');
</script>

これにより、

<custom‑dialog>
は
command
と
commandForElement
プロパティの目的で
<dialog>
と同一視されます。


私が好きな理由

前回の記事では「Cross-root ARIA デリゲーション」と「反射」の提案について懸念を示しました。これらは属性ごとに参照できる要素を1つに限定するボトルネック問題を生み出します。問題自体を解決しませんが、重要性を相対的に低減させます。

referenceTarget
の大きな違いは、シャドウホストへの参照を一括で処理できる点です。各属性ごとに転送する必要はありません。この機能は「組み込み HTML 要素の振る舞いをカスタム要素がカプセル化しつつ、他の要素からそのカスタム要素を組み込み要素として参照できる」という特定の問題を解決します。

この狭義の問題設定は、シャドウルート内へクロスする参照が必要なケース(全てではないものの、多く)に適用できます。API はより直感的になります:

for
属性で
<custom-input>
を指定するとき、実際には内部の
<input>
を指していることを意識する必要はありません。シャドウルートはホストを一つしか持たないため、
referenceTarget
も1つだけに制限されます。


隣接する未解決課題

任意のクロス-シャドウ参照

属性がシャドウルート内の特定要素(例:combobox の

aria-activedescendant
、
aria-labelledby
など)を指す必要があります。これは
referenceTarget
が扱う単一要素ケースより複雑です。問題を一般化する際には注意が必要で、具体的なユースケースから解決策が見えてくるかもしれません。他の例があれば issue にコメントしてください。

属性転送

カスタムエレメント作成者は、ホスト要素に標準 HTML / ARIA 属性を適用し、それが内部要素へ影響するようにしたい場合があります。例えば:

<custom-button popoverTarget="languages">Language</custom-button>
<custom-menu id="languages" popover>
  <custom-menuitem>Nederlands</custom-menuitem>
  <custom-menuitem>Fryslân</custom-menuitem>
  <custom-menuitem>Vlaams</custom-menuitem>
</custom-menu>

属性転送のアイデアについては issue が存在します。追求したい場合はコメントしてください。

フォーム関連付け

カスタム要素はフォームに関連付けできますが、内部にあるフォーム関連付け済み組み込み要素(例:

<input>
)を外部
<form>
と結びつける手段はありません。上記の
<custom-input>
を
<form>
内に入れた場合、内部
<input>
はそのフォームと紐づきません。
setFormValue()
で値をコピーする必要があります。


仕様・実装状況

簡潔に言えば:仕様変更は整備済みで、Chromium が最も機能完備な実装を持ち、WebKit / Firefox は追いついています。

仕様変更

HTML と DOM のプルリクエスト(まだレビュー中):

  • DOM – シャドウルートに「参照ターゲット」の概念と
    referenceTarget
    プロパティを追加。
  • HTML – 実際の効果を定義し、ID 参照を形式化する「要素参照」属性タイプを導入。

参照ターゲット解決手順

  1. 要素がシャドウホストでなく、またはシャドウルートの
    referenceTarget
    が null の場合、その要素自体を返す。
  2. referenceTargetValue
    をシャドウルートの
    referenceTarget
    の値とする。
  3. シャドウルート内で ID が一致する最初の要素(
    candidate
    )を探し、無ければ null を返す。
  4. candidate
    に対して再帰的に参照ターゲット解決を行い、その結果を返す。

ネストされたシャドウルートは自分自身の

referenceTarget
値を持ち、再帰的に探索されます。

無効な

referenceTarget
(空文字や ID 不一致)の場合、解決対象は null であり、ホスト要素ではありません。これが
popoverTarget
や
commandForElement
等の属性にも適用されます。

未解決 vs 解決された属性ターゲット

  • 未解決 – 属性が 主張 する参照先(IDL 対応で反映時に使用)。
  • 解決済み – 実際に振る舞いに使われる要素(例:ポップオーバーを開く、ラベル名を計算する)。

「参照している」

属性

attr
が要素
X
にある場合、その属性が指すのは解決済みターゲット要素
Y
です。


実装状況

  • Chromium – 最も完全な実装。最新仕様変更に若干遅れが出る可能性があります。「Experimental Web Platform Features」を有効化して試せます。
  • WebKit / Firefox – フィーチャーフラグ(
    ShadowRootReferenceTargetEnabled
    /
    dom.shadowdom.referenceTarget.enabled
    )後のプロトタイプ実装。既存 WPT テストはほぼ通過しますが、一部機能は未実装です。

アクセシビリティツリーへの影響(例:支援技術への通知)のテストには、より豊富なインフラが必要です。現在進行中のプロジェクト:

  1. ブラウザがアクセシビリティ API に何を公開しているか直接検証する WPT テスト作成。
  2. 「アクセス可能プロパティ」API の開発。

期待される挙動を完全にテストできるようになれば、参照ターゲットは正式な相互運用性の焦点領域となります。

資金提供:WebKit / Firefox のプロトタイプ作業と多くの仕様作業は NLNet Foundation からの助成で実施されました。Chromium の実装および追加仕様作業は、Microsoft エンジニア(Edge チーム)によって行われました。

同じ日のほかのニュース

一覧に戻る →

2026/02/02 5:01

**私の初めてのハードウェア製品を500台出荷して得た教訓**

## Japanese Translation: 著者は、明るい光を放つ高輝度ランプ「Brighter」を立ち上げた経験を語り、アイデアを大量生産製品に変える際の障壁を概説しています。ソフトウェア職を辞めた後、チームはクラウドファンディングで40万ドルを調達し、設計を39,000ルーメンから60,000ルーメンへと反復改良しました。早期のウェブサイト預金により需要が証明されました。生産は10月に開始され、毎日UPS配送が行われましたが、中国での製造ではヒートシンクピンのずれやPCBラベルの入れ替えなどの問題が発覚し、現地で修正を要しました。関税変更(「Liberation Day」)により輸入税率は50%から150%へと上昇し、利益率を圧迫し、コスト管理を厳格化せざるを得ませんでした。著者は今後もノブの間隔やワイヤ長、ネジサイズなどの品質調整を継続するとともに、定期的なサプライヤー訪問と徹底したテストを強調し、将来のリスクを軽減する計画です。これらの経験は、ハードウェアスタートアップがサプライチェーンの混乱、関税の変動、および詳細な計画をどのように乗り越えて収益性と製品信頼性を維持するかを示しています。

2026/02/04 4:37

宇宙でデータセンターを設置することは意味がありません。

## Japanese Translation: **概要** 宇宙ベースの AI インフラ―(SpaceX が最近取得した xAI など、Google、Lonestar、Axiom、Starcloud の類似プロジェクトを含む)については、打ち上げ価格が予測通り下落しても実用化や費用対効果を達成する可能性は低い。主張の根拠は硬直した技術的制限(放射線被害、冷却要件、遠距離での遅延)と GPU 必要数の膨大さにある:最先端 AI は何十万から数百万台の GPU を必要とし、xAI のプロトタイプ「Colossus」はすでに約 20 万台を搭載している。 そのようなハードウェアを支えるためには、新たな衛星編成が不可欠だ。既存の宇宙船は簡単にアップグレードまたは交換できないため、AI チップの各新世代ごとに完全に新しいコンステレーションが必要になる。この結果、現在約 15,000 台の衛星を大幅に上回る数が投入され、軌道混雑とケスラー・スペクトラムリスクが増大する。 Google の 2023 年研究では、打ち上げコストが 2035 年頃までに 200 米ドル/キログラムに下がる(Starship の成功に依存)場合にのみ競争力を持つ 81 台の衛星ネットワークが想定されている。これら最適的仮定でも、宇宙データセンターは安価な太陽光発電と急速に下落するハードウェア価格から恩恵を受ける地上ベースサーバーより遅れる。 投資家は、特に SpaceX の今年度 IPO 計画を踏まえ、ハイプサイクル中の転売利益を期待してこれらプロジェクトへの資金提供を継続する可能性がある。しかし、事業は相応の性能向上をもたらさずに資本支出を膨張させ、デブリリスクを増大させ、より実現可能な地上ソリューションから資源を逸らすリスクを抱えている。広範囲にわたる影響は、テック企業、投資家、および宇宙/AI 業界全体に及ぶでしょう。

2026/02/02 2:25

**Show HN:** *Craftplan ― 私は妻のベーカリー向けに製造管理ツールを作りました*

## Japanese Translation: (すべての主要ポイントを反映し、推論は追加せず) Craftplan は、小規模な職人製造業やクラフトビジネス向けに構築された無料でオープンソースの ERP プラットフォームです。コア機能は以下のとおりです: 1. **カタログ管理** – 写真付きの商品リストとラベル 2. **BOM(部品表)** – バージョン管理された BOM が自動的にコストを集計し、労務ステップを追跡 3. **受注処理** – カレンダー方式のスケジューリング、請求書生成、生産バッチへの割り当て 4. **生産** – バッチング、材料消費自動化、バッチごとのコストサマリー、および生産完了時に数量を記録するワークフロー 5. **在庫管理** – 原料ロットトレーサビリティ;在庫移動(消費・受入・調整);アレルゲン/栄養成分追跡;需要予測;再発注計画 6. **購買** – 発注書、仕入先管理、ロット作成を伴う在庫受け取り 7. **CRM** – 顧客・仕入先データ保存、注文履歴、統計情報 8. **インポート/エクスポート** – 商品、材料、顧客の CSV インポート;CSV エクスポート対応 9. **メール連携** – SMTP、SendGrid、Mailgun、Postmark、Brevo、Amazon SES を使用したトランザクションメール配信(暗号化された API キー) 10. **カレンダー フィード** – 注文納品と生産バッチスケジュールを含む iCal (.ics) URL。設定で生成・取り消しが可能 11. **プログラム的アクセス** – JSON:API と GraphQL エンドポイントは暗号化された API キーで認証され、CORS 設定は可変 12. **アクセス制御** – 役割ベースの権限(管理者・スタッフ)とすべてのリソースに対するポリシーベース認可 これら全機能は、特に食品関連製造業で詳細な商品一覧、バージョン管理された BOM、アレルゲン追跡、およびリーン生産計画用の自動コスト算出が必要とされるクラフト企業の独自ニーズを満たすよう設計されています

リファレンス・ターゲット:あなた自身で包み込んだものを食べること。 | そっか~ニュース