Pygame Zeroで日本語を表示しようとしたとき、文字化けや豆腐(□)表示に悩んでいませんか?
結論を先にお伝えすると、「日本語対応のフォントファイルを用意し、スクリプト内でそのファイル名を指定する」だけで解決できます。
この記事では、Pygame Zeroで日本語フォントが文字化けする原因を整理したうえで、実際に動作するサンプルコードを交えながら3ステップで解決方法を解説します。ゲーム開発で日本語テキストを正しく表示させたい方はぜひ参考にしてください。
この記事で解決できる症状
以下のような状況に心当たりがある方を対象にしています。
screen.draw.text()の第一引数に日本語文字列を渡したら文字化けした- 日本語が「□□□」や「???」のように表示される
- 英語テキストは表示できるが、日本語だけ上手くいかない
Pygame Zeroで日本語フォントが文字化けする5つの原因
文字化けが起きる原因はいくつか考えられます。順番に確認していきましょう。
① 使用フォントが日本語文字セットに対応していない
最も多い原因です。Pygame Zeroがデフォルトで使用するフォントは欧文フォントであることが多く、日本語のグリフ(字形データ)を持っていません。そのため日本語を渡しても表示できず、文字化けや豆腐表示になります。
② フォントファイル名の指定が間違っている
Pygame Zeroはフォントファイル名の大文字・小文字を区別します。たとえば NotoSansCJK.ttf を notosanscjk.ttf と指定してもエラーになります。ファイル名は必ず正確に記述してください。
③ フォントファイルの保存先(パス)が正しくない
Pygame Zeroでは、フォントファイルはプロジェクトフォルダ直下の fonts/ ディレクトリに置く必要があります。別の場所に保存していると読み込みに失敗します。
your_game/
├── game.py # メインスクリプト
└── fonts/
└── myfont.ttf # ← ここにフォントファイルを置く
④ 文字エンコーディングの問題
Pythonスクリプトの文字エンコーディングがUTF-8以外に設定されている場合、日本語文字列が正しく扱われないことがあります。現代の環境ではほぼ問題になりませんが、古いWindows環境やShift-JIS設定のシステムでは注意が必要です。スクリプトの先頭に以下を追加することで明示できます。
# -*- coding: utf-8 -*-
⑤ フォントファイル名に大文字が混在している
Pygame Zeroの内部処理の都合上、フォントファイル名はすべて小文字にしておくことが推奨されています。大文字が含まれていると環境によっては読み込みに失敗する場合があります。
【3ステップ】Pygame Zeroで日本語フォント文字化けを解決する方法
原因が分かったところで、実際の解決手順を説明します。
ステップ1:日本語対応フォントファイルを用意する
まず、日本語グリフを含むフォントファイル(.ttf または .otf)を用意します。以下のフリーフォントが入手しやすくおすすめです。
- Noto Sans JP(Google Fonts):商用利用可・視認性が高い
- 源ノ角ゴシック(Source Han Sans)(Adobe):高品質なオープンソースフォント
- IPAフォント / IPAexフォント(IPA):日本語表示に特化した定番フォント
※ システムフォント(メイリオ、MSゴシックなど)をPygame Zeroで直接参照する方法もネット上には記載がありますが、筆者の環境では再現できませんでした。フォントファイルを直接プロジェクトに組み込む方法が最も確実です。
ステップ2:フォントファイルをfontsフォルダに配置する
ダウンロードしたフォントファイルを、ゲームスクリプトと同じフォルダ内の fonts/ ディレクトリに配置します。ファイル名はすべて小文字・半角英数字にしておくと安全です。
your_game/
├── game.py
└── fonts/
└── notosansjp.ttf # 小文字・シンプルな名前に変更して配置
ステップ3:スクリプトでフォントファイル名を指定する
screen.draw.text() の fontname 引数にフォントファイル名(拡張子なし)を指定します。
# game.py
TITLE = "日本語テストゲーム"
WIDTH = 800
HEIGHT = 600
def draw():
screen.clear()
# fontname には fonts/ フォルダ内のファイル名(拡張子なし・小文字)を指定
screen.draw.text(
"こんにちは、Pygame Zero!",
center=(WIDTH / 2, HEIGHT / 2),
fontname="notosansjp", # fonts/notosansjp.ttf を参照
fontsize=40,
color="white"
)
これで日本語テキストが正しく表示されるはずです。
動作確認とよくあるトラブルシューティング
エラー:FileNotFoundError / フォントが読み込めない
以下のチェックリストを順番に確認してください。
- ✅
fonts/フォルダがgame.pyと同じ階層にあるか - ✅
fontname=に指定した文字列がファイル名(拡張子なし)と完全に一致しているか - ✅ ファイル名に大文字・スペース・日本語が含まれていないか
- ✅ フォントファイルの拡張子が
.ttfまたは.otfになっているか
フォントは読み込めているのに日本語だけ表示されない
フォントファイル自体が日本語グリフに対応していない可能性があります。Noto Sans JPなど、日本語対応が明記されているフォントを使用してください。フォントファイルのサイズが極端に小さい場合(数十KB程度)は欧文専用フォントである可能性が高いです。
Pythonスクリプト自体が文字化けして保存される
エディタの文字コード設定をUTF-8に変更して保存し直してください。VS CodeではステータスバーのエンコーディングをクリックしてUTF-8を選択できます。
まとめ:Pygame Zeroの日本語フォント文字化けは3ステップで解決できる
Pygame Zeroで日本語フォントが文字化けする問題は、以下の3ステップで解決できます。
- 日本語対応フォントファイル(Noto Sans JP など)を用意する
- プロジェクトの
fonts/フォルダに小文字・半角ファイル名で配置する screen.draw.text()のfontname引数でファイル名を指定する
この方法はWindows・macOS・Linuxいずれの環境でも動作します。日本語テキストが正しく表示されるようになれば、ゲームの演出やUI表現の幅が大きく広がります。ぜひ試してみてください。
Pygame Zeroの他の使い方については、Pygame Zero入門記事一覧もあわせてご参照ください。
YouTube解説動画
本記事の内容を動画でも解説しています。コードを手を動かしながら確認したい方はこちらもどうぞ。
📚 関連記事
- Pythonの「たった1文字」で3時間溶けた話|相対インポートの罠を完全解説— ファイルパス指定の注意点
- Pythonでエスケープシーケンスを無視(回避)する方法— パス指定時のエスケープ処理
- 【raw文字列】Pythonで文字列の前に「r」を付ける意味— ファイル名指定時の文字列処理
- Python初心者のためのファイル操作入門|open関数の使い方とモード(r/w/a)の違いを徹底解説— ファイル読み込みの基礎知識








