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版)でフォント設定がデフォルトのときの論理フォントを表示した例です。
欧文文字は、等幅を除きアンチエイリアスされた表示になっています。等幅の場合は欧文文字も「MS ゴシック」が適用されるためです。
和文文字は、明朝系が「MS 明朝」、それ以外は「MS ゴシック」となっています。
フォントの設定¶
設定ファイルの場所¶
Java SE 7および8 の場合、次の場所にフォント設定ファイルがあります。
- Java SE JDK
- <JDKインストールディレクトリ>\jre\lib
- Java SE JRE
デフォルトのフォント設定ファイルは、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に変更¶
編集内容は次になります。
表示隠す
--- fontconfig.properties.src 2013-09-15 16:48:17.570564000 +0900
+++ fontconfig.properties 2013-09-15 22:10:23.382937200 +0900
@@ -75,112 +75,112 @@
sansserif.plain.chinese-ms950=MingLiU
sansserif.plain.chinese-ms950-extb=MingLiU-ExtB
sansserif.plain.hebrew=David
-sansserif.plain.japanese=MS Gothic
+sansserif.plain.japanese=Meiryo UI
sansserif.plain.korean=Gulim
sansserif.bold.alphabetic=Arial Bold
sansserif.bold.chinese-ms950=PMingLiU
sansserif.bold.chinese-ms950-extb=PMingLiU-ExtB
sansserif.bold.hebrew=David Bold
-sansserif.bold.japanese=MS Gothic
+sansserif.bold.japanese=Meiryo UI
sansserif.bold.korean=Gulim
sansserif.italic.alphabetic=Arial Italic
sansserif.italic.chinese-ms950=PMingLiU
sansserif.italic.chinese-ms950-extb=PMingLiU-ExtB
sansserif.italic.hebrew=David
-sansserif.italic.japanese=MS Gothic
+sansserif.italic.japanese=Meiryo UI
sansserif.italic.korean=Gulim
sansserif.bolditalic.alphabetic=Arial Bold Italic
sansserif.bolditalic.chinese-ms950=PMingLiU
sansserif.bolditalic.chinese-ms950-extb=PMingLiU-ExtB
sansserif.bolditalic.hebrew=David Bold
-sansserif.bolditalic.japanese=MS Gothic
+sansserif.bolditalic.japanese=Meiryo UI
sansserif.bolditalic.korean=Gulim
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.japanese=Meiryo UI
monospaced.plain.korean=GulimChe
monospaced.bold.alphabetic=Courier New Bold
monospaced.bold.chinese-ms950=PMingLiU
monospaced.bold.chinese-ms950-extb=PMingLiU-ExtB
monospaced.bold.hebrew=Courier New Bold
-monospaced.bold.japanese=MS Gothic
+monospaced.bold.japanese=Meiryo UI
monospaced.bold.korean=GulimChe
monospaced.italic.alphabetic=Courier New Italic
monospaced.italic.chinese-ms950=PMingLiU
monospaced.italic.chinese-ms950-extb=PMingLiU-ExtB
monospaced.italic.hebrew=Courier New
-monospaced.italic.japanese=MS Gothic
+monospaced.italic.japanese=Meiryo UI
monospaced.italic.korean=GulimChe
monospaced.bolditalic.alphabetic=Courier New Bold Italic
monospaced.bolditalic.chinese-ms950=PMingLiU
monospaced.bolditalic.chinese-ms950-extb=PMingLiU-ExtB
monospaced.bolditalic.hebrew=Courier New Bold
-monospaced.bolditalic.japanese=MS Gothic
+monospaced.bolditalic.japanese=Meiryo UI
monospaced.bolditalic.korean=GulimChe
dialog.plain.alphabetic=Arial
dialog.plain.chinese-ms950=MingLiU
dialog.plain.chinese-ms950-extb=MingLiU-ExtB
dialog.plain.hebrew=David
-dialog.plain.japanese=MS Gothic
+dialog.plain.japanese=Meiryo UI
dialog.plain.korean=Gulim
dialog.bold.alphabetic=Arial Bold
dialog.bold.chinese-ms950=PMingLiU
dialog.bold.chinese-ms950-extb=PMingLiU-ExtB
dialog.bold.hebrew=David Bold
-dialog.bold.japanese=MS Gothic
+dialog.bold.japanese=Meiryo UI
dialog.bold.korean=Gulim
dialog.italic.alphabetic=Arial Italic
dialog.italic.chinese-ms950=PMingLiU
dialog.italic.chinese-ms950-extb=PMingLiU-ExtB
dialog.italic.hebrew=David
-dialog.italic.japanese=MS Gothic
+dialog.italic.japanese=Meiryo UI
dialog.italic.korean=Gulim
dialog.bolditalic.alphabetic=Arial Bold Italic
dialog.bolditalic.chinese-ms950=PMingLiU
dialog.bolditalic.chinese-ms950-extb=PMingLiU-ExtB
dialog.bolditalic.hebrew=David Bold
-dialog.bolditalic.japanese=MS Gothic
+dialog.bolditalic.japanese=Meiryo UI
dialog.bolditalic.korean=Gulim
dialoginput.plain.alphabetic=Courier New
dialoginput.plain.chinese-ms950=MingLiU
dialoginput.plain.chinese-ms950-extb=MingLiU-ExtB
dialoginput.plain.hebrew=David
-dialoginput.plain.japanese=MS Gothic
+dialoginput.plain.japanese=Meiryo UI
dialoginput.plain.korean=Gulim
dialoginput.bold.alphabetic=Courier New Bold
dialoginput.bold.chinese-ms950=PMingLiU
dialoginput.bold.chinese-ms950-extb=PMingLiU-ExtB
dialoginput.bold.hebrew=David Bold
-dialoginput.bold.japanese=MS Gothic
+dialoginput.bold.japanese=Meiryo UI
dialoginput.bold.korean=Gulim
dialoginput.italic.alphabetic=Courier New Italic
dialoginput.italic.chinese-ms950=PMingLiU
dialoginput.italic.chinese-ms950-extb=PMingLiU-ExtB
dialoginput.italic.hebrew=David
-dialoginput.italic.japanese=MS Gothic
+dialoginput.italic.japanese=Meiryo UI
dialoginput.italic.korean=Gulim
dialoginput.bolditalic.alphabetic=Courier New Bold Italic
dialoginput.bolditalic.chinese-ms950=PMingLiU
dialoginput.bolditalic.chinese-ms950-extb=PMingLiU-ExtB
dialoginput.bolditalic.hebrew=David Bold
-dialoginput.bolditalic.japanese=MS Gothic
+dialoginput.bolditalic.japanese=Meiryo UI
dialoginput.bolditalic.korean=Gulim
# Search Sequences
@@ -288,6 +288,8 @@
filename.MS_Gothic=MSGOTHIC.TTC
filename.MS_PGothic=MSGOTHIC.TTC
+filename.Meiryo_UI=MEIRYO.TTC
+
filename.Gulim=gulim.TTC
filename.Batang=batang.TTC
filename.GulimChe=gulim.TTC
この修正したフォント設定で表示した画面は次となります。
明朝系以外の和文文字がアンチエイリアスされているのが分かります。等幅の欧文もアンチエイリアスされていますが、文字幅がプロポーショナルになってしまいました。これは、Meiryo系フォントが和文文字は等幅、欧文文字がプロポーショナルとなっているためです。後ほど、Consolasフォント設定とともに欧文が等幅となる設定を行います。
MS明朝をIPAex明朝に変更¶
埋め込みビットマップのないアンチエイリアスが有効な明朝系フォントがWindows 7にはないので、IPAが公開している明朝フォントを入手してインストールします。
- IPAexフォント/IPAフォント ダウンロード トップページ
このページから[IPAexフォントの詳細とダウンロード]のリンクをたどり、IPAexfont00201.zip ファイルをダウンロードします。アーカイブを展開し、中に含まれる ipaexm.ttf ファイルをWindowsのフォントフォルダ(C:\Windows\Fonts\)にコピーします。エクスプローラでこのフォントフォルダへコピーすると自動でインストールされます。
設定ファイルを修正します。
表示隠す
--- fontconfig.properties.1 2013-09-15 22:10:23.382937200 +0900
+++ fontconfig.properties 2013-09-15 22:41:04.359235000 +0900
@@ -47,28 +47,28 @@
serif.plain.chinese-ms950=MingLiU
serif.plain.chinese-ms950-extb=MingLiU-ExtB
serif.plain.hebrew=David
-serif.plain.japanese=MS Mincho
+serif.plain.japanese=IPAexMincho
serif.plain.korean=Batang
serif.bold.alphabetic=Times New Roman Bold
serif.bold.chinese-ms950=PMingLiU
serif.bold.chinese-ms950-extb=PMingLiU-ExtB
serif.bold.hebrew=David Bold
-serif.bold.japanese=MS Mincho
+serif.bold.japanese=IPAexMincho
serif.bold.korean=Batang
serif.italic.alphabetic=Times New Roman Italic
serif.italic.chinese-ms950=PMingLiU
serif.italic.chinese-ms950-extb=PMingLiU-ExtB
serif.italic.hebrew=David
-serif.italic.japanese=MS Mincho
+serif.italic.japanese=IPAexMincho
serif.italic.korean=Batang
serif.bolditalic.alphabetic=Times New Roman Bold Italic
serif.bolditalic.chinese-ms950=PMingLiU
serif.bolditalic.chinese-ms950-extb=PMingLiU-ExtB
serif.bolditalic.hebrew=David Bold
-serif.bolditalic.japanese=MS Mincho
+serif.bolditalic.japanese=IPAexMincho
serif.bolditalic.korean=Batang
sansserif.plain.alphabetic=Arial
@@ -290,6 +290,8 @@
filename.Meiryo_UI=MEIRYO.TTC
+filename.IPAexMincho=ipaexm.ttf
+
filename.Gulim=gulim.TTC
filename.Batang=batang.TTC
filename.GulimChe=gulim.TTC
この修正したフォント設定で表示した画面は次となります。
明朝系の和文文字がアンチエイリアシングされているのが分かります。
Courier NewをConsolasに変更¶
等幅フォントを、欧文文字がプロポーショナルとなってしまうMeiryo UIではなく、次の組み合わせとします。
- 欧文文字はConsolasフォントで表示
- 和文文字はMeiryo UIフォントで表示
設定ファイルを修正します。
表示隠す
--- fontconfig.properties.2 2013-09-15 22:41:04.359235000 +0900
+++ fontconfig.properties 2013-09-15 22:55:29.553721300 +0900
@@ -99,28 +99,28 @@
sansserif.bolditalic.japanese=Meiryo UI
sansserif.bolditalic.korean=Gulim
-monospaced.plain.alphabetic=Courier New
+monospaced.plain.alphabetic=Consolas
monospaced.plain.chinese-ms950=MingLiU
monospaced.plain.chinese-ms950-extb=MingLiU-ExtB
monospaced.plain.hebrew=Courier New
monospaced.plain.japanese=Meiryo UI
monospaced.plain.korean=GulimChe
-monospaced.bold.alphabetic=Courier New Bold
+monospaced.bold.alphabetic=Consolas Bold
monospaced.bold.chinese-ms950=PMingLiU
monospaced.bold.chinese-ms950-extb=PMingLiU-ExtB
monospaced.bold.hebrew=Courier New Bold
monospaced.bold.japanese=Meiryo UI
monospaced.bold.korean=GulimChe
-monospaced.italic.alphabetic=Courier New Italic
+monospaced.italic.alphabetic=Consolas Italic
monospaced.italic.chinese-ms950=PMingLiU
monospaced.italic.chinese-ms950-extb=PMingLiU-ExtB
monospaced.italic.hebrew=Courier New
monospaced.italic.japanese=Meiryo UI
monospaced.italic.korean=GulimChe
-monospaced.bolditalic.alphabetic=Courier New Bold Italic
+monospaced.bolditalic.alphabetic=Consolas Bold Italic
monospaced.bolditalic.chinese-ms950=PMingLiU
monospaced.bolditalic.chinese-ms950-extb=PMingLiU-ExtB
monospaced.bolditalic.hebrew=Courier New Bold
@@ -224,7 +224,7 @@
sequence.serif.windows-31j=alphabetic,japanese,dingbats,symbol
sequence.sansserif.windows-31j=alphabetic,japanese,dingbats,symbol
-sequence.monospaced.windows-31j=japanese,alphabetic,dingbats,symbol
+sequence.monospaced.windows-31j=alphabetic,japanese,dingbats,symbol
sequence.dialog.windows-31j=alphabetic,japanese,dingbats,symbol
sequence.dialoginput.windows-31j=alphabetic,japanese,dingbats,symbol
@@ -265,6 +265,11 @@
filename.Courier_New_Italic=COURI.TTF
filename.Courier_New_Bold_Italic=COURBI.TTF
+filename.Consolas=CONSOLA.TTF
+filename.Consolas_Bold=CONSOLAB.TTF
+filename.Consolas_Italic=CONSOLAI.TTF
+filename.Consolas_Bold_Italic=CONSOLAZ.TTF
+
filename.Times_New_Roman=TIMES.TTF
filename.Times_New_Roman_Bold=TIMESBD.TTF
filename.Times_New_Roman_Italic=TIMESI.TTF
この修正したフォント設定で表示した画面は次となります。
等幅の表示で欧文文字が等幅(Consolasフォント)になっているのが分かります。等幅の和文文字はMeiryo UIのままです。
このように欧文と和文で別なフォントを使用することができます。ただし、日本語環境(ロケールWindows-31J)ではデフォルトでは先に和文フォントを見にいってしまうため、和文フォントに欧文文字(英数記号)が含まれているとそれを表示してしまいます。
そこで、設定ファイルのsequence.monospaced.windows-31jの行で見に行く順番を欧文フォントが先になるよう変更しています。
ソースコード編集用の設定¶
JDKのfontconfig.propertiesをいじって、NetBeans IDEのJavaソースファイル編集ペインの表示を見比べてみます。
No |
欧文フォント |
和文フォント |
表示例 |
1 |
Consolas |
Meiryo UI |
|
フォント情報¶
游フォント¶
Windows 8.1から標準搭載されている明朝およびゴシックフォントです。
プロポーショナルのみです。和文文字は、平仮名・漢字とも同じ幅の標準書体と平仮名の幅を詰めたUI書体があります。
標準書体は従来のMS 明朝・MS ゴシックに比べ上下に隙間が多めになっているようです。
メイリオフォントに比べて細く、かすれた表示に見えます。