游明朝DemiboldをWindowsのモダンブラウザで使う


## モチベーション

WebアプリやElectronアプリなど、クロスプラットフォーム環境のアプリではフォントの互換性も重要になります。Google Fontに代表されるWebフォントは一つの解ですが、日本語の場合はフォントファイルの容量自体が大きく、通信量の増加や遅延が気になる場合もあります。

別の解として、WindowsとMacの標準インストールされているフォントである游ゴシックと游明朝を使うというものがあります。しかし、WindowsとMacでは、インストールされているFontのweightが違ったり、OSのレンダリング方法が違ったりして、**一般的にWindowsでは細く、Macでは太く表示されます**。しかし、font-weigtの問題さえクリアできれば、クロスプラットフォームアプリにおいてはとても有用です。

二つ目の問題として、font-weightやfont-familyの指定がブラウザによっても若干異なり、モダンブラウザ全てで動かすには結構大変だということも挙げられます。

游ゴシックに対するfont-weighの解決策は、色々と紹介されています。（ただ、微妙に違う情報が乱立していて、結局は自分自身で試行錯誤するしかないですが）

游明朝についての情報は少ないので、今回はこれについての試行錯誤した結果を情報共有したいと思います。（もちろんこれも時間がたてばOSやブラウザの仕様変更により有効ではなくなるかもしれません）

## 游明朝の種類とOS間の違い

Windows、Mac共に、OS標準として細い・中間・太いの三種類のフォントファミリーがインストールされています。ただ、OSによって、フォント名が微妙に異なります。以下テーブルにまとめます。

||Windows|Mac OS |
|---|---|---|
|太さ指定なし(中間と同じ)|Yu Mincho|YuMincho|
|細い|Yu Mincho Light|YuMincho Light|
|中間|Yu Mincho Regular|YuMincho Medium|
|太い|Yu Mincho Demibold|YuMincho Demibold|

主な注意点を挙げておきます

- WindowsではYuとMinchoの間に半角スペースが必要です。MacではYuとMinchoの間に隙間を開けずに接続してください。
- 中間太さのフォント名がWindowsとMacで異なります。Windowsでは"Yu Mincho Regular"、Macでは"YuMincho Medium"です。

ここで、よく言われる「Windowsは細い、Macは太い」の検証をとしてスクリーンショットを以下の表にまとめました。

||Windows(Chrome)|Mac(Chrome)|
|---|---|---|
|Yu Mincho|![Chrome-win_YuMincho-single.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/557342/4fda5b70-3b05-b58e-4d7a-e1e5b723208a.png)|![Chrome-mac_YuMincho-single.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/557342/7bc1953e-9645-5f20-405a-85799b7968ca.png)|
|Yu Mincho Demibold|![Chrome-win_YuMincho_Demibold-single.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/557342/8c467da4-7855-09f8-6a2c-8b600c85e32c.png)|![Chrome-mac_YuMincho_Demibold-single.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/557342/3ca305fa-d6d0-e805-e145-6d0786e9bc09.png)|




ブラウザは共にChromeを使いました。font-weightは特にしていない状態です。ブラウザ間の差は後で纏めますが、font-weightを指定しない状態ではブラウザ間の差はほとんどないと考えて良さそうです。

ここからわかることは、

- 確かにWindowsは細く、Macは太い
- **MacのRegular(font-weight指定なし)と同等な太さで表示されるのはWindowsではDemiboldである**

ということです。ですので、クロスプラットフォームなアプリで游明朝を使うときのコツとして

**「コツ１：MacではYuMincho (Regular)を使い、WindowsではYu Mincho Demiboldを使う」**

をお勧めします。

## ブラウザ間の表示の違い

上ではOS間のフォント名の差に触れましたが、今度はブラウザ間の差について触れます。

CSSでfont-familyとfont-weightの指定を変えて試しました。font-familyは"Yu Mincho"、"Yu Mincho Regular"、"Yu Mincho Demibold"、さらに、`@font-face`を経由して"Yu Mincho Demibold"を指定した場合の四種類を試しました。CSSでこれらに相当するクラスは次の様にしました。うまく適用されなかった場合が分かりやすいように、どのfont-familyにも適用されなかった場合はserifではなくsans-serifになるようにしました。


```CSS
@font-face {
  font-family: 'MyYuMinchoC';
  src: local('YuMincho-Demibold'),  /* for Win */
       local('YuMincho Demibold');  /* for Mac */

}
.yumincho{
  font-family :'Yu Mincho','YuMincho', sans-serif;
}
.yuminchoR{
  font-family :'Yu Mincho Regular', 'Yu Mincho','YuMincho Medium',sans-serif;
}
.yuminchoB{
  font-family :'Yu Mincho Demibold','YuMincho Demibold', sans-serif;
}

.yuminchoC{
    font-family : "MyYuMinchoC", sans-serif;
}
```

font-weighは「指定なし」、`font-weight:bold`、`font-weight:800`の三種類を試しました。これはクラスに入れず、次のようにHTMLのタグ中にstyle属性として記入しました。


```html
<p class="yumincho">明朝体のサンプルです</p>
<p class="yumincho" style="font-weight:bold;">明朝体のサンプルです</p>
<p class="yumincho" style="font-weight:800;">明朝体のサンプルです</p>
<p class="yuminchoR">明朝体のサンプルです</p>
<p class="yuminchoR" style="font-weight:bold;">明朝体のサンプルです</p>
<p class="yuminchoR" style="font-weight:800;">明朝体のサンプルです</p>
<p class="yuminchoB">明朝体のサンプルです</p>
<p class="yuminchoB" style="font-weight:bold;">明朝体のサンプルです</p>
<p class="yuminchoB" style="font-weight:800;">明朝体のサンプルです</p>
<p class="yuminchoC">明朝体のサンプルです</p>
<p class="yuminchoC" style="font-weight:bold;">明朝体のサンプルです</p>
<p class="yuminchoC" style="font-weight:800;">明朝体のサンプルです</p>
```

このCSS指定で表示される実際の様子を、ブラウザごとにスクリーンショットをとったものを以下の表にまとめます。各スクリーンショット画像は三行ずつにまとまっていますが、上から順にfont-weighの「指定なし」、`font-weight:bold`、`font-weight:800`に対応します。

Windowsでの表示

|font-family(class)|Edge(Legacy)|Chrome|Firefox|
|---|---|---|---|
|Yu Mincho|![EdgeLegacy-win_YuMincho.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/557342/c461b9b5-83fb-8e6e-ddb1-786768e24004.png)|![Chrome-win_YuMincho.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/557342/03011eab-6e30-561f-f1c4-0307f6b0df1c.png)|![Firefox-win_YuMincho.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/557342/d3664ff9-d02c-8f77-42a7-392cfdc6cdf4.png)|
|Regular|![EdgeLegacy-win_YuMincho_Regular.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/557342/ecc6d311-6fd6-049a-4583-5586205f6d58.png)|![Chrome-win_YuMincho_Regular.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/557342/807f15a1-ef6e-caed-f09d-43d851d1de18.png)|![Firefox-win_YuMincho_Regular.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/557342/905370c4-025e-80c9-a14f-996bb1fde5ef.png)|
|Demibold|![EdgeLegacy-win_YuMincho_Demibold.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/557342/2531bfc3-b3cf-7ff6-d3a4-e253ec19f637.png)|![Chrome-win_YuMincho_Demibold.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/557342/49cb3531-af60-5398-2c07-8add1bb1e9d2.png)|![Firefox-win_YuMincho_Demibold.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/557342/7c1dce52-adc4-e099-ec2f-a086be03cca6.png)|
|Demibold via @font-face|![EdgeLegacy-win_YuMincho_Demibold_font-face.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/557342/4bae11c8-5ded-af1c-e983-0d77feb43f46.png)|![Chrome-win_YuMincho_Demibold_font-face.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/557342/1ac714a2-12ad-716e-cea3-73a4b4f814e0.png)|![Firefox-win_YuMincho_Demibold_font-face.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/557342/80a16218-d01f-c027-7e51-0e901f048114.png)|

Macでの表示

|font-family(class)|Safari|Chrome|Firefox|
|---|---|---|---|
|Yu Mincho|![Safari-mac_YuMincho.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/557342/bf96ef71-d6b4-7b6d-f9f7-fa5244766b26.png)|![Chrome-mac_YuMincho.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/557342/75cbaf63-8239-0dcb-0c3d-1cd3026e2b80.png)|![Firefox-mac_YuMincho.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/557342/13e6fc45-a181-dabe-c462-1c91026c9b8f.png)|
|Medium|![Safari-mac_YuMincho_Medium.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/557342/9b38acb4-03ad-b5d4-b23b-01d925ae2c7b.png)|![Chrome-mac_YuMincho_Medium.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/557342/56523213-61b5-65cf-657c-610a164d8e17.png)|![Firefox-mac_YuMincho_Medium.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/557342/76439967-7556-7574-0733-152a7ebe5d2b.png)|
|Demibold|![Safari-mac_YuMincho_Demibold.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/557342/499ff9ad-b80d-e8f3-78c2-968e2d2d0d0b.png)|![Chrome-mac_YuMincho_Demibold.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/557342/e95bc2e2-77d3-1643-78f5-ad719ff5ac12.png)|![Firefox-mac_YuMincho_Demibold.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/557342/27b0110c-6528-c066-ac95-77fda7724a27.png)|
|Demibold via @font-face|![Safari-mac_YuMincho_Demibold_font-face.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/557342/49f053a5-6aaf-5e38-d8a7-0ff22408b64e.png)|![Chrome-mac_YuMincho_Demibold_font-face.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/557342/2167104e-8039-8212-097b-6304530b6a09.png)|![Firefox-mac_YuMincho_Demibold_font-face.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/557342/f38e54ef-8333-7e77-588c-1259dd7a9ff7.png)|

さて、この表から読み取れることを列挙します

1. ブラウザ問わずYuMincho、Yu Mincho Regular/Yu Mincho Mediumではfont-weightの指定で太字表示にできるが、Yu Mincho Demiboldではさらに太く表示できる場合と出来ない場合がある。
1. Chromeでは、Yu Mincho/YuMinchoに対してfont-weightで太字にした場合と、Yu Mincho Regular/YuMincho Mediumに対してfont-weightで太字にした場合で太字の太さが異なる。
1. Yu Mincho Demiboldをさらに太く表示するには
  1. Edge(Legacy)では、`font-weight:800`以上とする。
    1. `font-weight:bold`では太くできない
    1. `@font-face`を経由すると太くできない
  1. ChromeとFirefox（Windows/Mac共通）では、`@font-face`を経由してDemiboldを指定し、`font-weigt:bold`以上に指定する
    1. `@font-face`を経由しない場合は太くできない(Mac版Firefox除く)
  1. Safariでは、不可。

## 議論

ここで、最初のOS比較から、Macでは標準(指定なし：Medium相当)、WindowsではDemiboldを使うことを想定します。すると、Macの太字表示に対応するため、WindowsにおいてはDemiboldからさらに太くした表示が欲しくなります。この点に関しては、2つ目のブラウザ間比較を見ると幸いWindowsの場合にはどのブラウザでもそれが可能です。

上にも書きましたが、WindowsでDemiboldのさらに太いものを使うには、Edge(Lelagy)では`@font-face`を経由せずに`font-weight:800`以上を指定し、ChromeとFirefoxでは`@font-face`経由で`font-weight:bold`以上を指定します。前者の800以上というのは、色々試した限りでは実際には751以上ですが、わかりやすく800以上としました。

WindowsにおいてEdge(Lenagy)、Chrome、FirefoxでともにDemiboldのさらいに太いものを使うにはCSS等の設定は次の様にすればよさそうです。


```CSS
.yuminchoReco{
  font-family: 'YuMincho',    /* for Mac (as Medium)*/
               'MyYuminchoC'; /* for Chrome and firefox on Windows */
}
@supports (-ms-ime-align: auto){ /* for Edge(Legacy) */
.yuminchoReco{
  font-family: 'Yu Mincho Demibold';
}
```


```html
<p class="yuminchoReco" >明朝体のサンプルです</p><!--標準-->
<p class="yuminchoReco" style="font-weight:800;">明朝体のサンプルです</p><!--太字-->
```

## 結論

クロスプラットフォームアプリで游明朝を使うときは、次のことをお勧めします

- **標準の太さとしてWindowsでは"Yu Mincho Demibold"を使い、Macでは"YuMincho (Medium)"を使う**
- **WindowsでDemiboldのさらに太い表示を使い、Macの太字相当にする**

このようにして、あらためて、WindowsとMacでの游明朝の表示比較をChromeで行いました。Macでは標準をRegular、Windowsでは標準はDemiboldとします。それら太字は上記の方法で行います。その結果を表にまとめると次のようになります。

||Windows(Chrome)|Mac(Chrome)|
|---|---|---|
|標準(WinはDemibold)|![Chrome-win_YuMincho_Demibold-single.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/557342/769ad6cf-c041-bea7-d842-3e5a9aeb5e7d.png)|![Chrome-mac_YuMincho-single.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/557342/7bc1953e-9645-5f20-405a-85799b7968ca.png)|
|太字(Winは上記手法)|![Chrome-win_YuMincho_Demibold_font-face-weightbold.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/557342/befbe7a5-852d-6981-bae4-4c95d0b75639.png)|![Chrome-mac_YuMincho_Demibold-single.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/557342/3ca305fa-d6d0-e805-e145-6d0786e9bc09.png)|

なんとなく、OSの差を吸収して、同じような太さで表示できているのではないでしょうか。

## さいごに

誰かの参考になれば幸いです。このあたり、もっと詳しい人はたくさんいると思うので、いい加減なことを書いていたらご指摘ください。