Godotで書き出すアプリのアセット暗号化用テンプレートビルド方法を、Windows上でのビルド環境の構築からメモしておきます。
Godotは手軽にゲームが作れるのがとてもいいところなんですが、デフォルト状態で書き出しされたゲームのバイナリコードが暗号化されていないため、容易に中身のファイルやコードを取り出すことができてしまいます。
画像ファイル程度ならそんなに問題ないですが、オンライン接続用の認証データなどが抜き出されてしまうとセキュリティ上も大問題です。
この記事ではGodotで書き出される実行ファイルを暗号化するために必要な、エクスポートテンプレートの手動ビルド手順とGodot側の設定を記録しておきます。
執筆時点での環境(2025-03-25)
- Windows11
- Godot4.4-stable
必要なものをインストールする
GodotのカスタムエクスポートテンプレートはGodotEditorだけでは作成できません。
- C++コンパイラ
- コンパイル設定をするSCons
- SConsを動かすPython3
- 16進数256ビットの暗号化キー
上記4つが必要です。
Godotで開発する場合はGodot本体だけあればいいと言ったな、あれは嘘だ。
厳密には半分嘘というか、どのフレームワークでもそうですけど、フレームワークの外へはみ出した事をしようと思うとたいていの場合こうなります。
しょうがないので地道にインスコしていきましょう。
一番時間がかかるのはC++コンパイラだと思いますので、そちらから入れていきます。
C++ コンパイラをインストールする
Godotでプログラミングをするときに使用するGDScriptはPythonっぽい構文ですけど、ゲーム本体のコードはほぼC++で実装されています。というわけでコンパイル環境を作っていきます
Scoopをインストールする
ScoopはWindows Powershell用のパッケージマネージャです。
PowerShellを開いて下記コマンドを入力すればインストールはOK。
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser
Invoke-RestMethod -Uri https://get.scoop.sh | Invoke-Expression
ScoopでC++コンパイル環境をインストールする
先ほどScoopをインストールしたPowerShellのまま、次のコマンド1行で全部入ります。このコマンドの場合はMinGWのllvmとついでにPython・SCons・Git・OpenSSLもインストールします。(既にインストール済みのものがあれば改めてscoopでいれる必要はありませんので、適宜修正してください。)
scoop install python scons make mingw-mstorsjo-llvm-ucrt git openssl
通常のMinGWじゃない理由
x86 CPUのWindows専用ならMinGW-W64 GCCでもOKです。最近ちょっと増えつつあるARM64 CPU用のコンパイルはMinGW-llvmでないとできない模様です。
scoopで今回インストールするmingw-mstorsjo-llvm-ucrtはクロスコンパイル用の全部入りパッケージなのでこちらを使用しています。
Godotのソースコードをダウンロードする
Godotのソースコードを置く場所はどこでも構いません。この例ではDocumentフォルダなどへ移動してgit cloneでソースをダウンロードしています。ダウンロードに少々時間がかかります。
cd ~\Documents
git clone https://github.com/godotengine/godot.git
cd godot
エクスポートテンプレートは使用するGodotとバージョンを一致させる必要があります。GodotEngineのメニューから”ヘルプ -> Godotについて…”を選択すると使用中のバージョンが確認できます。

ロゴの右側に「Godot Engine v4.4.stable」と見えますね。
GitでCloneしてきたソースコードは基本的に最新ブランチになっていますので、Godot Engineとバージョンを揃える作業をします。まずはGitタグで指定できるバージョン一覧を見ましょう。
git tag
“4.4-stable”が今回のバージョンと一致します。次のコマンドでバージョンを切り替えておきます。
git checkout 4.4-stable
暗号化キーを生成する
アセットやスクリプトを暗号化するには「暗号化キー」というものが必要になります。暗号化キーは16進数で32bitの文字列なので手書きでも作れますが、ちゃんと乱数で生成したほうが類推されにくくて安全でしょう。そのためのOpenSSLは上記のscons installコマンドでインストール済みです。
PowerShellプロンプトへ下記コマンドを入力しましょう。
openssl rand -hex 32
32桁の0からfまでの乱数が出力されると思います。この値は後々プロジェクトを作成するたびに使うことになると思いますので、どこかへ保存しておくことをおすすめします。
セキュリティデータの保管場所について
この乱数を使ってデータの復号を行うので、流出してしまうとせっかくの暗号化も無意味になってしまいます。Godotプロジェクトにテキストファイルで保存したりすると、誤ってGit経由で全世界に公開してしまうような危険もありますので、別の場所への保管をおすすめします。
例:GoogleドライブやOnePassなど
生成した暗号化キーを環境変数に設定します。PowerShellプロンプトへ下記コマンドで追加します。
$ENV:SCRIPT_AES256_ENCRYPTION_KEY="さっき生成したキー"
テンプレートをビルドしていく
Sconsでエクスポートテンプレートをビルドする
そして本題のエクスポートテンプレートのビルドです。
scons platform=windows use_llvm=yes use_mingw=yes target=template_debug arch=x86_64
scons platform=windows use_llvm=yes use_mingw=yes target=template_release arch=x86_64
ビルドが完了すると、Godotのソースコードをおいた場所のbinフォルダを開くとこのようにできております。

Arm64用、32bit OS用は……
x86_64があれば通常は困らないと思いますが、必要な人はこちらもビルドしてください。
scons platform=windows use_llvm=yes use_mingw=yes target=template_debug arch=x86_32
scons platform=windows use_llvm=yes use_mingw=yes target=template_release arch=x86_32
scons platform=windows use_llvm=yes use_mingw=yes target=template_debug arch=arm64
scons platform=windows use_llvm=yes use_mingw=yes target=template_release arch=arm64
Godotエクスポート設定で暗号化を有効にする
これでやっと暗号化実行ファイルを書き出す準備ができました、お疲れ様です。まずはエクスポート設定から暗号化の設定を変更しましょう。
”プロジェクト -> エクスポート…”を開き、”暗号化”タブを開きましょう。

変更箇所は
- エクスポートされたPCKの暗号化 を On
- 暗号化インデックス を On
- 暗号化キー に先ほどopensslで生成した文字列をコピペ
ちなみにここに入力した暗号化キーは、プロジェクトのルートにある”.godot”フォルダに平文のテキストデータで保存されます(Android用のエクスポート設定で入力した暗号化キーもここに保存されます)。誤って公開されないように.gitignoreなどの設定はご注意ください。
カスタムテンプレートを指定する
先ほど、Godotのソースファイルからビルドしたexeファイルを、カスタムエクスポートテンプレートとして指定します(consoleじゃない方)。カスタムエクスポートテンプレートの設定は、メニューの”プロジェクト -> エクスポート…”の設定画面から、「高度なオプション」のトグルをOnにすると表示されます。

このカスタムテンプレートにさきほどビルドされたデバッグ用、リリース用それぞれを設定しましょう。
(任意)カスタムテンプレートでデフォルトのテンプレートを置き換える
アーキテクチャを変えてエクスポートする場合は、それぞれ用のカスタムテンプレートに切り替える必要があります。また、プロジェクトごとに毎回同じ設定をしなくてはならないのでちょっと面倒です。
公式のビルド済みテンプレートと置き換えしてしまえば、プロジェクトごとのカスタムエクスポートテンプレートの設定を省く事ができます。(あくまで自己責任で。)
Godotのエディタからダウンロード&インストールしたエクスポートテンプレートはユーザフォルダに保存されています。
C:\Users\ユーザ名\AppData\Roaming\Godot\export_templates\バージョン名

自前ビルドしてできあがったものとは名前が異なっていることにお気づきかと思います。
オリジナルは別フォルダに退避させておいて、アーキテクチャごとに同名にリネームしてここに移動させると、デフォルトで暗号化キーが含まれたテンプレートが使われるようになります。
コメントを残す