帰ってくるHTML Ruby(rb/rtc)要素

fantasaiのツイートをたまたま見かけて知ったわけだけど、ここに来てHTML/CSS Ruby方面が一気に加速していると。

CSS Rubyについては、2020年になって6年ぶりにドラフトが更新され、この3月にも更新がされた。CSSでは何がどうなった、というのはここでは触れない。Change logを追ってもらえればと。

で、HTMLはというと、CSS Rubyのドラフト更新と時を同じくして、Restore the rb and rtc elements and update ruby content model accordingly - whatwg/html#6478のPRが出ている。このPRによるビルドのコピーが読みやすいかなと。

PRの骨子としては、古いW3C HTML 5.1をインポートしつつ、本文と例をガラッと変えてセマンティクスをより良く説明するものにした、とのこと。まだ精読はしていないものの、確かにHTML5で見かけなかったものが見えている気がする。いつにマージされるかはわかんないけれども、めちゃくちゃ遠くはないんじゃないか、というのが個人的な展望。


で、ここまでは前振りというか、上記はまあどうとでもなると思っているので脇に置いて、じゃあWAI-ARIA、HTML-AAMはどうなるのよというのが自分の一番の関心事ではあり。ruby周りに関しては、HTML-AAM(ARIA in HTMLでもよい)を読んでもらえばわかるとおり、今のところデフォルトのロールはない。

w3c/aria#74では、

We don't have consensus on rp , rt and ruby

More details as to what these could map to would be helpful.

という具合に(2018年時点だけれども)、ARIA WGでのコンセンサスが取れていない。

Dupeなissueとしてw3c/aria#488があって、これは[Role Parity] HTML 5.1 Rubyというまさしくそれなissueがあるものの、w3c/aria#529とDupeでは?という話が持ち上がり、#529はaudio/video要素の話になっているんだけども、いやいやそうじゃないでしょう…。

とまあこんな調子なので果たしてARIA 1.3で本当に何か入るのか?というのが怪しいのだけれども、アクセシビリティの観点からはWCAG 2.0 Understanding SC 3.1.6 Pronunciation(日本語訳:達成基準 3.1.6 を理解する)にrubyはクリティカルに効いてくるものなので、WAI-ARIAとしていい感じにしておきたいというのはあるよねと。

ちなみに現時点でのrtの実装は、Firefox+NVDAで読んでくれるけども、Chrome+NVDAでは読んでくれない、といったところ。次の例なんかはルビを読んでくれるかどうかがわかりやすいと思う。

東南たつみの方角

<!-- 現在のHTML Standardの例を改変 -->
<ruby>東南<rt>たつみ</rt></ruby>の方角

WAI-ARIAの観点からはマッピングされたroleがないと始まらないわけで、その上で必要なaria-*プロパティを与えるのが筋になってくるかなと。プロパティについては例えば日本語に限って言えばrtrtcリテラルに「読み」そのものなのか、あるいは「説明」なのか「異なる読み」なのか…みたいなところを分類して、適切なセマンティクスを与えられるようにする…というところからかしら。

なんか名詞があるとして、例えばこんな感じで?(現時点でそんなrole値とかaria-*属性はなく、あくまでブレストレベルのものです。試しに書いてみたものの、もしかして熟語ルビなのかモノルビなのかなどのセマンティクスを与える方が先だったりして。)

<!-- PRのHTMLの例から -->
<ruby role="ruby">
  <rb role="rubybase"><rb role="rubybase"><rb role="rubybase"><rt role="rubytext">jiù<rt role="rubytext">jīn<rt role="rubytext">shān
  <rtc role="rubytextcontainer" aria-phoneme="translate" lang="en">San Francisco
</ruby>
<!-- 支援技術は文脈でわかるんだろうか -->
<ruby role="ruby">
  <rb role="rubybase">放出</rb>
  <rtc role="rubytextcontainer" aria-phoneme="literal" lang="ja-Hira">はなてん</rtc>
</ruby>
<!-- 現行HTML改 -->
<ruby role="ruby">
  <rb role="rubybase">境界面</rb>
  <rtc role="rubytextcontainer" aria-phoneme="description" lang="ja-Kata">インターフェース</rtc>
</ruby>

…いちいちaria-*プロパティとしていちいち属性値を当てていくの、文章の一部でちょこっとならいいけど、大量になるとオーサリングが面倒なことになるのはもはや宿命か。


話は変わって、個人的にはrtc要素で夢が広がっていくのでは?と思ってたり。前述したrtc要素の例(そのもの)をもう一度書くと、

<ruby>
  <rb><rb><rb><rt>jiù<rt>jīn<rt>shān
  <rtc>San Francisco
</ruby>

という具合に、rtcには別の言語を突っ込んでいるのだけれども、これが発音情報でもいいよね…?という発想はどうだろうと。

手の込んだ発音情報を盛るのであれば、Speech Synthesis Markup Language (SSML) Version 1.1(日本語訳:音声合成マークアップ言語(SSML)バージョン1.1)という合成音声のためのマークアップ言語があり、これをHTMLで借用できないかと。

3.1.10 phoneme要素あたりがたぶん求めているもの最も近しく、そのまま埋め込むのにカスタム要素として扱ってしまえば、構文としては何の問題もない。

<ruby>
  <rb>トマト</rb>
  <rtc>
    <ssml-phoneme alphabet="ipa" ph="t&#x259;mei&#x325;&#x27E;ou&#x325;">tomato</phoneme>
  </rtc>
</ruby>

…とここまで書いて、そういえばどこかで似たような話を見かけたなと思ったら、Two First Public Working Drafts for Pronunciationとかあったよね。あと、総務省の電子書籍アクセシビリティガイドラインが斜め上っぽいとかいうのも大昔に書いてたよね…?さっぱり忘れてた。

まあこれに関してはもっと込み入った実装がないとどうマークアップしようがどうしようもないけども。NVDA方面では@24motzさんのSSMLがまとまっているか。

ブラウザーネイティブだと、QiitaのWebページでブラウザの音声合成機能を使おう - Web Speech API Speech Synthesisとかが詳しいか。WICG/speech-api#37とかがそう?(どっちにせよなんもわからん)。

…まあ、SSML方面とかはどうなるのかまるでわかんないですけども、SSMLよりかはARIAマッピングむずかしくなさそうかなとか。

とりとめもないんですけどこのあたりで。