SVGアクセシビリティ:ベクターグラフィックスをインクルーシブにする方法
すべての人に対応するアクセシブルなSVGグラフィックスを作成しましょう。ARIA、スクリーンリーダー、フォーカス管理、インクルーシブデザインの完全ガイド。

Founder of VectoSolve
Self-taught developer, founder and sole developer of VectoSolve since 2024. He builds the conversion engine and the cutting, embroidery and 3D printing exports.
How this article was made: drafted with AI assistance, then edited and fact-checked before publication. About the author
Key Takeaways
- 世界で10億人以上が支援技術に依存しています — アクセシブルなSVGは倫理的にも法的にも必須です
-
デコラティブなSVGには
aria-hidden="true"を、情報伝達用にはrole="img"と<title>/<desc>を使用 - WCAG 2.1はグラフィックスとUIコンポーネントに3:1、SVG内のテキストに4.5:1のコントラストを要求
-
prefers-reduced-motionを常に尊重し、要求するユーザーのSVGアニメーションを無効化 - 実際のスクリーンリーダー(NVDA、VoiceOver、TalkBack)でテスト — 自動化ツールはアクセシビリティ問題の約30%しか検出できません
SVGアクセシビリティが重要な理由
世界で10億人以上が障害を持って生活しています。SVGグラフィックスをアクセシブルにすることで、誰もがコンテンツを理解し操作できることを保証します。多くの場合、法的要件でもあります。
アクセシビリティの基礎
支援技術の理解
人々がSVGにアクセスする方法:
- スクリーンリーダー(NVDA、JAWS、VoiceOver)
- キーボードナビゲーション
- スイッチデバイス
- 画面拡大鏡
- 音声コントロール
画像に関するWCAGガイドライン
主要要件:
WCAG 2.1 要件:
- 非テキストコンテンツには代替が必要
- 色だけで情報を伝えない
- 十分なカラーコントラスト
- 劣化なしでリサイズ可能
- フォーカス可能な要素はキーボードでアクセス可能
SVGアクセシビリティパターン
デコラティブSVG
純粋にビジュアルな要素の場合:
<svg aria-hidden="true" focusable="false">
<!-- デコラティブグラフィック -->
</svg>
使用場面:
- 背景パターン
- ビジュアルの装飾
- テキスト付きの冗長なアイコン
- 純粋に美的な要素
情報伝達SVG
意味のあるグラフィックスの場合:
<svg role="img" aria-labelledby="chart-title">
<title id="chart-title">売上成長 2025</title>
<!-- チャートコンテンツ -->
</svg>
使用場面:
- チャートとグラフ
- 図表
- インフォグラフィック
- 独立したアイコン
複雑なSVG
詳細情報の場合:
<svg role="img" aria-labelledby="title desc">
<title id="title">組織図</title>
<desc id="desc">
CEOを頂点とした階層構造、
3人のVPが報告、それぞれにチーム。
</desc>
<!-- 複雑な図表 -->
</svg>
Pro Tip: 複雑なデータビジュアライゼーション(チャート、マップ)には、SVGと並んで常に非表示の<table>代替を提供してください。スクリーンリーダーはSVGパスデータよりもテーブルをはるかに効果的に解析します。
A Full Year of Conversions for $49
Starter Annual: 25 conversions every month, $49 for the whole year. That is about $4.08 a month · Cancel anytime
Get the Annual DealSVG用ARIA属性
必須属性
<!-- ロール定義 -->
role="img" <!-- 静的画像 -->
role="graphics-document" <!-- 複雑なインタラクティブ -->
<!-- ラベル -->
aria-label="..." <!-- シンプルな説明 -->
aria-labelledby="..." <!-- タイトル要素への参照 -->
aria-describedby="..." <!-- 詳細な説明 -->
<!-- 状態 -->
aria-hidden="true" <!-- ATから非表示 -->
focusable="false" <!-- フォーカスを防止 -->
TitleとDesc要素
ネイティブSVGアクセシビリティ:
<svg role="img" aria-labelledby="icon-title icon-desc">
<title id="icon-title">警告</title>
<desc id="icon-desc">
注意を示す感嘆符付きの黄色い三角形
</desc>
<path d="..."/>
</svg>
「アクセシビリティは最後に追加する機能ではありません — すべてを良くするデザインの制約です。アクセシブルなSVGは、よく構造化されたSVGです。」- Leonie Watson、アクセシビリティエンジニア & W3Cアドバイザリーボード
インタラクティブSVGのアクセシビリティ
フォーカス可能な要素
インタラクティブな部分をアクセシブルに:
<svg>
<a href="/section-1" tabindex="0">
<rect x="0" y="0" width="100" height="50"/>
<text>セクション1</text>
</a>
</svg>
フォーカスインジケーター
可視フォーカス状態:
svg a:focus,
svg [tabindex]:focus {
outline: 2px solid #0066cc;
outline-offset: 2px;
}
キーボードナビゲーション
キーボードアクセスを確保:
svgElement.addEventListener('keydown', (e) => {
if (e.key === 'Enter' || e.key === ' ') {
// 要素をアクティブ化
}
});
カラーアクセシビリティ
コントラスト要件
WCAGコントラスト比:
最低要件:
テキスト: 4.5:1(通常)、3:1(大きい)
グラフィックス: 背景に対して3:1
UIコンポーネント: 3:1
コントラストのテスト
検証ツール:
- ブラウザDevTools
- コントラストチェッカー
- アクセシビリティ監査
色に依存しない
色だけに頼らない:
<!-- 悪い例:色のみ -->
<circle fill="red"/> <!-- エラー -->
<circle fill="green"/> <!-- 成功 -->
<!-- 良い例:パターン + 色 -->
<circle fill="red">
<title>エラー</title>
</circle>
<use href="#checkmark" fill="green">
<title>成功</title>
</use>
Free SVG Tools for Crafters
Design Checker · Color Separator · Mat Preview · Offset Generator · Text to SVG
Check Your SVG Freeアイコンのアクセシビリティ
アイコンボタン
<button aria-label="ダイアログを閉じる">
<svg aria-hidden="true" focusable="false">
<path d="..."/>
</svg>
</button>
テキスト付きアイコン
<button>
<svg aria-hidden="true"><!-- アイコン --></svg>
ドキュメントを保存
</button>
独立したアイコン
<svg role="img" aria-label="通知:未読メッセージ3件">
<circle cx="12" cy="12" r="10" fill="#ff0000"/>
<text x="12" y="16" text-anchor="middle">3</text>
</svg>
アニメーションのアクセシビリティ
ユーザー設定の尊重
@media (prefers-reduced-motion: reduce) {
svg * {
animation: none !important;
transition: none !important;
}
}
一時停止コントロール
<button id="toggle-animation">
アニメーションを一時停止
</button>
<svg class="animated-svg">
<!-- アニメーションコンテンツ -->
</svg>
WCAG 2.1成功基準2.3.1は、1秒間に3回以上点滅するものがないことを要求しています。SVGアニメーションに急速な色変化やストロボ効果が含まれる場合、一時停止コントロールを提供し、prefers-reduced-motionを尊重してください。
SVGアクセシビリティのテスト
手動テスト
チェックリスト:
- キーボードのみでナビゲート
- スクリーンリーダーでテスト
- 200%ズームで確認
- カラーコントラストを検証
- ユーザーと一緒にテスト
自動テスト
ツール:
- axe DevTools
- WAVE
- Lighthouse
- Pa11y
スクリーンリーダーテスト
テスト対象:
- NVDA(Windows、無料)
- VoiceOver(Mac/iOS、内蔵)
- TalkBack(Android、内蔵)
- JAWS(Windows、商用)
A Full Year of Conversions for $49
Starter Annual: 25 conversions every month, $49 for the whole year. That is about $4.08 a month · Cancel anytime
Get the Annual Deal一般的なパターンリファレンス
ロゴ
<a href="/">
<svg role="img" aria-label="会社名 - ホーム">
<title>会社ロゴ</title>
<!-- ロゴパス -->
</svg>
</a>
データビジュアライゼーション
<svg role="img" aria-labelledby="chart-title">
<title id="chart-title">月別売上 2025</title>
<desc>1月の¥150万から12月の¥675万への
売上増加を示す棒グラフ</desc>
<!-- 代替テーブルを提供 -->
</svg>
<table class="sr-only">
<!-- アクセシブルなデータテーブル -->
</table>
アイコンシステム
<svg class="icon" aria-hidden="true" focusable="false">
<use href="#icon-search"/>
</svg>
<span class="icon-label">検索</span>
VectoSolveとアクセシビリティ
アクセシビリティのためのクリーンな出力
VectoSolveはクリーンなSVGを生成します:
- アクセシビリティ属性の追加が容易
- 修正に適した構造
- アクセシブルな実装に対応
変換後のアクセシビリティ
ベクタライズ後:
- 適切なロールを追加
- title/desc要素を含める
- ARIA属性を設定
- 支援技術でテスト
まとめ
アクセシブルなSVGはすべての人に恩恵をもたらします — よりセマンティックで、構造化され、メンテナンスしやすくなります。これらのパターンに従い定期的にテストすることで、ベクターグラフィックスが真にインクルーシブであることを保証できます。
| WCAG要件 | SVG実装 | 影響 |
|---|---|---|
| テキスト代替(1.1.1) | <title>と<desc>要素 | スクリーンリーダーが画像の目的を読み上げ |
| カラーコントラスト(1.4.11) | UIグラフィックスに最低3:1 | ロービジョンユーザーに見える |
| キーボードアクセス(2.1.1) | focusable=true + tabindex | インタラクティブSVGがキーボードで到達可能 |
| 動きの軽減(2.3.3) | prefers-reduced-motionメディアクエリ | 前庭障害のためにアニメーションを停止 |
Free SVG Tools for Crafters
Design Checker · Color Separator · Mat Preview · Offset Generator · Text to SVG
Check Your SVG Free出典と参考文献
- MDN Web Docs: SVGアクセシビリティ — SVGにおけるARIAロール、タイトル、説明の包括的リファレンス
- W3C SVG 2仕様 — SVG要素と属性の公式アクセシビリティ要件
- web.dev: アクセシビリティ — インクルーシブでパフォーマントなWeb体験を構築するためのGoogleガイド
- Smashing Magazine: アクセシブルSVG — SVGアイコンとイラストをスクリーンリーダー対応にする実践チュートリアル