
Async ReactのAction PropsでDesign Componentを構築… — 2026年 第9週 デザインシステム
今週のフィーチャー記事であるAurora ScharffのactionプロップについてのDeep Diveは、Async Reactにおける成熟しつつあるパターンを示しています。useTransitionとuseOptimisticを完全にカプセル化した再利用可能なTabListとEditableTextコンポーネントで、利用… 開発ですぐ活用できるよう整理しました。


aria-haspopupは思った通りに動かないかもしれない - Manuel Matuzovic
aria-haspopupの広範な誤用を指摘します。ARIA仕様ではポップアップコンテナにmenu、listbox、tree、grid、またはdialogのroleを明示する必要がありますが、多くのサブナビゲーションは通常のlist要素を使用しています。navigation(リンク集)とmenu(アクション項目)の区別は意味論的に重要です。この不一致によりJAWSは「Spaceを押してメニューを開き、矢印キーで移動」と案内しますが、listが適切なmenuウィジェットでないため矢印キーが機能しません。VoiceOver、NVDA、Narrator、TalkBackはそれぞれ異なる挙動を示し、ユーザーに一貫性のないアクセス体験を与えます。正しい修正はaria-haspopupを削除し、ボタンにaria-expandedをトグルすることです。
role=presentationはaria-hidden=trueの代替ではない - Manuel Matuzovic
aria-hidden="true"は要素とその全サブツリーをアクセシビリティツリーから完全に除去しますが、role="presentation"は要素のネイティブroleを取り除くだけで、子要素やテキストコンテンツは依然として公開されます。アクセシブルな名前を持たないSVGにrole="presentation"を適用するとVoiceOver、TalkBack、JAWS、NVDAは無視しますが、aria-labelを追加すると多くのスクリーンリーダーは読み上げてしまいます。SVGのテキストノードも例外なく読み上げられます。img要素には空のalt属性が唯一の確実な方法であり、それ以外ではaria-hidden="true"を使用する必要があります。figcaptionとalt textの比較
alt textとfigcaptionの役割を明確に区別します。alt textは画像を見られないユーザーのために画像の意味を代替するものであり、figcaptionは画像が周囲のコンテンツの中で果たす役割を説明するものです。単独のプロフィールページではaltだけで十分ですが、複数の人物が登場する長い記事では「Martin Underhill of tempertemper」のようなfigcaptionが周辺テキストの負担を軽減します。複数の画像を一つのキャプションでグループ化する方法、複数の課題にまたがって番号付きで参照するfigureの活用、そしてtitle要素で説明テキストを提供するインラインSVGの利用法も紹介されています。重要なルール: altとcaptionは決して同一にしてはならず、一方は画像を代替し、もう一方は画像に文脈を与えます。
WCAGルールをいくつか破ってみよう - Elise Kristiansen - NDC London 2026
flex-direction:row-reverseによるキーボードタブ順序の破壊、キーボードトラップ、時間制限、自動再生アニメーションなど、WCAG AおよびAAの基準をカテゴリー別に違反した後、ライブで修正して影響を説明します。主要な統計: 94.8%のウェブサイトが少なくとも1つのAA違反を持ち、79.8%はカラーコントラストが不十分です。実用的なツールとしてコマンドライン監査用のPa11yとパイプライン統合用のPa11y CIを推奨しています。トークはMats Steen(Ibelin)の物語でアクセシビリティ欠如の人的コストを示すことから始まり、div-with-onclickパターンの代わりに正しいセマンティックHTMLタグを使うよう呼びかけて締めくくられています。
IntercomのデザイナーとしてVibe Codingする方法

Async ReactのAction PropsでDesign Componentを構築 | Aurora Scharff
WCAGルールをいくつか破ってみよう - Elise Kristiansen - NDC London 2026
flex-direction:row-reverseによるキーボードタブ順序の破壊、キーボードトラップ、時間制限、自動再生アニメーションなど、WCAG AおよびAAの基準をカテゴリー別に違反した後、ライブで修正して影響を説明します。主要な統計: 94.8%のウェブサイトが少なくとも1つのAA違反を持ち、79.8%はカラーコントラストが不十分です。実用的なツールとしてコマンドライン監査用のPa11yとパイプライン統合用のPa11y CIを推奨しています。トークはMats Steen(Ibelin)の物語でアクセシビリティ欠如の人的コストを示すことから始まり、div-with-onclickパターンの代わりに正しいセマンティックHTMLタグを使うよう呼びかけて締めくくられています。IntercomのデザイナーとしてVibe Codingする方法
aria-haspopupは思った通りに動かないかもしれない - Manuel Matuzovic
aria-haspopupの広範な誤用を指摘します。ARIA仕様ではポップアップコンテナにmenu、listbox、tree、grid、またはdialogのroleを明示する必要がありますが、多くのサブナビゲーションは通常のlist要素を使用しています。navigation(リンク集)とmenu(アクション項目)の区別は意味論的に重要です。この不一致によりJAWSは「Spaceを押してメニューを開き、矢印キーで移動」と案内しますが、listが適切なmenuウィジェットでないため矢印キーが機能しません。VoiceOver、NVDA、Narrator、TalkBackはそれぞれ異なる挙動を示し、ユーザーに一貫性のないアクセス体験を与えます。正しい修正はaria-haspopupを削除し、ボタンにaria-expandedをトグルすることです。role=presentationはaria-hidden=trueの代替ではない - Manuel Matuzovic
aria-hidden="true"は要素とその全サブツリーをアクセシビリティツリーから完全に除去しますが、role="presentation"は要素のネイティブroleを取り除くだけで、子要素やテキストコンテンツは依然として公開されます。アクセシブルな名前を持たないSVGにrole="presentation"を適用するとVoiceOver、TalkBack、JAWS、NVDAは無視しますが、aria-labelを追加すると多くのスクリーンリーダーは読み上げてしまいます。SVGのテキストノードも例外なく読み上げられます。img要素には空のalt属性が唯一の確実な方法であり、それ以外ではaria-hidden="true"を使用する必要があります。figcaptionとalt textの比較
alt textとfigcaptionの役割を明確に区別します。alt textは画像を見られないユーザーのために画像の意味を代替するものであり、figcaptionは画像が周囲のコンテンツの中で果たす役割を説明するものです。単独のプロフィールページではaltだけで十分ですが、複数の人物が登場する長い記事では「Martin Underhill of tempertemper」のようなfigcaptionが周辺テキストの負担を軽減します。複数の画像を一つのキャプションでグループ化する方法、複数の課題にまたがって番号付きで参照するfigureの活用、そしてtitle要素で説明テキストを提供するインラインSVGの利用法も紹介されています。重要なルール: altとcaptionは決して同一にしてはならず、一方は画像を代替し、もう一方は画像に文脈を与えます。今週のフィーチャー記事であるAurora ScharffのactionプロップについてのDeep Diveは、Async Reactにおける成熟しつつあるパターンを示しています。useTransitionとuseOptimisticを完全にカプセル化した再利用可能なTabListとEditableTextコンポーネントで、利用側はvalueとcallbackを渡すだけで済みます。このパターンはoptimistic updateとロールバックロジックをコンポーネントの境界内に保持し、単なるスタイル付きプリミティブを超えて、本当にフレームワークを意識したデザインシステムへの重要な一歩です。
アクセシビリティが今週の残りのトピックを占めました。Manuel Matuzovicが#WebAccessibilityFailsシリーズに2つの精密な分析を寄稿しました。1つ目はナビゲーションサブメニューでのaria-haspopupの広範な誤用を取り上げ、解決策はaria-haspopupを完全に削除してaria-expandedに置き換えることです。2つ目はrole="presentation"が要素自身のroleのみを削除して子要素は残す一方、aria-hidden="true"はサブツリー全体を除去するという違いを明確にしています。Martin Underhillはalt text(画像の代替)とfigcaption(画像の文脈化)の明確な違いを説明する3つ目のアクセシビリティ記事を追加しました。
最後に、Elise KristiansenのNDC Londonのトークでは主要なWCAG AAの違反カテゴリーをすべてライブで実演し、94.8%のウェブサイトが少なくとも1つの違反を持ち、AIコード生成器が正しいセマンティックHTMLではなくdiv-with-onclickを好むことでさらに格差を広げていると指摘しました。IntercomのDomingoは、Figma Code Connectとカスタム Claude Skillsがデザインチーム全体のデザインからコードへのループをどのように閉じるかを詳しく説明しました。
- Async Reactのactionプロップパターンにより、デザインシステムコンポーネントがすべてのtransitionとoptimistic UIロジックを所有し、利用側にはvalueとcallbackのみを公開します。
- ナビゲーションサブメニューでのaria-haspopupの誤用はスクリーンリーダーを壊します — aria-expandedに置き換え、role="presentation"はアクセシビリティツリーから子コンテンツを除去しません。
- 94.8%のウェブサイトがWCAG AA違反を持ちAI生成コードがさらに悪化させています。IntercomのFigma Code Connectワークフローはデザインシステムでこの格差を縮める方法を示しています。