PlantUMLで日本語が豆腐になった(解決ずみ)
結論
UMLファイルに以下の設定を追加したら日本語が表示されるようになった
code:plantuml
skinparam {
defaultFontName Noto Sans CJK JP Black
}
調査の過程
Ubuntu環境でPlantUMLでシーケンス図を作成しようとしたら日本語使が豆腐になった。
Windows環境で使ったときには発生してなかったのになんで?
https://gyazo.com/1fd3910e0d07f577bd9f1d873a924b89
図1 文字化けした例
適当に「PlantUML 文字化け」「PlantUML 豆腐」ググったところ、文字コードかフォントが関連してそう
試しに -charset UTF-8オプションを入れて実行してみるも変わらず。
そもそもフォントが入ってなくて文字化けしているのでは?と思い、Ubuntuに入っているフォントを調べてみた。
code:bash
$ fc-list | grep -i "ubuntu mono"
/usr/share/fonts/truetype/ubuntu/UbuntuMono-RI.ttf: Ubuntu Mono:style=Italic
/usr/share/fonts/truetype/ubuntu/UbuntuMono-B.ttf: Ubuntu Mono:style=Bold
/usr/share/fonts/truetype/ubuntu/UbuntuMono-BI.ttf: Ubuntu Mono:style=Bold Italic
/usr/share/fonts/truetype/ubuntu/UbuntuMono-R.ttf: Ubuntu Mono:style=Regular
とりあえず上記のUbuntu MonoをPlantUMLに書き足したが、ダメ。
設計をするときに愛用しているツールなだけになんとしても使える方法を見つけたいのでもうしばらく調べた。
この記事でplantumlで使えるフォントがわかるオプションの存在を知った。
plantuml -printfonts
ここにも Ubuntu Mono というフォントの記載があったんでそれを試してみたがダメ。
そもそもUbuntu Monoに日本語フォントが含まれるのか?と思ったのでその観点でも調べたらやはりそうだった。どうも日本語フォントみたいなUbuntu Monoに含まれないフォントが指定された場合は別のフォントが使用されるようで、その一つのデフォルトフォントが「Noto Sans CJK JP」らしい。
なので、Ubuntu Monoではなく前述のSansフォントを指定するようにUMLファイルを修正して、以下の通りコードを書いたら豆腐になる現象を解消できた。
code:plantuml
@startuml
skinparam {
defaultFontName Noto Sans CJK JP Black
}
title Webページ表示までの処理の流れ
actor user
user -> web_server : URLアクセス
@enduml
https://gyazo.com/2269d693f6cd258da3baec56ec5949cf
フォントがダサイが、フォントが豆腐になることの原因切り分けができた。
defaultFontName Noto Sans CJK JP Regularに変更したら下記のようになった。だいぶマシになったのでこれでよしとする。
https://gyazo.com/a4c2ff9b62c39191b7a8a12f84b5c673