エラー解決

【解決済み】Pygame Zeroで日本語フォントが文字化けする原因と3ステップの対処法

PythonのPygameZeroで日本語フォントの文字化けを解決する方法

Pygame Zeroで日本語を表示しようとしたとき、文字化けや豆腐(□)表示に悩んでいませんか?

結論を先にお伝えすると、「日本語対応のフォントファイルを用意し、スクリプト内でそのファイル名を指定する」だけで解決できます。

この記事では、Pygame Zeroで日本語フォントが文字化けする原因を整理したうえで、実際に動作するサンプルコードを交えながら3ステップで解決方法を解説します。ゲーム開発で日本語テキストを正しく表示させたい方はぜひ参考にしてください。

📺 動画で確認したい方は、本記事末尾のYouTube解説動画もご覧ください。

この記事で解決できる症状

以下のような状況に心当たりがある方を対象にしています。

  • screen.draw.text() の第一引数に日本語文字列を渡したら文字化けした
  • 日本語が「□□□」や「???」のように表示される
  • 英語テキストは表示できるが、日本語だけ上手くいかない

Pygame Zeroで日本語フォントが文字化けする5つの原因

文字化けが起きる原因はいくつか考えられます。順番に確認していきましょう。

① 使用フォントが日本語文字セットに対応していない

最も多い原因です。Pygame Zeroがデフォルトで使用するフォントは欧文フォントであることが多く、日本語のグリフ(字形データ)を持っていません。そのため日本語を渡しても表示できず、文字化けや豆腐表示になります。

② フォントファイル名の指定が間違っている

Pygame Zeroはフォントファイル名の大文字・小文字を区別します。たとえば NotoSansCJK.ttfnotosanscjk.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ステップで解決できます。

  1. 日本語対応フォントファイル(Noto Sans JP など)を用意する
  2. プロジェクトの fonts/ フォルダに小文字・半角ファイル名で配置する
  3. screen.draw.text()fontname 引数でファイル名を指定する

この方法はWindows・macOS・Linuxいずれの環境でも動作します。日本語テキストが正しく表示されるようになれば、ゲームの演出やUI表現の幅が大きく広がります。ぜひ試してみてください。

Pygame Zeroの他の使い方については、Pygame Zero入門記事一覧もあわせてご参照ください。

YouTube解説動画

本記事の内容を動画でも解説しています。コードを手を動かしながら確認したい方はこちらもどうぞ。

📚 関連商品・おすすめ書籍

スッキリわかるPython入門 第2版 (スッキリわかる入門シリーズ)

もしも

スッキリわかるPython入門 第2版 (スッキリわかる入門シリーズ)

初心者に定番のPython入門書

Amazonで見る
Arduinoをはじめよう 第4版 (Make: PROJECTS)

もしも

Arduinoをはじめよう 第4版 (Make: PROJECTS)

Arduino公式推薦の定番入門書

Amazonで見る
徹底攻略! 電子工作&プログラミング Arduinoで学ぶ電子工作完全ガイド

もしも

徹底攻略! 電子工作&プログラミング Arduinoで学ぶ電子工作完全ガイド

電子工作とプログラミングを同時に学べる

Amazonで見る

※本記事にはアフィリエイトリンクが含まれます。

ABOUT ME
やまちゃん
これまで学生と社会人を合わせて5000人以上にプログラミング学習を指導。 ゼロからイチをわかりやすく解説する専門家として活動しており、本業ではArduinoを用いたIoT開発とロボットプログラミングが専門。 Pythonを用いたアプリ開発、ウェブアプリケーションの開発で業務の効率化をサポートしています。

COMMENT

メールアドレスが公開されることはありません。 が付いている欄は必須項目です