Segoe UIとYu Gothic UIを合成し (て失敗し) た話

# 円記号問題は百害あって一利なし
本来、Windowsのディレクトリ セパレーターは ``円記号 (¥)`` ではなく ``backslash (\)`` なのだが。Windowsの日本語環境では ``円記号 (¥)`` で表示されているのが死ぬほど気持ち悪い。

``S-JIS`` には ``バックスラッシュ`` が収録されていないと思い、グリフが無さそうであきらめていたが。そもそも ``Yu Gothic UI`` は ``游ゴシック`` と ``Segoe UI`` との合成フォントらしい。であれば、 ``Segoe UI`` から ``バックスラッシュ`` のグリフが補完出来るのではと思い、 ``Yu Gothic UI`` を真っ当なフォントに修正しようと、合成に挑戦してみた。

※ なお本記事では ``U+005C`` を ``backslash (\)`` から ``円記号 (¥)`` に置き換えているフォントは **真っ当なフォントではない** と言う扱いで進めます。

http://www.jiyu-kobo.co.jp/os-installed-y/

http://www.jiyu-kobo.co.jp/wp@test/wp-content/uploads/2020/11/compatibility201102.pdf
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/72257/ab60e059-7703-5c3b-57de-e16db6d3cf7c.png)
(Windowsだけ置き換えているのが滑稽すぎる。)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/72257/56e97d2b-b84e-56d0-758f-9b70a6dbef76.png)

#(結論) あまりうまく行かなかった。。。
普段は 。[``Meiryo UIも大っきらい!! (No!! Meiryo UI)``](http://tatsu.life.coocan.jp/MySoft/WinCust/index.html) で [``Migu 1P``](https://mix-mplus-ipa.osdn.jp/migu/) 置き換えて使っていたが、置き換えられるのには限界があり、フォントの合成にチャレンジしてみたのだけど。
ダイアログのフォントとか、色々とおかしくなってしまった。。。取り敢えず使い物にならないので、戻しました(苦笑)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/72257/cffd742b-14c0-3243-4cee-ae84c818bd4e.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/72257/560a0087-0194-37ec-aa64-4672ab4adee3.png)

ぱっと見は良さそうだけど。。。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/72257/b2d53a7d-1a35-2729-4894-a954e2770797.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/72257/3c93708e-b810-f3a1-27df-f9942105e8bc.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/72257/c25e5595-a479-58a4-d8a2-24a8d297e5a9.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/72257/3179fbc7-e250-6bf9-cedd-6b0c799b289e.png)

(´；ω；&#x60;)・・・
しかし、``Segoe UI`` はとっても見栄えが良くて好きになる。

# 合成とインストール
※ 自己責任でお願いします。
※ 自己責任でお願いします。
※ 自己責任でお願いします。
※ 自己責任でお願いします。
※ 自己責任でお願いします。

## 環境
* Windows 10 Pro
* [FontForge](https://fontforge.org/en-US/)
* [UniteTTC](http://yozvox.web.fc2.com/556E697465545443.html)

## 手順
###手順① 必要なフォントを作業用にコピー
``Segoe UI`` と ``游ゴシック`` をコピーしてくる。

```bat:
@REM 游ゴシックのTTC
copy C:\Windows\Fonts\YuGothB.ttc .\
copy C:\Windows\Fonts\YuGothL.ttc .\
copy C:\Windows\Fonts\YuGothM.ttc .\
copy C:\Windows\Fonts\YuGothR.ttc .\

@REM Segoe UIのTTF
copy  C:\Windows\Fonts\segoeui.ttf .\
copy  C:\Windows\Fonts\segoeuib.ttf .\
copy  C:\Windows\Fonts\segoeuii.ttf .\
copy  C:\Windows\Fonts\segoeuil.ttf .\
copy  C:\Windows\Fonts\segoeuisl.ttf .\
copy  C:\Windows\Fonts\segoeuiz.ttf .\
copy  C:\Windows\Fonts\seguibl.ttf .\
copy  C:\Windows\Fonts\seguibli.ttf .\
copy  C:\Windows\Fonts\seguili.ttf .\
copy  C:\Windows\Fonts\seguisb.ttf .\
copy  C:\Windows\Fonts\seguisbi.ttf .\
copy  C:\Windows\Fonts\seguisli.ttf .\
```

※一括でコピってるけど、使わないのもある。

###手順② TTCの分割
TTCはTTFの集合体。
作業はTTFで行うため、ため分割する。

```bat:command
FOR %A IN (*.ttc) DO unitettc64.exe "%A"
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/72257/ba7059c8-ab20-6cc7-c2b5-e36b1f93a87c.png)
※生成されたTTFの内、赤字のものが ``Yu Gothic UI`` のため、それらと ``Segoe UI`` を合成する。


###手順③ 合成
``ベース フォント`` に対して、 ``追加フォント`` を足し込むイメージ。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/72257/3f80dbbb-0a6b-115f-5ffd-9afa46c95f4c.png)
※ 字游工房で公開されている資料とは突合していないため、不正確かもしれない。

諸々作業が終わった後、PDFに記載されていることに気づいた(苦笑)
正確な情報は [字游工房で公開されている資料](http://www.jiyu-kobo.co.jp/wp@test/wp-content/uploads/2020/11/compatibility201102.pdf) を参照。

``Yu Gothic UI`` 系のフォントに対して、以下の手順を繰り返す。

(1). ``FontForge`` で ``Segoe UI フォント``を開く
(2). ``[エレメント]`` > ``[フォントの統合]`` 選択し、 ``Yu Gothic UI フォント`` を読み込ませる。
(3). ``カーニング`` についてのダイアログが表示されるので ``[いいえ]`` を選択する。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/72257/327267db-7a2b-3e32-c648-0f46feb364b1.png)

(4). ``[エンコーディング]`` > ``[エンコーディングを変換]`` > ``[ISO 10646-1 (Unicode, 完全)]`` を選択する。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/72257/7d49fb64-bbed-31f3-599b-2ef83b2995e5.png)

(5). ``FontForge`` で ``Yu Gothic フォント``を開く
(6). ``[エレメント]`` > ``[フォント情報]`` を開き、 ``Yu Gothic フォント`` のフォント情報を転記する。

1.  ``PS Names``
2.  ``TTF名``  
    ※ 両フォントにある属性のみコピー。  
    ※ オリジナルの ``Yu Gothic フォント`` に無い属性は削除する。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/72257/8a599e64-7b91-3811-6e4d-823ab9885e76.png)

(7). ``[ファイル]`` > ``[フォントを出力]`` を選択し、 ファイル名を入力し、 ``[生成]`` ボタンを押下して出力する。
  ※ ``[Validate Before Saving]`` は ``OFF`` にする。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/72257/5b132fdc-a00a-6fad-cec0-40f05a3a2d9d.png)
(上書きしても良いけど、別名がベター。自分で分かる名前で。)

``Yu Gothic UI`` 系のフォントに対して、以上の手順を繰り返す。


### 手順④ TTCに結合
合成フォントでTTCファルを作り直し。
以下のコマンドは、``Yu Gothic UI`` のTTFファイルを上書きした想定のコマンド。

```bat:command
unitettc64.exe YuGothB.ttc YuGothB001.ttf YuGothB002.ttf YuGothB003.ttf
unitettc64.exe YuGothL.ttc YuGothL001.ttf YuGothL002.ttf
unitettc64.exe YuGothM.ttc YuGothM001.ttf YuGothM002.ttf
unitettc64.exe YuGothR.ttc YuGothR001.ttf YuGothR002.ttf
```
※ このツールって、スイッチじゃなくて、引数の数で生成 or 結合の挙動が変わるの、申し訳ないけどちょっと気持ち悪い。。。

### 手順⑤ フォントのインストール事前作業
``游ゴシック`` のTTCファイルの所有権を奪取し、 ``Adoministrators`` に ``フル コントロール`` を与える。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/72257/cfa588df-f127-d288-b7ff-f966dde4defa.png)
※ ``游ゴシック`` のTTCファイル、全部やるます。
※ 手順は腐るほど転がっているので割愛。

### 手順⑥ フォントのインストール
 ``回復オプション`` の ``コマンド プロンプト`` を起動してコピーする。 
1. ``SHIFT``キーを押下しながら ``再起動`` を選択。
2. ``[オプションの選択]`` > ``[トラブルシューティング]`` > ``[コマンド プロンプロン]`` を選択。
3. よしなに。

```bat:
@REM before
dir C:\Windows\Fonts\YuGoth*

@REM 上書き
copy /y YuGothB.ttc C:\Windows\Fonts\YuGothB.ttc
copy /y YuGothL.ttc C:\Windows\Fonts\YuGothL.ttc
copy /y YuGothM.ttc C:\Windows\Fonts\YuGothM.ttc
copy /y YuGothR.ttc C:\Windows\Fonts\YuGothR.ttc

@REM after
dir C:\Windows\Fonts\YuGoth*
```
※ システム ドライブは状況によって変わるので、適宜確認しながら作業してください。

### 手順⑨ 以上
以上。

## トラブル シューティング
Q. なんで ``Yu Gothic UI`` のTTCのグリフを直接 ``backslash`` に置き換えないの？

A. ``U+005C`` と ``U+00A5`` がリンクされてて、それの解除の仕方がわかんなかったんだよ。。。
(´；ω；&#x60;)

Q. ``FontForge`` でコピペできない。

A. ``コンテキスト メニュー`` で頑張ろう。 (プロセスが違うとコピペ出来ない？)

Q. ``FontForge`` 文字入力がうまく入力できない。

A. ``US キーボード`` を使おう。取り敢えず、英字はまともに入力出来る様になる。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/72257/87c8f3c7-61dc-db14-82e9-d5358495da22.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/72257/dcb58d70-ae1f-981e-c4e6-b6cc76957247.png)
個人的には ``US インターナショナル`` が欧州文字も入力出来て、おすすめ。



# (後述) 円記号問題について
日本ではこれまで ``ASCII領域`` の ``0x5C`` を ``backslash (\)`` ではなく ``Yen (¥)`` として使っていた。そのため日本ではWindowsの ``ディレクトリ セパレータ`` や、 ``エスケープ シーケンス`` が ``円記号 (¥)`` として認識されている。

と言うのも、ASCII領域には実は再定義可能な文字がいくつかあり、そのうちの1つが ``backslash (\)`` だった模様。計算機が真っ先に活躍したであろう市場の1つに金融系があると考えると、通貨記号が必要になるのは至極当然のため、 ASCII時代から ``円記号 (¥)`` に置き換えて使用していたのだと推察。

しかし、``0x5C`` を ``backslash (\)`` として扱っている ``ISO-8859`` をベースに拡張されている ``UNICODE`` では ``U+005C (0x5C)`` は ``Yen (¥)`` ではなく ``backslash (\)`` である。まぁ当然である。特異なS-JISをベースにする理由もない。

まぁ半角カタカナ同様、移動した文字として扱えば良いのにと思うだけど。基本的に、様々な文字コードの中で互換性を持つ扱いとしている ``ASCII領域`` の基本文字ため、ちょっと一筋縄では行かない。

そして、日本のMicrosoftは ``U+005C (0x5C)`` のフォント グリフを ``Yen (¥)`` にして回避しており、さらに混乱させているのは ``YenSign問題`` である。

ただし、これは日本固有の問題では無く、``0x5C`` を  ``backslash (\)`` から通貨記号に置き換えていた国がいくつか有る様で。この対応自体は誤りではないのだけど。知れば知るほど、利点が無い。こんなのユーザーが認識改めて、システムを改修するべき話である。改修規模を軽視するつもりも無いが、プログラマやSEなど、プログラマへの認知も阻害している要因になっており、正直こんなの要らない機能でしか無い。

先日も、プログラム系の記事の中で、パスを表現で、``ディレクトリ セパレーター`` に態々 ``U+00A5`` の ``円記号 (¥)`` を使っている馬鹿なページを見かけて辟易とした。(他にも ``全角の円記号 (￥)`` とか、、、) ``ディレクトリ セパレーター`` は ``U+005C`` だ！

それでも必要だと言うのであれば、Microsoftはちゃんとその理由などを明示的に示すべきである。

昔からある ``MS Gothic`` や ``MS 明朝``、 ``メイリオ`` も時期的には仕方ないとして。``游ゴシック`` まで置き換える必要があったのだろうか。正直、微塵も必要性が感じられない。通貨記号使っているシステムが改修するべき問題だろう。実際、YodobashiのGOLD POINTの3Dセキュア認証ページは、2019年3月頃には遅いながらも改修がされていた。
![image.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/72257/4d869c87-93ef-1d0f-ba62-7ec03ceb0862.jpeg)
(以前チェックしていたときのSS。画角が違うのは、使っていたAndroid端末が違うからだと思うけど、何れも、差し替え無しフォントで検証。)
他の通貨記号を扱うサイトも同様に改修されていると思うが、これが真っ当な対応だと思う。

さっさと、このフォント置き換えは悪法として撤廃してほしい。
あと、日本語キーボードで直接 ``0xA5 (¥)`` が打てる様に、キーボード配列も見直してほしい。英語キーボード配列をベースにして。

尚、Androidでもこの悪法を行っている愚かなフォントが存在するので、実際にはMicrosoftだけが罪人ではない。だけど、天下のMicrosoft様が **鶴の一声** があれば、業界も変わりやすいと思う。UNICODEの健全な将来のためにも、頼んます！もう潮時でしょう！

正直パッケージも買って ``游ゴシック`` と ``游明朝`` の ``バックスラッシュ`` も補完しようと思ったけど。流石に1書体で3万とかムリゲー過ぎる。。。こんな **マイノリティのエゴ** のために、十数万も出すなら、Windows使うの辞めるよ、、、、マジで。。。


# (おまけ) ``Migu 1P`` によるUI
[``Meiryo UIも大っきらい!! (No!! Meiryo UI)``](http://tatsu.life.coocan.jp/MySoft/WinCust/index.html#DLnoMeiryoUI) を使って色々試した結果。WindowsのUIフォントとしては、[``Migu 1P``](https://mix-mplus-ipa.osdn.jp/migu/) が最もベターだったので、ここ数年使っている。
Windowsの ``ディレクトリ セパレーター`` で円記号問題にゲロ吐いている同士には、オススメしたい。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/72257/18be9210-4396-9970-c842-d16f775b0715.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/72257/8827d8da-3d88-ca85-a933-f8185b160137.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/72257/20f95dc5-a5bd-a301-0a07-e6a5d3834fb7.png)
(NOTOとかTakao、梅とか試したけど。個人的に一番好みだった。)


# 参考 (謝辞)
* FontForge Open Source Font Editor
  https://fontforge.org/en-US/

* UniteTTC
  http://yozvox.web.fc2.com/556E697465545443.html

* Vista のメイリオを改造版に置き換える — バックスラッシュをバックスラッシュとして表示するために: まじかんと雑記
  http://magicant.txt-nifty.com/main/2009/04/vista-ddf5.html

* フォントの合成 - ふなWiki
  https://blue-red.ddo.jp/~ao/wiki/wiki.cgi?page=%A5%D5%A5%A9%A5%F3%A5%C8%A4%CE%B9%E7%C0%AE

* TTCフォントをTTFに分解する方法。 - Qiita
  https://qiita.com/maboy/items/9f64d406c830aab548b1

* Windowsカスタマイズシリーズ
  http://tatsu.life.coocan.jp/MySoft/WinCust/index.html

* Miguフォント : M+とIPAの合成フォント
  https://mix-mplus-ipa.osdn.jp/migu/