プロジェクト

全般

プロフィール

Javaフォント設定Windows編

Windowsのフォントがギザギザなわけ

Oracle Java SE 7のWindows版に含まれるデフォルトのフォント設定は、日本語フォントに「MS 明朝」および「MS ゴシック」を使用します。このフォントはTrueTypeなので本来はWindows上でClearTypeを有効にするとアンチエイリアシングされるはずなのですが、「MS 明朝」、「MS ゴシック」はビットマップを埋め込んでおり、文字サイズが小さいとき(20ポイント以下か)はTrueTypeではなくビットマップ表示します。そのため、ClearTypeを有効にしてもぎざぎざのビットマップ表示となります。

フォント設定を変更し、「MS 明朝」や「MS ゴシック」の替わりにClearTypeが常に有効となるフォントを指定すると、ClearTypeによるアンチエイリアシングが適用されます。

Windowsのデフォルト設定での表示

次は、Java SE 8 JDK build106(Windows x86_64版)でフォント設定がデフォルトのときの論理フォントを表示した例です。

JDK8 build106 Windows版のデフォルトフォント設定で表示

欧文文字は、等幅を除きアンチエイリアスされた表示になっています。等幅の場合は欧文文字も「MS ゴシック」が適用されるためです。
和文文字は、明朝系が「MS 明朝」、それ以外は「MS ゴシック」となっています。

フォントの設定

設定ファイルの場所

Java SE 7および8 の場合、次の場所にフォント設定ファイルがあります。

  • Java SE JDK
    • <JDKインストールディレクトリ>\jre\lib
  • Java SE JRE
    • <JREインストールディレクトリ>\lib

デフォルトのフォント設定ファイルは、fontconfig.bfcですがバイナリ形式なのでこのまま編集はできません。
そこで、同じディレクトリにあるfontconfig.properties.srcファイルをfontconfig.propertiesファイルとしてコピーし、このファイルの設定を変更します。なお、fontconfig.bfcはそのままで構いません。fontconfig.propertiesというファイルがあるとこちらが優先されます。

設定ファイル概要

フォント設定ファイル(fontconfig.properties)は、Javaの論理フォント名と物理フォントをマッピングする設定を記述します。
Javaの論理フォントは次の種類があります。

論理フォント名 書体 Oracle JDK/JREでの日本語ロケール向けデフォルト設定
serif ひげ(はね)がある書体 MS 明朝(MS P明朝)
sansserif ひげ(はね)がない書体 MS ゴシック(MS Pゴシック)
monospaced 文字幅が等幅な書体 MS ゴシック
dialog 対話UI(ダイアログ)の表示文字に使う書体 MS ゴシック(MS Pゴシック)
dialoginput 対話UI(ダイアログ)の入力文字に使う書体 MS ゴシック(MS Pゴシック)

1つのフォント設定ファイルには、複数の言語環境(ロケール)における物理フォントマッピングが定義されています。
例えば、論理フォントserifに対する物理フォントの定義は次のように記載されています(JDK 8u112の例)。

serif.plain.alphabetic=Times New Roman
serif.plain.chinese-ms950=MingLiU
serif.plain.chinese-ms950-extb=MingLiU-ExtB
serif.plain.hebrew=David
serif.plain.japanese=MS Mincho
serif.plain.korean=Batang

serifは論理フォント名、plainは通常スタイル、次が言語環境名、=の次が物理フォント名となります。
日本語の場合は、serif.plain.japanese=MS MinchoとMS明朝フォントが物理フォント名になっています。

次に、物理フォント名とフォントファイル名の対応を定義する箇所があります。

filename.MS_Mincho=MSMINCHO.TTC

filenameの後ろに、物理フォント名"MS Mincho" の空白をアンダースコアに置き換えたMS_Minchoを付けると、物理フォントのファイル名を定義するプロパティとなります。右側にはファイル名を定義します。

なお、MS明朝は等幅フォントです。プロポーショナルフォントとして使用する場合は、

proportional.MS_Mincho=MS PMincho
  :
filename.MS_PMincho=MSMINCHO.TTC

のように、proportionalの後ろに、等幅フォントの物理フォント名を付け、=の次が物理フォント(プロポーショナル)のファイル名となります。

注記
物理フォントのフォント名にアンダースコアを含むものは、この空白⇔アンダースコア変換ルールによって変えられてしまい、フォント指定ができません。
ただし、物理フォント名MingLiu_HKSCSはアンダースコアを含んでいても空白に置き換えしないよう特殊なコードが sun.awt.FontConfigurationクラスに記述されています。

Windows用フォントの物理フォント名

メイリオ

フォントファイル名 日本語フォント名 英語フォント名
Meiryo.ttc メイリオ Meiryo
メイリオ イタリック Meiryo Italic
メイリオ UI Meiryo UI
メイリオ UI イタリック Meiryo UI Italic
MeiryoB.ttc メイリオ ボールド Meiryo Bold
メイリオ ボールドイタリック Meiryo Bold Italic
メイリオ UI ボールド Meiryo UI Bold
メイリオ UI ボールドイタリック Meiryo UI Bold Italic

http://www.jiyu-kobo.co.jp/wp@test/wp-content/uploads/2016/04/compatibility_160325.pdf

フォントファイル名 日本語フォント名 英語フォント名
YuGothR.ttc 游ゴシック Regular Yu Gothic Regular
N/A Yu Gothic UI Semilight
YuGothL.ttc 游ゴシック Light Yu Gothic Light
N/A Yu Gothic UI Light
YuGothM.ttc 游ゴシック Medium Yu Gothic Medium
N/A Yu Gothic UI Regular
YuGothB.ttc 游ゴシック Bold Yu Gothic Bold
N/A Yu Gothic UI Semibold
N/A Yu Gothic UI + B
yumin.ttf 游明朝 Regular Yu Mincho Regular
yuminl.ttf 游明朝 Light Yu Mincho Light
yumindb.ttf 游明朝 Demibold Yu Mincho Demibold

設定変更にあたって

メイリオ フォントおよび游ゴシックフォントは同じポイント数でも縦方向がMSゴシックフォントに比べ高い(余白が大きい)ので、行間が開いたように見えます。そのため、メニュー(ドロップダウンリスト)が長くなり、テキスト編集の行間が開いてしまい、あまり具合がよくありません。
メイリオ UIフォントおよび游ゴシック UIフォントは縦方向の余白がやや抑えられています。
同じ広さでなるべく多くの行を表示するには、標準では搭載されていない日本語の等幅フォントを利用するのがよさそうです。

設定変更例(メイリオ UI、IPAex明朝、Consolas)

まず、日本語フォントをゴシック系はメイリオ UI、明朝系はIPAex明朝にします。
また、等幅フォントについては、英語をConsolas、日本語をメイリオUIにします。この場合、日本語1文字の幅が英数2文字の幅とは一致しないので厳密には等幅ではありませんが、ソースコードを表示するのに見栄えがいいので使用しています。

メイリオUIはWindows 7に標準で含まれている、メイリオの文字幅(高さ)を少し詰めたフォントです。

  • <JDKインストールディレクトリ>\jre\lib\fontconfig.properties.srcファイルを作業ディレクトリへコピーする
  • 編集する
    • MSゴシックをメイリオ UIに変更
    • MS明朝をIPAex明朝に変更
    • Courier NewをConsolasに変更

MSゴシックをメイリオ UIに変更

編集内容は次になります。

この修正したフォント設定で表示した画面は次となります。

JDK8 build106 Windows版、フォント設定でMSゴシックをMeiryo UIに変更した表示

明朝系以外の和文文字がアンチエイリアスされているのが分かります。等幅の欧文もアンチエイリアスされていますが、文字幅がプロポーショナルになってしまいました。これは、Meiryo系フォントが和文文字は等幅、欧文文字がプロポーショナルとなっているためです。後ほど、Consolasフォント設定とともに欧文が等幅となる設定を行います。

MS明朝をIPAex明朝に変更

埋め込みビットマップのないアンチエイリアスが有効な明朝系フォントがWindows 7にはないので、IPAが公開している明朝フォントを入手してインストールします。

  • IPAexフォント/IPAフォント ダウンロード トップページ
    このページから[IPAexフォントの詳細とダウンロード]のリンクをたどり、IPAexfont00201.zip ファイルをダウンロードします。アーカイブを展開し、中に含まれる ipaexm.ttf ファイルをWindowsのフォントフォルダ(C:\Windows\Fonts\)にコピーします。エクスプローラでこのフォントフォルダへコピーすると自動でインストールされます。

設定ファイルを修正します。

この修正したフォント設定で表示した画面は次となります。

JDK8 build106 Windows版、フォント設定でMS明朝をIPAex明朝に変更した表示

明朝系の和文文字がアンチエイリアシングされているのが分かります。

Courier NewをConsolasに変更

等幅フォントを、欧文文字がプロポーショナルとなってしまうMeiryo UIではなく、次の組み合わせとします。

  • 欧文文字はConsolasフォントで表示
  • 和文文字はMeiryo UIフォントで表示

設定ファイルを修正します。

この修正したフォント設定で表示した画面は次となります。

JDK8 build106 Windows版、フォント設定で等幅欧文をCourier NewからConsolasに変更した表示

等幅の表示で欧文文字が等幅(Consolasフォント)になっているのが分かります。等幅の和文文字はMeiryo UIのままです。
このように欧文と和文で別なフォントを使用することができます。ただし、日本語環境(ロケールWindows-31J)ではデフォルトでは先に和文フォントを見にいってしまうため、和文フォントに欧文文字(英数記号)が含まれているとそれを表示してしまいます。
そこで、設定ファイルのsequence.monospaced.windows-31jの行で見に行く順番を欧文フォントが先になるよう変更しています。

ソースコード編集用の設定

JDKのfontconfig.propertiesをいじって、NetBeans IDEのJavaソースファイル編集ペインの表示を見比べてみます。

No 欧文フォント 和文フォント 表示例
1 Consolas Meiryo UI javaeditor_font-1.png (monospacedをConsolasとMeiryo UIの組み合わせで)

フォント情報

游フォント

Windows 8.1から標準搭載されている明朝およびゴシックフォントです。
プロポーショナルのみです。和文文字は、平仮名・漢字とも同じ幅の標準書体と平仮名の幅を詰めたUI書体があります。
標準書体は従来のMS 明朝・MS ゴシックに比べ上下に隙間が多めになっているようです。
メイリオフォントに比べて細く、かすれた表示に見えます。

FontConfig_01.png 表示 - JDK8 build106 Windows版のデフォルトフォント設定で表示 (36.9 KB) 高橋 徹, 2013/09/15 22:23

FontConfig_02.png 表示 - JDK8 build106 Windows版、フォント設定でMSゴシックをMeiryo UIに変更した表示 (36.8 KB) 高橋 徹, 2013/09/15 22:28

FontConfig_03.png 表示 - JDK8 build106 Windows版、フォント設定でMS明朝をIPAex明朝に変更した表示 (36.7 KB) 高橋 徹, 2013/09/15 22:58

FontConfig_04.png 表示 - JDK8 build106 Windows版、フォント設定で等幅欧文をCourier NewからConsolasに変更した表示 (35.8 KB) 高橋 徹, 2013/09/15 23:00

fontconfig.properties 表示 - JDK 8 b106 Windows版のフォント設定を、Meiryo UI、IPAex明朝、Consolasを使うよう修正したもの (10.4 KB) 高橋 徹, 2013/09/15 23:05

javaeditor_font-1.png 表示 - monospacedをConsolasとMeiryo UIの組み合わせで (179 KB) 高橋 徹, 2016/10/29 21:39

クリップボードから画像を追加 (サイズの上限: 1 GB)