Docker 環境で Alpine Linux の chromium を headless を使うとき、デフォルトでは日本語非対応の Open Sans
フォントが使われてしまうため、日本語が豆腐になります。そこで Noto Sans CJK JP フォントをインストールすることで、日本語が正しく表示されるようになります。
# Chromium
apk add chromium
# Noto Sans
curl -o /tmp/NotoSansCJKjp-hinted.zip https://noto-website-2.storage.googleapis.com/pkgs/NotoSansCJKjp-hinted.zip
unzip -o -d /usr/share/fonts/noto /tmp/NotoSansCJKjp-hinted.zip
# Noto Serif
curl -o /tmp/NotoSerifCJKjp-hinted.zip https://noto-website-2.storage.googleapis.com/pkgs/NotoSerifCJKjp-hinted.zip
unzip -o -d /usr/share/fonts/noto /tmp/NotoSerifCJKjp-hinted.zip
# デフォルトだと root 以外がフォントを読めない
chmod 644 /usr/share/fonts/noto/*.otf
# 後述の設定ファイル
cp local.conf /etc/fonts/local.conf
# キャッシュ更新
fc-cache -fv
# 確認
fc-match "sans-serif"
fc-match "serif"
設定ファイル local.conf
<?xml version="1.0"?>
<!DOCTYPE fontconfig SYSTEM "fonts.dtd">
<fontconfig>
<alias>
<family>serif</family>
<prefer>
<family>Noto Serif CJK JP</family>
</prefer>
</alias>
<alias>
<family>sans-serif</family>
<prefer>
<family>Noto Sans CJK JP</family>
</prefer>
</alias>
</fontconfig>
/etc/fonts/fonts.conf
→ /etc/fonts/conf.d/51-local.conf
→ /etc/fonts/local.conf
という経路で上記の XML ファイルが読み込まれるようだ。