言語翻訳ファイル .po ファイルから.mo ファイルに変換するときに「’msgfmt’ は、内部コマンドまたは外部コマンド、 操作可能なプログラムまたはバッチ ファイルとして認識されていません。」と表示された時の対処法です。
エラーは「msgfmt(GNU gettext の一部)」が未インストール、または PATH に通っていないのが原因です。Windows での解決方法を用途別にまとめます(すべて公式手順へのリンク付き)。
gettext(msgfmt含む)は、WordPress の翻訳 .po → .mo 変換や国際化処理などでよく使われます。
MSYS2 を使って Windows に msgfmt を導入する手順を解説します。
MSYS2 を使って Windows に msgfmt を導入する手順
MSYS2のインストール
MSYS2公式サイトにアクセス
https://www.msys2.org/
インストーラをダウンロード
ご自身の環境に適したものをインストールします。

インストーラを実行
「Next」→「Install」で進めます。




途中確認を求められたら内容を確認して「Y」で進めます。

デフォルトインストール先: C:\msys64
インストール完了後、MSYS2 Shellを起動
スタートメニュー → 「MSYS2 UCRT64」 または 「MSYS2 MINGW64」で起動できます。
検索ウィンドウで「MSYS2」と入力すると一覧が表示されます。
(※どちらを使うかは後述)

各シェルの違い一覧
| シェル名 | 主な用途 | 対応アーキテクチャ | 使用するCランタイム | 主なPATH | 特徴・用途の説明 |
|---|---|---|---|---|---|
| MSYS | UNIXツール実行用 | Windows(共通) | MSYS2独自DLL(msys-2.0.dll) | /usr/bin → C:\msys64\usr\bin | Bash, sed, grep, make などLinuxコマンドが動作。開発環境の制御用。この環境でビルドしたバイナリはWindows単体では動かない(MSYS DLL依存)。 |
| MINGW64 | Windows 64bit向けネイティブアプリ開発 | x86_64 | MSVCRT(Microsoft Visual Cランタイム) | /mingw64/bin → C:\msys64\mingw64\bin | 従来のWindowsネイティブビルド。WordPress・Python・VSCodeなどと相性が良い。gettextなどもこちらで十分。 |
| MINGW32 | Windows 32bit向け開発 | i686(32bit) | MSVCRT | /mingw32/bin → C:\msys64\mingw32\bin | 古い32bitアプリをビルドしたい場合のみ使用。通常は不要。 |
| UCRT64 | Windows 64bit向け・最新UCRT対応 | x86_64 | UCRT(Universal C Runtime) | /ucrt64/bin → C:\msys64\ucrt64\bin | Microsoft公式UCRT採用。新しい標準。Python3.11以降やVisual Studio、CMakeとの互換性が高い。gettextもここがおすすめ。 |
| CLANG64 | LLVM/Clangベース開発用 | x86_64 | UCRT | /clang64/bin → C:\msys64\clang64\bin | Clangでビルドしたい場合。Apple/macOS移植やLLVM依存プロジェクトに適す。 |
| CLANGARM64 | ARM64版(Surfaceなど) | ARM64 | UCRT | /clangarm64/bin | ARM Windows向け開発用。ARMデバイスでのみ利用。 |
パッケージデータベースを更新
初回はパッケージ情報を更新します。
pacman -Syu- 実行中に「再起動を促すメッセージ」が出た場合は、MSYS2ウィンドウを閉じて再起動。
- 再度開いたあと、もう一度以下を実行:
pacman -Syu
これで MSYS2 が最新化されます。
gettext(msgfmt含む)をインストール
MSYS2 は「シェルごとに異なる環境」を持ちます。
WordPressなどWindowsアプリから直接呼びたい場合は UCRT64 または MINGW64 が推奨です。
UCRT64の場合(推奨)
pacman -S mingw-w64-ucrt-x86_64-gettextMINGW64の場合
pacman -S mingw-w64-x86_64-gettextこれで msgfmt.exe が以下に配置されます:
- UCRT64:
C:\msys64\ucrt64\bin\msgfmt.exe - MINGW64:
C:\msys64\mingw64\bin\msgfmt.exe
PATHをWindows環境変数に追加
Windowsの PowerShell や CMD から msgfmt を使いたい場合、
上記の bin フォルダを PATH に追加します。
方法
- 「スタート」→「環境変数」と検索→「システム環境変数の編集」を開く。
- 「環境変数(N)…」ボタンをクリック。
- 「システム環境変数」欄の
Pathを選択 → 「編集」。 - 以下を追加
UCRT64を使う場合:C:\msys64\ucrt64\bin
MINGW64の場合:C:\msys64\mingw64\bin - OKで閉じ、PowerShellを再起動。
環境変数の設定方法については、こちらの記事でも解説しています↓
動作確認
PowerShellまたはCMDを一度閉じてから開きなおして以下を入力:
msgfmt --version例:
msgfmt (GNU gettext-tools) 0.xx.xと表示されれば正常にインストール完了です。
補足(MSYS2の構成)
| シェル名 | 説明 | gettext パッケージ名 | PATH例 |
|---|---|---|---|
| MSYS | Linux風の最小環境 | gettext | C:\msys64\usr\bin |
| MINGW64 | 64bit Windows向け | mingw-w64-x86_64-gettext | C:\msys64\mingw64\bin |
| UCRT64 | 互換性の高いWindows向け(推奨) | mingw-w64-ucrt-x86_64-gettext | C:\msys64\ucrt64\bin |
UCRT64が最も新しく安定しており、Visual StudioやPythonなどのUCRT環境と互換性が高いです。
翻訳(.po→.mo)をmsgfmtでコンパイルする具体例
GNU gettext の一部で、翻訳テキストファイル(.po)をコンパイルして .mo ファイルに変換します。
PowerShellまたはCMDでコマンドを入力します。
※xxxx-ja.mo は任意のファイル名に変更してください。
例)
cd 翻訳テキストファイル(.po)のあるディレクトリ
msgfmt -o xxxx-ja.mo xxxx-ja.po公式ドキュメント
- MSYS2公式サイト
MSYS2.org
https://www.msys2.org/ - MSYS2パッケージ検索(gettext)
MSYS2 Packages: mingw-w64-ucrt-x86_64-gettext
https://packages.msys2.org/package/mingw-w64-ucrt-x86_64-gettext - GNU gettext公式ドキュメント(msgfmt)
GNU gettext manual – msgfmt Invocation
https://www.gnu.org/software/gettext/manual/html_node/msgfmt-Invocation.html
コメント