日本語フォントを変更してみた Part2




BytaFontのバージョンアップにより、手軽に日本語フォントの変更が可能になりました。
Winterboardで完成させるには至りませんでしたが、当初の目的は果たせました。
このページは、記念に残しておきます。






iPhone4(iOS4.x)では、「日本語フォントを変更してみた」を紹介しました。
これは、「フォントを入れ替える」という変更方法でした。
「フォントの入れ替え」でネックになるのは、入れ替え作業と不便さではないでしょうか?
その日の気分でフォントを変更したいと思っても、入れ替え作業を考えるとイヤになるし、時間のある時に予め作っておいたとしても、ファイル名が決まっているから、作ったフォントの管理が面倒だったりします。
その通りにやればできるように、1つ1つの手順を紹介したつもりですが、それでもできない方がいらっしゃるので、「フォントを入れ替える」のではなく、「フォントを切り替える」方法を紹介することにしました。
iPhone4(iOS4.x)の時に紹介した「Info.plistで遊ぶ」で、英数フォントでやっていた方法なのですが、これを日本語に拡張しただけです。
ですので、「日本語フォントを変更してみた」の続編かと思う方が多いかと思いますが、実際には「Info.plistで遊ぶ」の続編でございます。

Info.plistでフォントを変更できることは、1年前に紹介したのですが、日本語に関して私の中で合格点ではなかったため、紹介には至りませんでした。
今回「iOS5の棚」では、「artworkファイルの展開など、いろいろな封印を解いているので、「切り替え」による日本語フォントの変更も、封印を解いて紹介します。
私の中では満点ではありませんが、合格点には達しているので、一般公開レベルです。

<注意>
Winterboard必須です。
ファイル名の変更(リネーム)くらいできる方を対象とします。

いきなりやってみる

では、以下のファイルをダウンロードして下さい。
ダウンロード ー> フォント変更(明朝)

ファイルは、Info.plistだけが入ったテーマファイルで、Info.plistの内容は以下の通りです。

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN"              "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
 <dict>
   <key>FontName-HiraKakuProN-W3</key>
   <string>HiraMinProN-W3</string>
   <key>FontName-HiraKakuProN-W6</key>
   <string>HiraMinProN-W6</string>
   <key>FontName-Helvetica</key>
   <string>Times New Roman</string>
  </dict>
</plist>

ダウンロードが好きではない方は、上記の内容を参考にファイルを作成して下さい。

テーマファイルをiPhoneへ転送し、Winterboardで適用し、Respringして下さい。

たったこれだけでフォントが変わってしまいます。

右図が、その表示結果のスクリーンショットです。
(上記ファイル内容にもありますが、雰囲気を保つために英数フォントも変更しています)

iPhoneの日本語表示には「ヒラギノ角ゴシック」というフォントが使われていることはご存知かと思います。
さらにiPhoneには「ヒラギノ明朝」もインストールされているため、これを使って、誰でもフォント変更を体験できると思います。

Winterboardを使うことで、手軽にフォントを切り替えることができるというのは、いかがでしょうか?

<注意>万能ではありません

日本語フォントを追加する

「フォントの切り替え」ができるようになると、次にやりたくなるのが、「フォントの追加」だと思います。
日本語フォントの入れ替え」では難しかったのですが、「切り替え」という概念を持つと、切り替えるためのフォントを求めることは自然な流れだと思います。
ここでは、iPhoneにフォントをインストール(登録)する方法を紹介しますが、オリジナルファイルに変更を加えるため、必ずバックアップを取って下さい
さらに、この方法は私がやってみた結果であって、もっといい方法があるかもしれませんので、その辺はご理解下さい。

フォントを用意する

当たり前ですが、切り替えたいフォントは自分で用意して下さい。
方法を確立させながらのページ作成ですので、まだOTFファイルしか確認していません。
もし、ぜひ使いたいフォントがTTFやTTCでしたら、以下のサイトでOTFに変換して下さい。
☆Free Online Font Converter(とてもシンプルです)
  http://www.freefontconverter.com/
☆Free Online Font Converter(とても高機能です)
  http://www.henkan-muryo.com/font-converter.php

用意したフォントを、以下のディレクトリにコピーして下さい。

フォントファイルコピー先    /System/Library/Fonts/Cache/


ヒラギノ明朝もあるので、確認してみて下さい。

ここでのサンプルフォントを何にしようかと考えていたのですが、「日本語フォントの入れ替え」ではMacのフォントを使ったので、今回はWindows用のフォントを使おうと思います。
そこで、細字も太字もあり、TTFである「メイリオ」でやってみることにします。
このメイリオはTTFですので、OTFに変換してからiPhoneに転送します。
実際に変換したファイル名は、「meiryo.otf」と「meiryob.otf」でしたので、これらを転送しました。

<追記>
オリジナルメイリオ(TTC)でも、ほにゃ字(TTF)でもできたので、敢えてOTFに変換する必要はなさそうです。

ページトップへ

フォントを登録する

先程コピーしたフォントを、iPhoneに登録するために、ファイルを編集します。
編集するファイルは、以下のディレクトリにあります。

編集ファイルの場所    /System/Library/Fonts/

私のiPhoneは「N90」ですので、この場所にある「CGFontCacheN90.plist」を編集します。
iFileで確認すると面白いのですが、このCGFontCacheN90.plistはシンボリックリンクであり、その本体は「CGFontCacheReduced_H_.plist」でした。
したがって、本体である「CGFontCacheReduced_H_.plist」を編集します。
編集する時に、フォントの「ファミリーネーム」などの情報が必要になるので、Windowsの方は「FontCreator」をダウンロードして使って情報を得て下さい。OSXの方はFontForgeで情報を得て下さい。

実際の編集画面での紹介よりも、先に基本的な記述方法を紹介しておきます。

<key>Names</key>
<dict>
 <key>フォントのポストスクリプト名</key>
 <string>フォントの格納ディレクトリ</string>
</dict>

<key>TraitMappings</key>
<dict>
 <key>フォントのファミリーネーム</key>
 <dict>
  <key>Bold</key>
  <string>フォントのポストスクリプト名(太字用)</string>
  <key>Plain</key>
  <string>フォントのポストスクリプト名(標準)</string>
 </dict>
</dict>

すでにいくつかのフォントが、上記のフォーマットで登録されていますので、同じように追加すれば良いだけの話なんですけどね・・・

では、メイリオを登録していきましょう。
右の画像は、太字用メイリオのフォントネーム情報のスクリーンショットです。
フォントがそれぞれ持っている情報を使って登録していきます。

Names
CGFontCacheReduced_H_.plistを開きます。
<key>Names</key>
<dict>
          を探します。
この真下に、以下の内容を追加します。
(分かりやすくするためなので、真下じゃなくても構いません)
<key>Meiryo</key>
<string>/System/Library/Fonts/Cache/
            meiryo.otf</string>
<key>Meiryo-Bold</key>
<string>/System/Library/Fonts/Cache/
            meiryob.otf</string>

以下に、実際に編集した画面のスクリーンショットを示します。


そのまま編集を続けます。
TraitMappings
CGFontCacheReduced_H_.plistを開いたまま、下の方へ移動します。
<key>TraitMappings</key>
<dict>
          を探します。
この真下に、以下の内容を追加します。
(分かりやすくするためなので、真下じゃなくても構いません)
<key>Meiryo</key>
<dict>
 <key>Bold</key>
 <string>Meiryo-Bold</string>
 <key>Plain</key>
 <string>Meiryo</string>
</dict>

以下に、実際に編集した画面のスクリーンショットを示します。


これで、フォントの登録ができました。
iPhoneに認識させるために、Respringしておきましょう。

では、実際に登録できたか確認してみましょう。
確認に使用したのは、「Typefaces」です。脱獄アプリではありませんので、AppStoreにあります。
右のスクリーンショットでお分かりのように、メイリオの項目ができています。
ちゃんと、2種類がフォントファミリーとして登録できているので、これには感動してしまいました。

ページトップへ

テーマファイルを作る

フォントを追加(登録)できましたので、最初にいきなりやってみたのと同じ状態になった訳ですね。
では、追加したフォントで表示するテーマファイル(Info.plist)を作りましょう。
と言っても、最初に紹介したものとの違いはフォント名くらいですけどね・・・

以下に、Info.plistの内容を示します。

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN"              "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
 <dict>
   <key>FontName-HiraKakuProN-W3</key>
   <string>Meiryo</string>
   <key>FontName-HiraKakuProN-W6</key>
   <string>Meiryo-Bold</string>
  </dict>
</plist>

ダウンロードはこちら ー> フォント変更(メイリオ)


このテーマを適用した表示例を以下に示します。
右図が、このテーマを適用した表示結果のスクリーンショットです。

このページの冒頭に明朝体の表示で紹介したウィキペディアの「iOS」ページです。
明朝体とはかなりイメージが変わったことがお分かりいただけますでしょうか?

<注意>万能ではありません

サンプルいろいろ

まだまだ課題が残りますが、いろいろやっていく間に撮ったスクリーンショットを紹介します。
画像の増え方は不定期です。

日本語:ヒラギノ明朝
英数字:Times New Roman

日本語:メイリオ
英数字:無変更

日本語:小塚ゴシック(極細&極太)
英数字:無変更

日本語:ほにゃ字
英数字:無変更

考察

このページに何度か登場する注意書きの通りなのですが、このやり方は万能ではありません
Winterboardを使う以上、システム的にWinterboardが弱い場面だと、どうしても通常に戻ってしまいます。
この現象は、すでにCydiaやiFileで遭遇されている方も多いと思います。
解決できるか分かりませんが、今後の課題として、適用されないけど何とかしたい場面をいくつか紹介しておきます。


ホーム画面0ページ目にあたる検索画面です。
メモなどでも確認できますが、日本語テンキーが角ゴシックに戻っています。

ここを何とかしたいがために、数ヶ月悩みましたが、未だ解決に至りません。


<追記>
Twitterでも呟きましたが、面白い挙動を確認しました。バグなのか分かりませんが、上手く利用すれば解決できるかも・・・


アップル公式サイトをメイリオで表示しました。

きちんと表示されていますね。
何が問題なんでしょうね。

これは、「メイリオがきちんと表示される」ということが問題です。
サイトを作っていると分かるのですが、フォントもサイトデザインの一部ですので、制作者が望むフォントが閲覧環境にあるなら、それを表示させるような書き方をします。
このページは、ヒラギノ角ゴシックやメイリオだけでなく、MS P ゴシックやHelveticaなど10種類のフォントを指定しています。それに該当するものがなければ、ゴシック系のフォントを仕方なく表示するようになっています。
ですから、たまたまメイリオだったから表示されたのであって、指定されていないフォントで試そうと思っても、メイリオがインストールされていればメイリオで表示されてしまいます。

Winterboardで切り替えるためにインストールしたメイリオが仇になってしまう例ですね。
これは仕方がないと割り切るしかなさそうです・・・

2011/02/10

このままでは終われない・・・

ここからが、私が本領発揮する部分なのですが、結論から申しますと、行き詰まりました!!
このまま終わるものかと奮闘し、このまま終わってしまいそうですが、せっかくなので、行き詰まるまでを紹介しておきます。


それは、まだフォントの登録がろくにできなかった頃に遡ります。
まぁ、そんなに大袈裟にすることではないのですが、偶然日本語テンキーに表示されたことがあったのです。
今では、それを再現できるので、いつでもスクリーンショットが撮れるので載せておきますが、フォントの変更ができているのは、日本語テンキーくらいしか確認できていません。
ちなみに、「ふい字」です。
この時の、他の日本語表示は、何だか変な日本語フォントで表示されているのですよ。
こんな感じ・・・

漢字とカタカナのバランスは悪いし、そのカタカナですらよく見てみると、まるで1文字1文字を違う人が作ったかのようなバランスの悪さ・・・

このフォントの正体を調べてみると、中国語フォントの「簡体字」でした。
繁体字かもしれません。
まぁ、どちらにしても中国語フォントが表示されていることには変わりありません。


ここまでの、症状をまとめます。
☆きちんと登録されているフォントは、日本語テンキー以外に表示される
☆登録されていないフォントは、日本語テンキーのみに表示される

どっちも、ヒラギノ角ゴシックに対して変更を試みようとしているので、どっちかを取るしかありません。
仕方がないので、日本語テンキーは諦めて、このページを作り始めたのですが、逆の発想をしてみました。

次のような考え方をしました。
日本語フォントを表示しようとして中国語フォントが表示されるなら、その中国語フォントも置き換えられないだろうか?
このアプリ「Fontfaces」でもポストスクリプト名が分かるので、代替として表示されてしまった中国語フォント2種「STHeitiSC」と、「STHeitiTC」のLightとMediumで合計4種類を、これまでと同様の記述で「ふい字」を適用してみました。
結果は、残念ながら変更されませんでした。
これは、「ふい字」が登録されていないので、想定内です。でもガッカリ・・・
確認のために、登録されたフォントで試してみました。
肝心の部分は、以下の通りです。

<key>FontName-HiraKakuProN-W3</key>
<string>Huiji-plain</string>
<key>FontName-HiraKakuProN-W6</key>
<string>Huji-bold</string>
<key>FontName-STHeitiSC-Light</key>
<string>HiraminProN-W3</string>
<key>FontName-STHeitiSC-Medium</key>
<string>HiraminProN-W6</string>
<key>FontName-STHeitiSC-Light</key>
<string>HiraminProN-W3</string>
<key>FontName-STHeitiSC-Medium</key>
<string>HiraminProN-W6</string>

意気揚々とRespring!!

桜は咲きませんでした・・・

日本語テンキーを確認する前に、ホーム画面のアイコンラベルで、できていないことが分かってしまう・・・

とりあえず、上記の記述方法で、「ヒラギノ角ゴシック」が「ふい字」になっていることが、右のスクリーンショットでお分かりいただけると思います。

中国語フォントの4種も明朝体に変更されています。

なのに、アイコンラベルの変更すらできていない。
Safariの表示も、変更されている訳もないし・・・




行き詰まりました・・・

2012/02/23

その後

その後、いろいろ試してみましたが、フォントの登録方法で打開策がありそうです。
実際にはすでに確認しており、手応えも感じているのですが、そこに至るまでの手順を再現できないとページ作成できません。
したがって、復元orアップデートしたときに確認し、手順を確立してからのページ作成になります。
現在、iOS5.0.1でウィジェット開発していますが、最新のiOSは、5.1です。
iOS5.1の仮脱獄まではできているので、iOS5.1の完全脱獄ができるようになり、脱獄アプリやテーマなどiOS5.1での検証が終わってからフォントをやろうと思います。

2012/05/05

ページ作成用メモ

<key>FontName-HiraKakuProN-W6</key>の部分だが、namesにあるkeyの別で登録してある空白入りの名前でやると認識しない。
TraitMappingsはあまり重要ではない!?
やはり日本語フォントフォントはOTFじゃないとダメ!?
メイリオあれ???ttcでもいけるぞ