# 読み方で意味が変わるのにふりがなのない漢字

Source: https://easeweb.dev/learn/kanji-readings
Topics: 言葉と読みやすさ > 読み方で意味が変わる言葉に読み方が示されている (WCAG 3.1.6)
The fix: 「生もの」や「なまもの」のように、読みが一つに決まる書き方にします。または、「生物（なまもの）」のように直後の括弧で読みを示すか、ruby、rt、rpで言葉の上にルビを振ります。読みは、スクリーンリーダーだけでなく、誰にでも見えるページ上に示します。
Test with: screen reader, screen off
References: https://www.w3.org/WAI/WCAG22/Understanding/pronunciation.html https://www.w3.org/WAI/WCAG22/Techniques/general/G120 https://www.w3.org/WAI/WCAG22/Techniques/general/G121 https://www.w3.org/WAI/WCAG22/Techniques/html/H62 https://html.spec.whatwg.org/multipage/text-level-semantics.html#the-ruby-element https://developer.mozilla.org/en-US/docs/Web/HTML/Reference/Elements/ruby https://github.com/w3c/html-aam/issues/352 https://www.w3.org/TR/wai-aria-1.2/#generic https://learningcrisis.net/?p=18747 https://kakuyomu.jp/works/16817330654610298993/episodes/16817330656684026924 https://kotobank.jp/word/%E7%94%9F%E7%89%A9-542934

よくある問題を再現した学習用のサンプルです。実在のクライアントの診断結果ではありません。コードは出発点となる実装例のため、実際の製品でも確認してください。ここでは支援技術でのテスト結果は報告していません。

## 場面

新鮮な魚介を冷蔵で届けるオンラインの鮮魚店で、購入手続きのページに配送についての短い案内が載っています。その中に「生物を含むご注文は、宅配ボックスにお届けできません。」という一文があります。魚は宅配ボックスに1日置かれると傷んでしまうため、店はこの「生物」を「なまもの」のつもりで書いています。

「生物」には、生き物を意味する「せいぶつ」という読みもあり、学校の教科の名前にもなっています。この文は、どちらの読みでも意味が通ります。生きた貝を売る店なら、生き物を宅配ボックスに入れないのも自然です。そう読んだ人は、刺身用のまぐろなら宅配ボックスでかまわないと判断します。どちらの言葉なのかは、ページのどこにも書かれていません。読み上げの音声エンジンは、自分でどちらかの読みを選び、聞く人には選ばれた読みしか届きません。

## 確認できる問題

達成基準3.1.6（発音）はレベルAAAです。文脈において、発音が分からないと単語の意味が不明瞭になる場合に、その発音を特定する手段を求めています。解説書では、日本語が主な例の一つです。漢字には読みが複数あるものがあり、読みの情報がなければスクリーンリーダーが読み間違えることがある、読み間違えれば内容が通じなくなる、と説明しています。また、文脈から読みが決まる場合は何も必要ないとしています。ほとんどの漢字は、こちらに当てはまります。「生物の授業」を「なまもののじゅぎょう」と読む人はいません。

この注意書きは、もう一方の場合です。「生物」とだけ書くと、辞書では「なまもの」と「せいぶつ」をはじめ、意味の違う複数の言葉に当たり、この文、この店では、なまものともせいぶつとも取れます。本文に読みがないため、読む人が探せる読みも、ソフトウェアが使える読みもありません。HTMLは書かれた文字をそのまま伝えるだけで、ただの段落にはどう読むかを示すものがありません。ブラウザーにも、スクリーンリーダーにも、読み上げ機能にも、届くのは「生物」という文字だけです。

## 利用者への影響

この注意書きは注文の届け先を左右するため、読み違えると、一瞬戸惑うだけでなく、届いた魚が傷むことになります。上手（じょうず、うわて、かみて）、最中（さいちゅう、もなか）、人気（にんき、ひとけ）のように、読みごとに別の言葉になる漢字では、文から読みが決まらない限り、どれも同じことが起きます。

## 自動チェックとAIの限界

マークアップには何の誤りもないため、自動チェックでは見つかりません。axeをはじめ、診断に使われるルールセットには3.1.6のルールがなく、EaseWebの診断にもまだこの確認はありません。コードレビューでも、HTMLの確認を頼まれたAIアシスタントでも、見えるのは見出しと段落だけです。ある言葉が2通りに読めるかどうかは、その一文の日本語の問題で、別の読み方ができないかを一語ずつ確かめる人が必要です。音声エンジンで聞いても決着はつきません。エンジンはどちらかの読みで「生物」をなめらかに読むため、選んだ読みが正しいかどうかは、店の意図を知っている人にしか分かりません。ページ全体にふりがなを付けるツールも、音声エンジンと同じように文字から読みを判断するため、こうした言葉に付く読みは確認が必要です。

## 修正前：読みのない漢字の言葉

```html
<h2>お届けについて</h2>
<p>
  生物を含むご注文は、宅配ボックスにお届けできません。
</p>
```

- 「生物」は「なまもの」（生鮮食品）とも「せいぶつ」（生き物）とも読め、どちらでも文の意味が通ります。
- ページのどこにも、読む人や音声エンジンに向けた読みがありません。

## 修正後：一通りにしか読めない書き方にする

```html
<h2>お届けについて</h2>
<p>
  生ものを含むご注文は、宅配ボックスにお届けできません。
</p>
```

1. 「生物」を、「物」をかなにした「生もの」に書き換えます。読みは「なまもの」の一つだけになり、どの読み手もどの音声エンジンも、店の意図した言葉で読みます。

これで修正前の例は直り、3.1.6を満たします。読みが一つになれば、不明瞭になるものが残らないからです。かなで「なまもの」と書いても同じです。ほかによく使われる書き方がある言葉ならどれにも使えますが、商品名や地名のように、書かれたとおりに残す必要がある言葉には使えません。

## 修正後：言葉の直後に括弧で読みを示す

```html
<h2>お届けについて</h2>
<p>
  生物（なまもの）を含むご注文は、宅配ボックスにお届けできません。
</p>
```

1. W3CのテクニックG120のとおり、言葉の直後に、全角の括弧に入れて読みをかなで書きます。文を読めば、誰にでもどの言葉なのかが分かります。
2. 少なくともページで最初に出てくる箇所に付け、カートや注文確認のように注意書きが単独で表示される場所にも付けます。

これで修正前の例は直り、3.1.6を満たします。読みが本文の一部になるため、どのブラウザー、スクリーンリーダー、読み上げ機能にも届き、文をコピーしても一緒に付いていきます。その代わり、スクリーンリーダーは言葉を2回読みます。W3Cの解説書にあるとおり、まず漢字がエンジンの選んだ読みで読まれ、そのあとで正しい読みのかなが読まれます。

## 修正後：言葉にルビを振る

```html
<h2>お届けについて</h2>
<p>
  <ruby>生物<rp>（</rp><rt>なまもの</rt><rp>）</rp></ruby>を含むご注文は、宅配ボックスにお届けできません。
</p>
```

1. W3CのテクニックH62のとおり、言葉を `ruby` で囲み、ベーステキストを先に、その読みを後ろの `rt` に入れます。ブラウザーは読みを小さく、言葉の上に描きます。
2. `rt` の前後に、全角の括弧を入れた `rp` を置きます。ルビに対応したブラウザーはこれを隠し、対応していないブラウザーは「生物（なまもの）」と表示します。
3. この例のように、`ruby` 要素全体を1行に書きます。中に改行があると、言葉の横にスペースとして描かれます。

これで修正前の例は直り、読みが見える人には3.1.6を満たします。文は店が書いたままの見た目で、読みが上に添えられます。ただし、音声で聞く人にはこれだけでは足りません。スクリーンリーダーがルビをどう扱うかはブラウザーとスクリーンリーダーによって異なり、Chromeでは、読みは行の一部ではなく、言葉の説明として渡されます。

## どの方法を選ぶか

3つとも基準を満たします。「生もの」や「なまもの」のように、一通りにしか読めない書き方がある言葉なら、それで書いてください。手間がかからず、どの読み手もどの音声も、正しい言葉を1回で読みます。書かれたとおりに残す必要がある言葉で、ページが音声で聞かれることを考えるなら、括弧で読みを示します。言葉が2回読まれても、読みは必ず読み上げられます。ページがすでにルビを使っている場合や、括弧では行が詰まって見える場合はルビを使います。ただし、読みが聞こえないことがある点は承知しておいてください。

## 実装の判断

ルビがスクリーンリーダーでどう読まれるかは、まだ定まっていません。HTMLの要素をアクセシビリティAPIに対応付ける仕様（html-aam）には、この扱いを定めるよう求めるissue #352が2021年に立てられ、今も未解決のままです。このissueによると、ブラウザーとスクリーンリーダーの組み合わせの多くはベーステキストとルビの両方を読み、Chromeは代わりに `rt` をベーステキストの説明として渡します。上の修正後の例をChromeのアクセシビリティツリーで見ると、確かにルビの項目のテキストは「生物」で、「なまもの」はその説明になっています。日本語での報告も同じように分かれています。漢字とふりがなが続けて読まれ、文が途切れてしまうという報告もあれば、1文字ずつ読まない限り漢字しか読まれないという報告もあります。ルビが聞こえることを当てにする前に、利用者が使うスクリーンリーダーで聞いて確かめてください。

読みをスクリーンリーダーだけに渡す方法は使いません。言葉を囲む `span` に `aria-label="なまもの"` を付けることは認められていません。`span` のロールはgenericで、ARIA 1.2はgenericに名前を付けることを禁止しているからです。視覚的に隠した読みは、画面を目で読む人には届きません。3.1.6が対象とする、読むことに困難のある人も、その中にいます。言葉に付けた `title` のツールチップは、タッチ画面では表示されず、確実に読まれるわけでもありません。

ルビには `ruby`、`rt`、`rp` だけを使います。W3CのH62の例には、ベーステキストを囲む `rb` がまだ載っていますが、HTML標準は `rb` と `rtc` を廃止された要素としており、ベーステキストは `ruby` の中に直接書きます。`rt` は初期状態で本文の半分の大きさで描かれ、16pxの本文なら読みは8pxです。それ以上小さくせず、利用者が使う拡大率で読めるか確認してください。

こうした言葉が多い長い文書なら、各言葉の読みを載せた用語集や、各言葉から読みへのリンク（G62、G121）でも基準を満たします。注意書きの中の一語なら、読みは、読まれる場所である言葉のすぐそばに置きます。

## 修正の確認

1. その言葉を知らない人のつもりで各ページを読む。読みごとに別の言葉になり、文からどちらか決まらない漢字の言葉を、すべて書き出す。
2. 書き出した言葉ごとに、画面上のすぐそばに括弧かルビで読みがあるか、一通りにしか読めない書き方になっていることを確認する。
3. それぞれの文を、利用者が使うブラウザーとスクリーンリーダーで、またスマートフォンやブラウザーの読み上げ機能で聞く。読みが1回読まれるか、2回読まれるか、読まれないかを記録する。
4. ページ全体にふりがなを付けるボタンがサイトにある場合は、オンにして、書き出した言葉に付く読みを確認する。

OS、ブラウザーと支援技術のバージョン、ビルド、実施日、各手順の実際の結果を記録してください。文面を変えた際は、再度確認します。

## 制限

このサンプルは、どのアプリケーションでも同じ結果になることを保証するものではありません。例は1つの注意書きの中の1語です。3.1.6はレベルAAAで、多くの方針が求めるAAを超える基準ですが、修正は数文字で済み、このような注意書きが意図どおりの意味を伝えるようになります。人名と地名も、よくある場面です。同じ修正が使えますが、名前はたいてい漢字のまま残す必要があり、人の名前の読みは推測せず、本人に尋ねるのが確実です。上手を「かみて」と読み、客席から見た舞台の右側を指す場合のように、読みだけでなく意味も必要なときは、「[意味の説明がない専門用語や見慣れない言葉](/ja/learn/jargon)」を参照してください。ほかの言語で書かれた一節は別の問題です。「[言語の指定がなく、誤った発音で読まれる別の言語の箇所](/ja/learn/language-of-parts)」を参照してください。音声エンジンやスクリーンリーダーはリリースごとに変わるため、ここでは特定の読み上げ結果を報告していません。

## スクリーンリーダーでの動き（EaseWebが実機で確認）

`<ruby>, <rt>`: ふりがななどの読みを言葉の上に添えます。どう読み上げるかはHTMLでは決まっておらず、ブラウザーとスクリーンリーダーに任されています。Chromeはrtを言葉の説明として渡します。

| スクリーンリーダー | ブラウザーとOS | 下矢印キー | 連続読み上げ |
| --- | --- | --- | --- |
| NVDA | Chrome, Windows 11 | 未確認 | 未確認 |
| JAWS | Chrome, Windows 11 | 未確認 | 未確認 |
| VoiceOver | Safari, iOS | 未確認 | 未確認 |
| TalkBack | Chrome, Android | 未確認 | 未確認 |

https://easeweb.dev/ja/learn/screen-reader-support

---

このガイドをコーディングエージェントで使う: MCP https://easeweb.dev/mcp（設定は https://easeweb.dev/ja/services/developers）
