golangでアクセシビリティをチェックする3

掲載日

はじめに

このサイトは記事作成時にアクセシビリティのチェックを行い、エラーが出たら修正するまで保存できないようにしています。
Golangでアクセシビリティのチェック用のAPIを作成したので、その際の備忘録その3です。

バックナンバー

文字を置換する

結構やってしまいがちなのですが、曜日を書く際に「([任意の曜日])」といった省略形式を使うのはアクセシビリティにはNGというほどではないですがあまりよろしくないとされています。

こういった表記は曜日と認識されないようで、例えば任意の曜日の中身に「水」を入れていた場合、「すい」ではなく「みず」のように読み上げられます。(実際、英語学習サイトなんかでは英語(日本語)みたいな表記することもあるでしょうから、スクリーンリーダーがそのまま読み上げるのは正しいと思います。)

よって、こういった表記がある場合自動で「(水曜日)」表記に直したいです。

また、常用漢字表に無いような漢字もかな表記に直したいです。
(「流石」「所謂」など、使用できるし読める方も多い漢字ですが、Web担当者Forumの記事にあるように適度にひらがな交じりの方が文章が読みやすいです。)

strings.Indexで検知してstrings.Replaceで置き換える

やることは簡単で、まずstrings.Index([検索対象の文章], [検索したい文字列])関数を使ってチェック対象を検知します。
この関数はマッチすればその単語があった文章の位置(インデックス)を返し、見つからなければ-1を返します。
-1でなければstrings.Replace([置換したい文章], [置換元文字列], [置換先文字列], [置換回数、-1で文中すべて])関数を使って文章を置き換えます。

実際のコードが以下になります。

package main

import (
	"fmt"
	"strings"
)

type ReplaceWord struct {
	From string
	To   string
}

func main() {
	replaceWords := []ReplaceWord{
		{
			From: "流石",
			To:   "さすが",
		},
		{
			From: "平仮名",
			To:   "ひらがな",
		},
	}
	originSentence := "流石という漢字は流石に有名だけど使うときは平仮名にする。"
	replaceSentence := originSentence

	for _, replaceWord := range replaceWords {
		index := strings.Index(originSentence, replaceWord.From)

		if index == -1 {
			continue
		}
		replaceSentence = strings.Replace(replaceSentence, replaceWord.From, replaceWord.To, -1)
	}
	fmt.Println(replaceSentence)
	// -> さすがという漢字はさすがに有名だけど使うときはひらがなにする。
}

実際の処理では、今回の記事のようにあえて常用じゃない漢字を本文中に記載したいケースを考慮して、各文字列に「チェック無し・警告・禁止」の三つのレベルを設けて処理を分けています。
(チェック無しはチェックしない。警告なら表示は出すが、保存することも可能。禁止なら保存禁止。警告画面の例が以下。)

文字列のアクセシビリティに問題があった際の警告画面のスクリーンショット。

おわりに

色々書きましたが、じゃあ実際の視覚障害のある方が本当に文字の表記で困ってるかというと、前後の文脈である程度推測できる場合も多いと思います。
(経験上、障害のある方はそれ故に前後の文脈からの推測力が高い方も多いとも感じます。)

とはいえ、こういった語句の置換のメリットは障害のある方以外にもあり、例えば曜日の省略表記は英語にすると、水曜日の省略形なら「(water)」のように翻訳するケースがあります。「(Wednesday)」とは翻訳してくれません。(Google翻訳で試したのみです。いい感じに訳してくれる翻訳サイトもあるかも。)
よって、外国の利用者がいるサイトなら翻訳時のメリットが産まれます。
また、単純にブログ内で表記がバラバラだと統一感やUXも損なわれるので、そこを自動で修正できるというメリットもあります。

アクセシビリティの話をするときはなるべく伝えるようにしているのですが、「アクセシビリティを意識した記事は、健常者にも読みやすい」です。
少数派だけに優しいわけではない施策なので、自動化できる範囲だけでも意識していくと意外なメリットがあるので是非記事の処理などに組み込んでみてください。

記事の作成者のA.W.のアイコン

この記事を書いた人

A.W.
茨城県在住Webエンジニアです。 PHPなどを業務で使用しています。 趣味ではGoやNuxt、Flutterをやってます。

Comment