昨年、JavaScript開発でWebStormを使ってみてから、JetBrains製品を気に入りIntelliJ IDEAユーザになりました。
当時はIDEA11を購入し、昨年末のマヤ歴の終りセールで勢いでIDEA12に乗り換えたのですが、エディタのフォントを自分の好みのものに変更すると、コード内の日本語の表示がおかしくなる問題がありました。(そもそも日本語コメント、いや…コメントをあまり付けないので気にしていませんでしたが)
この問題の対処方法についてとりあえず発見したのでメモしておきます。
なお、私の試した環境はWindows7(64bit)なので予めご了承ください。
まずは、IDEA12デフォルトのフォント(Monospaced)だとこのような感じです。
そのままでも実用上問題はないのですが、やっぱり自分の好みのフォントを使いたいですよね。
ということで、設定でフォントを「Consolas」に変更します。
これで問題ないように思えますが、IDEAを再起動すると以下の表示になってしまいます。
よく見ると、日本語フォントが化けているのではなく、行内の日本語フォントが一箇所に重なってしまっているようです。
ちなみに等幅フォント以外のもの(MSゴシック等)を指定すると再起動の日本語表示も問題ないのですが、コーディングに等幅フォント以外は使いたくないですよね…
と、ここまでの内容を整理すると、”フォントに「Monospaced」以外の等幅フォントを選択すると日本語表示がおかしくなる”のではないかという気がして来ました。そこで、「Monospaced」ってどんなフォントなんだろうと調べてみたところ、論理フォントだということがわかりました。
論理フォントに対する実際の物理フォントは、「fontconfig.properties」に記述されています。IDEAの場合は「インストールフォルダ/jre/jre/lib」を見ているようですが、デフォルトでは「fontconfig.properties」は存在しないので、「fontconfig.properties.src」がデフォルト設定だと思われます。(もしかするとJAVASCRIPT_HOMEとかで参照先は変わってくるかもしれません)
中身を確認すると、以下のように論理フォント「monospaced」に対して物理フォントが充てられているようです。
monospaced.plain.alphabetic=Courier New monospaced.plain.chinese-ms950=MingLiU monospaced.plain.chinese-ms950-extb=MingLiU-ExtB monospaced.plain.hebrew=Courier New monospaced.plain.japanese=MS Gothic monospaced.plain.korean=GulimChe
以下のサイトを参考に、「fontconfig.properties」を作成しカスタマイズしてみました。
[NetBeans]Consolasフォントを使う | さまくた-samakuta
Windows/JDK6のデフォルトフォントの変更と、論理フォントに対応する物理フォントをプログラム上で取得 – torutkの日記
# 以下、変更点のみ抜粋 #monospaced.plain.alphabetic=Courier New monospaced.plain.alphabetic=Consolas #monospaced.plain.japanese=MS Gothic monospaced.plain.japanese=Meiryo UI #monospaced.bold.alphabetic=Courier New Bold monospaced.bold.alphabetic=Consolas Bold #monospaced.bold.japanese=MS Gothic monospaced.bold.japanese=Meiryo UI #monospaced.italic.alphabetic=Courier New Italic monospaced.italic.alphabetic=Consolas Italic #monospaced.italic.japanese=MS Gothic monospaced.italic.japanese=Meiryo UI #monospaced.bolditalic.alphabetic=Courier New Bold Italic monospaced.bolditalic.alphabetic=Consolas Bold Italic #monospaced.bolditalic.japanese=MS Gothic monospaced.bolditalic.japanese=Meiryo UI #sequence.monospaced.windows-31j=japanese,alphabetic,dingbats,symbol sequence.monospaced.windows-31j=alphabetic,japanese,dingbats,symbol # 以下、追記 filename.Consolas=CONSOLA.TTF filename.Consolas_Bold=CONSOLAB.TTF filename.Consolas_Italic=CONSOLAI.TTF filename.Consolas_Bold_Italic=CONSOLAZ.TTF filename.Meiryo_UI=MEIRYO.TTC filename.Meiryo_UI_Bold=MEIRYOB.TTC filename.Meiryo_UI_Italic=MEIRYO.TTC filename.Meiryo_UI_Bold_Italic=MEIRYOB.TTC
本ファイル作成後、フォントに「Monospaced」を指定したものが以下になります。