miauのブログ

はてなダイアリー「miauの避難所」をはてなブログに移行しました

Jenkins のグラフで縦書きの文字がちゃんと回転しない対策

Jenkins のグラフについて「日本語が表示されない(お豆腐で表示される)」みたいな問題はわりと見かけるんですが、今の環境で起きてたのは別の現象で。

本来は


↑こうなるべきところが、


↑こうなってました。

y軸の「count」が下から「c」「o」「u」「n」「t」が、各文字は回転せずに積み上げられてしまっています。x軸も「#3」が同様に下から「#」「3」が書かれていってるので、識別できません。

あまり報告を見かけないので、ほとんどの環境では発生しないんだと思いますが、一応対策を書いておきます。環境は CentOS5、OpenJDK7 です。

先に結論を

原因(あまり深く調べてない)

手元の環境(CentOS5)では、


/usr/share/fonts/ja/TrueType/kochi-gothic-subst.ttf
-> /usr/share/fonts/japanese/TrueType/sazanami-gothic.ttf
のようなシンボリックリンクが設定されています(東風代替フォントとしてさざなみフォントが使われています)が、グラフの描画にこの辺りのフォントが使われると上記の現象が発生してしまうみたいです。

対策

もっと適切な対応があるかもしれませんが、とりあえずこのファイルが使われなければいいようなので、

  • システム全体で設定していいのであれば /etc/fonts/local.ini として
  • 特定のユーザ(jankins ユーザとか)だけに設定したいのであれば ~/.fonts.conf として

こんなファイル を配置して、fc-cache を実行。

ただ、こうすると日本語が表示できなくなってしまうので、日本語を表示したい場合は IPA フォントでも入れておけばよいです。


yum install ipa-gothic-fonts ipa-mincho-fonts ipa-pgothic-fonts ipa-pmincho-fonts

Jenkins を再起動すれば、キャッシュされていないグラフについては正しい状態になります。

解決策に行き当たるまで&URL のメモなど

この現象は長いこと気になっていたので、Jenkins のメンテナンスついでに修正しようと思い立ちまして。

Jenkins やらその中でグラフの描画に使われている JFreeChart のソースを読んでみたんですが、特にあやしい処理が見付からず。よくわからないので JFreeChart で簡単なグラフを書いてみたら、そちらでも現象は再現するようなので、環境のほうを疑うようになって。

を見ると OpenJDK7 では libfontconfig が使わているようで。

あたりに fontconfig まわりの詳しい情報が載っていたのでこれを参考にしつつ、設定をいじりまわしていたらうまくいった、という感じです。
(ちなみに Java では ~/.java/fonts/*/fcinfo-*.properties あたりに設定がキャッシュされるっぽいので、検証をする時は rm -rf ~/.java/fonts としてキャッシュを消す必要がありました。)

色々書きましたが、今回は Jenkins でしか使っていないサーバなので、


yum erase fonts-japanese
として日本語フォント自体を消してしまってもよかったかもしれません。