SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

フロントエンド開発における定番ライブラリ「React」の最新バージョン解説

React 19.2新機能ガイド──cacheSignalの導入とuseIdの改善点解説

フロントエンド開発における定番ライブラリ「React」の最新バージョン解説 第7回

useIdの接頭辞変更:アクセシビリティ向上のためのID生成フック

 React 19.2では、useIdによる生成IDのデフォルト接頭辞が従来の:r:(19.0.0)、«r»(19.1.0)から_r_に変更されました。

 useIdはコンポーネントごとに一意なIDを生成するためのフックです。従来、useIdで生成されるIDにはCSSセレクターとして無効な特殊文字が使われていましたが、View Transitionsをサポートするために、XML 1.0の名前として有効な形式に変更されたとのことです。

 以下のサンプルコードは、useIdを使って3つの段落要素にIDを割り当てた例です。

[リスト2]useIdの接頭辞変更の例 ※ファイル名:samples/02/src/index.jsx
// React のバージョンを切り替えるには package.jsonの react と react-dom バージョンを
// 19.0.0、19.1.0、19.2.0 に変更してから npm install を実行してください
import { useId } from 'react';

function MyComponent() {
  const id = useId();
  return <p id={id}>Test</p>;
}

function App() {
  return (
    <div>
      <MyComponent />
      <MyComponent />
      <MyComponent />
    </div>
  );
}

 実際に上記コードをReact 19.0.0、19.1.0、19.2.0で実行した場合の生成IDの違いを以下に示します。

[リスト3]useIdの接頭辞変更の生成ID例(DOM)
// React 19.0.0
<div><p id=":r0:">Test</p><p id=":r1:">Test</p><p id=":r2:">Test</p></div>
// React 19.1.0
<div><p id="«r0»">Test</p><p id="«r1»">Test</p><p id="«r2»">Test</p></div>
// React 19.2.0
<div><p id="_r_0_">Test</p><p id="_r_1_">Test</p><p id="_r_2_">Test</p></div>

 たしかにReact 19.2.0では、_r_という接頭辞が使われていることがわかります。

useIdのユースケース

 useIdはWebアクセシビリティ向上のため、id属性とARIA(Accessible Rich Internet Applications)属性で利用するIDを生成する目的で設計されています。useId自体はReact 18で導入されたもので目新しいものではありませんが、ここでどういったユースケースがあるのかを改めて確認しておきましょう。

 Reactの公式リファレンスのサンプルがシンプルでわかりやすいので、同じ例を紹介します。

[リスト4]useIdを使ったARIA属性へのid設定例 ※ファイル名:samples/03/src/index.jsx
import { useId } from 'react';

function PasswordField() {
  const id = useId();
  return (
    <>
      <label>
        Password:
        <input type="password" aria-describedby={id} />
      </label>
      <p id={id}>パスワードは18文字以上である必要があります。</p>
    </>
  );
}

export default function App() {
  return (
    <>
      <h2>Choose password</h2>
      <PasswordField />
      <h2>Confirm password</h2>
      <PasswordField />
    </>
  );
}

 上記のサンプルコードを実行するとレンダリングされたHTMLは以下のようになります。_r_0__r_1_というIDが生成されていることがわかります。

[リスト5]useIdを使ったID生成例
<div id="root">
  <h2>Choose password</h2><label>Password:<input aria-describedby="_r_0_" type="password"></label>
  <p id="_r_0_">パスワードは18文字以上である必要があります。</p>
  <h2>Confirm password</h2><label>Password:<input aria-describedby="_r_1_" type="password"></label>
  <p id="_r_1_">パスワードは18文字以上である必要があります。</p>
</div>

 Webアクセシビリティとは、すべてのユーザーがウェブコンテンツにアクセスできるようにするための設計や技術のことを指します。特に、視覚や聴覚に障害のあるユーザーが情報を得やすくするための工夫が求められます。ARIA属性は、スクリーンリーダーなどの支援技術がコンテンツの意味や構造を理解しやすくするために使用されます。

 idが必要となるARIA属性のうちよく使われるのは、aria-describedby属性でしょう。これは、ある要素が説明される別の要素を指定するために使われます。上記の例では、パスワード入力フィールドに関連する説明テキストを提供するために使用されています。

 そのほかにも、aria-labelledby属性(要素がラベル付けされる別の要素を指定)やaria-controls属性(要素が制御する別の要素を指定)などでもidが必要となります。

コンポーネント内の複数要素にIDを割り当てる場合

 コンポーネント内で複数の要素にIDを割り当てたい場合は、生成されたIDをプリフィックス(接頭辞)にして一意なIDを作成して使用します。

[リスト6]useIdを使ってコンポーネント内の複数要素にIDを割り当てる例
import { useId } from 'react';

function MyComponent() {
  const id = useId();
  return (
    <>
      <input id={`${id}-field1`}>Test</input>
      <input id={`${id}-field2`}>Test</input>
    </>
  );
}

function App() {
  return (
    <div>
      <MyComponent /> // id => _r_0_-field1, _r_0_-field2
      <MyComponent /> // id => _r_1_-field1, _r_1_-field2
    </div>
  );
}

useId利用時の注意点

 useIdで生成されるIDをリスト要素のkeyとして使用しないようにしてください。useIdで生成されるIDは一意ですが、リスト要素のkeyとして使用することは推奨されていません。

 これまでと同様、リストのkeyは必ずデータから一意な値を生成するようにしましょう。

React 19.2のその他の新機能や改善点

 これまでに紹介した機能に加えて、React 19.2では以下の新機能や改善点も導入されています。

  • Partial Pre-rendering(部分的な事前レンダリング):アプリの静的部分を事前にレンダリングしてCDNから提供し、その後残りのレンダリングを再開して動的コンテンツを埋め込むことができます。
  • Suspenseバッチング:従来、SSR(ストリーミングレンダリング)で複数のSuspense 境界が連続していた場合、それぞれが別々にレンダリング順序どおりに出されることがありましたが、これらをバッチ(一括)で表示する遅延制御が導入されました。
  • Web Streams対応:Node.jsでSSRをストリーミングするためのWeb Streamsのサポートが追加されました。

まとめと導入アドバイス

 React 19.2では、<Activity>useEffectEventなど、新しいコンポーネントやフックが導入され、さらにcacheSignaluseIdの改善など、細かな変更が行われました。これらの新機能を活用することで、パフォーマンスの向上やアクセシビリティの強化が期待できます。

 今回のマイナーバージョンアップでは破壊的な変更はありませんが、useIdの接頭辞変更など、既存コードに影響を与える可能性のある変更もあります。導入前には十分なテストを行い、互換性を確認することをお勧めします。

この記事は参考になりましたか?

フロントエンド開発における定番ライブラリ「React」の最新バージョン解説連載記事一覧

もっと読む

この記事の著者

WINGSプロジェクト 山田 研二(ヤマダ ケンジ)

株式会社MSEN CTO。高校卒業後、大阪大学の研究所で働きながらプログラミングやWebデザインをはじめ、以後20年以上、Webサイト制作や業務システムの構築を手がけています。フリーソフトもいくつか公開しています。好きな言語はC#とTypeScript、趣味は旅行です。 GitHub アカウントWINGSプロジェクトについて>有限会社 WINGSプロジェクトが運営する、テクニカル執筆コミュニティ(代表 山田祥寛)。個人紹介主にWeb開発分野の書籍/記事執筆、翻訳、講演等を幅広く手がける。2018年11月時点での登録メンバは55名で、現在も執筆メンバを募集中。興味のある方は、どしどし応募頂きたい。著者記事多数。 RSS X: @WingsPro_info(公式)、@WingsPro_info/wings(メンバーリスト) Facebook

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

山田 祥寛(ヤマダ ヨシヒロ)

静岡県榛原町生まれ。一橋大学経済学部卒業後、NECにてシステム企画業務に携わるが、2003年4月に念願かなってフリーライターに転身。Microsoft MVP for Visual Studio and Development Technologies。執筆コミュニティ「WINGSプロジェクト」代表。主な著書に「独習シリーズ(Java・C#・Python・PHP・Ruby・JSP&サーブレットなど)」「速習シリーズ(ASP.NET Core・Vue.js・React・TypeScript・ECMAScript、Laravelなど)」「改訂3版JavaScript本格入門」「これからはじめるReact実践入門」「はじめてのAndroidアプリ開発 Kotlin編 」他、著書多数

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

CodeZine(コードジン)
https://codezine.jp/article/detail/22848 2025/12/29 11:00

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング