日本語フォント
前書き
今回は日本語化するうえでお世話になる日本語フォントの話を少し。
ゲームで使用するためにフォントは大まかに分けて画像、ダイナミック(フォントファイルをそのまま使用)の2つとなります。どちらの場合も(ゲームエンジンによりますが)フォント内に日本語が含まれていなければ表示することができません。
現在、日本語フォントには様々なものがあります。個人の方が作成されたものやGoogleが提供するフォント(通称Google Font)などです。これらの中には一部有料のものもありますが、結構な数の無料で使用できるフォントもあります(一般的にフリーフォントと呼ばれています)。
特にGoogle Fontは数多くあり、NotoSans、NotoSerifにはお世話になった人も多いのではないでしょうか? 個人が作成されたもので言えば、昔からある「しねきゃぷしょん」が有名です。
NotoはNo Tofuから付けられたもので、Tofuというのは表示するための字がないときに表示される「□」が豆腐に似ていることから、いつしかこの四角形を豆腐と言うようになりました。つまりNotoは「□表示がないフォント」を意味しています。
収録字数
収録字数とはなんぞや?という方もいらっしゃるかと思いますが、フォントにはすべての文字が含まれているわけではありません。Google FontのNotoシリーズでは約16730文字が含まれており、しねきゃぷしょんには4370文字が含まれています。これが収録されている字の数、つまり収録字数です。
しねきゃぷしょんは平仮名、片仮名、記号と常用漢字(約2100文字)+αの文字(実際には約3600文字の漢字が含まれています)が収録されています。これをWordやEcxel、テキストエディタなど入力した文字がすぐに確認できるアプリで使用する分にはいいのですが、日本語化の作業をGoogleスプレッドシートやオンラインの翻訳ツール上で編集している場合にはすぐに確認することは難しいでしょう。
フォントにはそれぞれ収録されている文字が決まっているため、それを理解したうえで使用しなければ、いざゲームに使用したら文字が表示されず意味不明な翻訳になる可能性もあります。
私が目にした範囲ですが、フォントにはすべての字が含まれていると思っている方がいらっしゃるということです。普通に使う分にはそれでも構いませんが、日本語化をしている方やゲームの翻訳家はある程度理解を深め知っておくことが必要だと思います。
なぜなら、ゲームに使用するフォントがいつもNotoシリーズだとは限らないからです。例えばポップなゲームにNoto SansやNoto Serifを使用したらどうでしょうか? その逆でも構いません。きっとゲームや紹介サイトのレビュー欄やコメント欄に「フォントがゲームに合っていない」と書かれてしまうのではないでしょうか?
もちろん、ただ書きたいだけの人もいると思います。不思議に思うのはこういう方はフォントが全て無料で勝手に利用できると思っているのでしょうか? そもそもリーフォントでも商用利用を認めていないものもありますし、きちんとしたフォントは高額です。
また外国人は漢字は絵や図形のように見えるともいいますから、あまり気にしていないと思いますし、日本語さえ表示できれば何でもいいと思っているかもしれません。
閑話休題。
そうならないためにも日本語化や翻訳家で日本語フォントを自分で選択したり提案できる場合、フォントに収録されている字を理解して利用してほしいと思います。
では、どうしたらフォントに含まれている字を知ることができるのでしょうか? また含まれている字が分かったとして、それをどのように利用したらいいのでしょうか?
フォントからの抽出
世の中には秀逸なアプリもあり、EnumCharというものが公開されています。インストールされているフォントを読み込み、ユニコード領域ごと(もしくは全て)の字を表示してくれます。表示領域はテキストボックスになっているそうなのでコピー&ペーストで文字一覧を作ることもできそうです。
もしプログラミングができる技能があるなら自分でプログラムを作成することもできるでしょう。Pythonであればそこまで難しいプログラムではありませんので挑戦してみていいかもしれません。
検索の方法
では実際に使用するにはどうしたらいいのでしょうか? さすがに1文字ずつ調べるわけにはいきません。そこで役立つのが正規表現を使った検索です。たとえばMeryやVSCodeというテキストエディタでも可能です。


上図はとあるゲームの翻訳ファイルで使用した文字のみにしたテキストです。検索文字は「しねきゃぷしょん」の収録文字です。背景色のついている文字がしねきゃぷしょんに含まれていない字です。ただし、この方法は簡単ではあるものの検索する文字列が多い場合、動作が緩慢になります。
検索する方法はを [^フォントの収録字] のようにします。太字の部分に抽出した字を入れます。たとえば「あいうえおかきくけこ」が抽出した字だとした場合、[^あいうえおかきくけこ] となります。これで検索した場合、太字以外の文字が検索に引っかかります。
ただし、気をつけないといけないのは一部の半角記号です。正規表現にはメタ文字と呼ばれる専用の記号があります。これらを対象とする場合は正規表現のルールに従ってエスケープする必要があります。
一般的なフォントの場合、下記の文字列が含まれています(稀に含まれていない字があることがありますが、本当に稀ですが)。この文字列を「\s!-~」と省略することができます。最初の\sは半角スペース、!-~は範囲指定であり、文字列の最初(!)から最後(~)までの字を表しています(下の文字列には冒頭に半角スペースが入っています)。この文字列以外はそのまま改行なしで連結します。終了したら上記のあいうえおかきくけことしたところに連結した文字列を入れればOKです。
なお [ ] や ^ はメタ文字です。正規表現の細かい説明はしませんので自分で調べてみましょう。
!"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~
Googleスプレッドシートの場合は関数を使って同じような処理ができます。例えばA1に対象の文字列、C1に使用できる文字列が入っているとします。B1に検索するための関数を入力します。
=iferror(REGEXEXTRACT(A1,"[^" & C1 & "]"))
これでB1に使用できない最初の1字が表示されます。これは関数を使用する限界ですので仕方がありません(最初の1字を処理し、もし指定のセルに他の使用できない文字があればまた表示されます。何も見つからない場合は何も表示されません)。
もし複数文字を一度に表示したい場合はGoogle Apps Scriptを使用してプログラミングをするしかありません。難易度がグッとあがりますが、複数が一気に表示されるのでわかりやすいと思います。
Googleスプレッドシートの問題点は検索してもセルが対象となるためどこに字があるか分からないところでしょうか。これはテキストエディタに貼り付けるなどして対応するしかないかもしれません(短文であれば目で追いかけてわかるとは思いますが)。
※厳密には以下のプログラムを改変すれば位置を特定することはできます。
function mojichk(args) {
/*使用できる文字を記載*/
const reText = "(ここに使用できる字を代入)"
/*正規表現を定義*/
const regexx = new RegExp("[^"+reText+"]","g")
/*上記文字列以外の文字を検索*/
let res = String(args).match(regexx);
/*使用していない文字列が見つかったらまとめて表示*/
if(res != null){
const result = [... new Set(res)];
result.sort();
return result.join("");
}
}
上記コードをGoogleスプレッドシートのメニュー「拡張機能→Apps Script」で表示された「コード.gs」内に入力します。(ここに使用できる字を代入)とある場所(ダブルクォーテーションで囲まれた中)に使用できる字を入れます(その際にメタ文字になる部分をエスケープ処理しましょう。前述の半角文字が含まれているならその部分を「\s!-~」と置き換えるのが一番簡単だと思います。
スクリプトを保存した後、Googleスプレッドシートへ戻ります。このプログラムは独自関数となっているため、調べたいセルがA1としたらどこかのセルに「=mojichk(A1)」と入力すれば使用できない文字が関数を入れたセルに出力される仕組みです。ただし独自関数は動作が重いため、標準の関数を使用するよりは処理に時間がかかります(そのため、確認が終わったら独自関数を削除したほうがいいでしょう)。
今回の記事で知ってほしかったことはフォントには収録字数があり、全ての字が含まれているとは限らないこと、フリーフォントであっても商用利用ができるとは限らないこと、そもそも外国人にゲームに合った日本語フォントを求めるのは難しい(漢字が絵や図形に見えるかもしれないから)ということです。
また欧文と違って必要な文字数が多く、漢字などは画数が多ければデザインするにしても難しいということもあります(欧文は字形もシンプルでデザインしやすい)。
様々な理由からフォントが選択されている場合もありますので、一概に「フォントが合っていない」「ダサい」などの言葉を使うのではなく「このフォントにしたらもっとよくなるのではないか?」という提案をしていただければと思います。
いいなと思ったら応援しよう!
