
Design System Workflowの運用・進化:Metric、Mistake、S… — 2026年 第27週 デザインシステム
今週はデザインシステムのガバナンスとアクセシビリティが中心的なテーマでした。ワークフローガイドではコントリビューション所要時間、コントリビューター数、チーム満足度(目標:5点中4点以上)、ドキュメント完成度(80〜95%)、意思決定スピード(初期フィードバック3日以内・最終決定2週間以内)、採用率という6つの測定可能な健全性指… 開発ですぐ活用できるよう整理しました。


AccessibilityがFeatureではなくOperational Capabilityである理由
aria-expanded欠如・キーボード操作未対応など10件のアクセシビリティ問題が見つかりました。2026年のWebAIM Millionスキャンでは、95.9%のページで検出可能なWCAG違反が残っており、1ページあたり平均56.1件のエラーがありました。本記事は、アクセシビリティを定期監査イベントとしてではなく、セキュリティや可観測性と同様の運用上の能力として扱うべきと主張しています。Radix UI・React Aria・Headless UIなどのアクセシブルなプリミティブの活用、CI/CDへのeslint-plugin-jsx-a11yとPa11yの統合、デザインハンドオフ時のフォーカス順序とARIAラベルの明示、Cursor rulesやCopilot instructionsによるセマンティックHTMLの強制が実践的な解決策として紹介されています。
ThemeとModeの分離がDesign Systemを変える理由
data-themeとdata-modeという2つの独立したHTML data属性を使用することです。それぞれ別のJavaScript関数で制御し、CSSカスタムプロパティが両方の値を参照します。これにより、特別なケース処理なしに自動で動作する組み合わせマトリクス(赤+ダーク、オレンジ+ライトなど)が実現します。デザインシステム規模では、モードレイヤーは共有の抽象化レイヤーとなり、メンテナーがライト/ダーク/高コントラストを一度定義するだけで全プロダクトが継承できます。
UX Designer向けModern Inclusive Design Guide

UX Activityの報告をやめBusiness Outcomeを報告しよう
Clickable Table Rowは悪いIdea
trにrole="button"を追加すると、VoiceOverとNVDAでその行がアクセシビリティツリーから完全に消えてしまいます。trをbutton要素に置き換えるとブラウザがテーブルの外に追い出してしまいます。tabindex="0"とJavaScriptのキーハンドラを追加するとキーボードユーザーには機能しますが、aria-labelはテーブル走査中ではなくTabキー移動時にしか読み上げられないため、スクリーンリーダーユーザーへのインタラクティブ性の伝達が困難です。正しい解決策はtdの中にネイティブのbuttonまたはanchorをネストすることです。ARIAロールの上書き、tabindex、追加のJavaScriptは不要です。展開/折りたたみ動作には、最初のセルにaria-expandedを持つbuttonを配置する方式が推奨されます。
Figma Shaderはクールだが問題がある

Design System Workflowの運用・進化:Metric、Mistake、Scaling
Figma Shaderはクールだが問題がある
AccessibilityがFeatureではなくOperational Capabilityである理由
aria-expanded欠如・キーボード操作未対応など10件のアクセシビリティ問題が見つかりました。2026年のWebAIM Millionスキャンでは、95.9%のページで検出可能なWCAG違反が残っており、1ページあたり平均56.1件のエラーがありました。本記事は、アクセシビリティを定期監査イベントとしてではなく、セキュリティや可観測性と同様の運用上の能力として扱うべきと主張しています。Radix UI・React Aria・Headless UIなどのアクセシブルなプリミティブの活用、CI/CDへのeslint-plugin-jsx-a11yとPa11yの統合、デザインハンドオフ時のフォーカス順序とARIAラベルの明示、Cursor rulesやCopilot instructionsによるセマンティックHTMLの強制が実践的な解決策として紹介されています。ThemeとModeの分離がDesign Systemを変える理由
data-themeとdata-modeという2つの独立したHTML data属性を使用することです。それぞれ別のJavaScript関数で制御し、CSSカスタムプロパティが両方の値を参照します。これにより、特別なケース処理なしに自動で動作する組み合わせマトリクス(赤+ダーク、オレンジ+ライトなど)が実現します。デザインシステム規模では、モードレイヤーは共有の抽象化レイヤーとなり、メンテナーがライト/ダーク/高コントラストを一度定義するだけで全プロダクトが継承できます。UX Designer向けModern Inclusive Design Guide
UX Activityの報告をやめBusiness Outcomeを報告しよう
Clickable Table Rowは悪いIdea
trにrole="button"を追加すると、VoiceOverとNVDAでその行がアクセシビリティツリーから完全に消えてしまいます。trをbutton要素に置き換えるとブラウザがテーブルの外に追い出してしまいます。tabindex="0"とJavaScriptのキーハンドラを追加するとキーボードユーザーには機能しますが、aria-labelはテーブル走査中ではなくTabキー移動時にしか読み上げられないため、スクリーンリーダーユーザーへのインタラクティブ性の伝達が困難です。正しい解決策はtdの中にネイティブのbuttonまたはanchorをネストすることです。ARIAロールの上書き、tabindex、追加のJavaScriptは不要です。展開/折りたたみ動作には、最初のセルにaria-expandedを持つbuttonを配置する方式が推奨されます。今週はデザインシステムのガバナンスとアクセシビリティが中心的なテーマでした。ワークフローガイドではコントリビューション所要時間、コントリビューター数、チーム満足度(目標:5点中4点以上)、ドキュメント完成度(80〜95%)、意思決定スピード(初期フィードバック3日以内・最終決定2週間以内)、採用率という6つの測定可能な健全性指標と7つの失敗パターンが整理されました。重要な原則は新しいプロセスを追加するとき古いプロセスを削除することです。コンパニオン記事では、ブランドカラーパレットを担うdata-themeとライト/ダーク/高コントラストを担うdata-modeを独立したHTML属性として構造的に分離し、特別なケース処理なしにすべてのプロダクトが組み合わせマトリクスを自動継承するアーキテクチャが主張されました。
アクセシビリティにも厳しい目が向けられました。Smashing Magazineの分析ではAI支援開発が29行のReact サイドバーコードに10件のWCAG違反を生成し、WebAIM Million 2026スキャンでは95.9%のページに1ページ平均56.1件のエラーが検出されました。記事はアクセシビリティを運用上の能力として扱い、CI/CDにeslint-plugin-jsx-a11yとPa11yを組み込み、Radix UIやReact AriaなどのアクセシブルなプリミティブをCursor rulesやCopilot instructionsでAIコード生成を制約することを推奨しています。深い技術分析では、クリック可能なテーブル行がアシスティブテクノロジーで普遍的に誤動作することが確認されました。trにrole="button"を適用するとVoiceOverとNVDAで行がアクセシビリティツリーから消え、唯一正しいパターンはtd内にネイティブのbuttonまたはanchorをネストすることです。
今週はUX戦略とツーリングの観点も注目されました。NNGの研究はUXチームがSUSスコアなどの活動指標ではなくコンバージョン・サポートコスト・リテンションといったビジネス成果を報告すべきと強調し、Figmaの動画ではデザインモードのAIエージェントがコミュニティシェーダーをブラウザコードにエクスポートできないこと、Figma MCPサーバーとOpus 4を組み合わせたClaude Codeが最も正確な実装を提供することが明らかになりました。
- data-theme(ブランドパレット)とdata-mode(ライト/ダーク/高コントラスト)を独立したHTML属性として分離することで、すべてのプロダクトが個別処理なしに組み合わせマトリクスを自動継承できます。
- AIが生成したUIコードはデフォルトでアクセシビリティを満たしません。WebAIM Million 2026では95.9%のページにWCAGエラーが確認されたため、CI/CDにeslint-plugin-jsx-a11yとPa11yを組み込み、Radix UIやReact Ariaプリミティブを使用してください。
- クリック可能なテーブル行は常にアクセシビリティ問題を引き起こします。trにrole="button"を追加するとVoiceOverとNVDAで行が消えるため、正しい解決策はtd内にネイティブのbuttonまたはanchorをネストすることです。