はじめに
UnityでAndroidやiOS向けにアプリをビルドするとき、多くの開発者が直面するのが「IL2CPP build failed」というエラーです。
特にAndroidでは、Google Playの仕様により64ビット対応が必須となっているため、従来のMonoビルドではなくIL2CPPを使わなければなりません。iOSに至ってはIL2CPPが標準なので、避けて通ることはできない設定です。
Monoで開発を進めていると動作確認まではスムーズに進むのに、いざIL2CPPに切り替えた途端にエラーが出てしまう……そんな経験をした方は多いはず。
この記事では、よくある原因とその解決方法をわかりやすく整理して紹介します。Unity初心者から中級者まで役立つよう、実際のエラーログの読み方や対処の流れもまとめました。
もしUnityの基礎をしっかり学び直したい方は、こちらの書籍がとても参考になります。IL2CPPやビルド設定の理解にも役立ちますよ。
✅ Amazonでチェックする| ✅ 楽天でチェックする
IL2CPPの基礎知識とMonoとの違い
まずは、そもそも「IL2CPP」とは何なのかを整理しておきましょう。名前だけ聞くと難しそうですが、仕組みをシンプルに見れば理解しやすくなります。
IL2CPPとは?
IL2CPP(Intermediate Language To C++)は、Unityが提供しているスクリプト変換技術です。
C#で書かれたコードは一度「中間言語(IL)」に変換され、その後C++に変換されます。最後に、各プラットフォーム専用のネイティブコード(実行ファイル)へとビルドされる仕組みです。
流れを簡単にまとめると次の通りです:
C# → IL → C++ → ネイティブコード
この手順によって、最終的な実行速度が向上し、解析されにくいセキュアなアプリを作ることができます。
Monoとの違い
一方で、Monoは「C# → IL」の変換だけで、そのまま実行時にJIT(Just In Time)コンパイルされます。
開発中はビルド時間が短く便利ですが、最終的な実行速度やセキュリティではIL2CPPに劣ります。特にAndroid 64bit対応やiOS開発ではIL2CPPが必須となるため、リリース前に切り替える必要があります。
| 項目 | Mono | IL2CPP |
|---|---|---|
| 変換の流れ | C# → IL(実行時にJIT) | C# → IL → C++ → ネイティブコード |
| 実行速度 | 普通(やや遅め) | 高速になりやすい |
| セキュリティ | 低め(解析されやすい) | 高め(解析されにくい) |
| ビルド時間 | 短い | 長くなることが多い |
| 対応プラットフォーム | 一部のみ | ほぼすべて(iOSは必須) |
| 特徴 | 開発中に便利 | リリースビルド向け、性能重視 |
IL2CPPは少しビルド時間が長くなるデメリットはありますが、リリースや配布を考えると欠かせない設定です。特にGoogle Playの64ビット必須要件やiOS環境では、避けて通れない存在といえるでしょう。
Android向け開発を本格的に進めたい方にはこちらの書籍もおすすめです。NDKやSDK周りの知識を補強するのに役立ちます。
✅ Amazonでチェックする| ✅ 楽天でチェックする
IL2CPPでAndroid/iOSビルドを行う手順
実際にIL2CPPを利用してAndroid/iOS向けアプリをビルドする方法を、手順に沿って解説します。初めて設定する方は、この流れを一度確認してから進めるとスムーズです。
手順(共通)
- Unityメニューの File → Build Profiles を開く。
- 対象プラットフォーム(Android または iOS)を選択し、Player Settings をクリック。
- Scripting Backend を IL2CPP に設定。
- Androidの場合:
Target Architectures の ARM64 にチェックを入れる。これで64ビット対応のapk/aabが生成されます。
※MonoではARM64は選べないため、必ずIL2CPPに切り替える必要があります。 - iOSの場合:
Target Architectures を ARM64 または Universal に設定する。
Xcodeにプロジェクトを書き出すと、自動的にIL2CPPが利用されます。
この設定を誤ると「64bit非対応」と判定され、Google Play ConsoleやApp Storeでリジェクトされる可能性があります。忘れずにチェックを入れておきましょう。
iOS開発をこれから始める方には、わかりやすく手を動かしながら学べる入門書もおすすめです。UnityとXcodeをつなげる流れの理解に役立ちます。
✅ Amazonでチェックする| ✅ 楽天でチェックする
よくあるエラー原因トップ3(Android)
ここからは、特にAndroid向けにIL2CPPビルドを行う際によく発生するエラー原因を3つ紹介します。
エラーログを読んでもピンと来ないときは、まずこの3つをチェックしてみてください。
① プロジェクトパスに日本語(全角文字)が含まれている
症状: ビルドエラーログに「???」と表示され、IL2CPP変換が途中で失敗する。
原因: IL2CPPは日本語や全角文字を含むパスに対応していません。
解決策: プロジェクトフォルダやユーザー名をすべて半角英数に変更しましょう。
- Unityを閉じる
- プロジェクトパス内の日本語を半角英数に修正(例:
/てすと/unity-project→/test/unity-project) - Unity Hubから再度プロジェクトを開く
② シンボル定義のミス
症状: ネイティブプラグインを使っているときに「undefined reference」などのリンクエラーが発生する。
原因: #if UNITY_ANDROID や #if UNITY_IOS といった条件分岐が正しく設定されていないケース。
解決策: ビルド対象ごとにコードを条件分岐させ、不要な処理を含めないように修正します。
③ NDKがインストールされていない
症状: 「NDK not found」などのエラーでビルドが中断される。
原因: IL2CPPはC++コードをネイティブ化するためにNDK(Native Development Kit)が必須です。
解決策: Unity Hubから「Android Build Support」をインストールするときに、追加オプションの OpenJDK・Android SDK & NDK Tools にチェックを入れて再インストールしましょう。

インストール後は Unityメニューの Edit → Preferences → External Tools から、NDK/SDK/JDKのパスが正しく設定されているか確認してください。
その他のエラー分類と解決策一覧(Android/iOS共通)
ここでは、原因を5つのカテゴリに分けて「確認ポイント → 対処手順」を一覧化しました。上から順にチェックすると、再現調査がスムーズです。
| カテゴリ | よくある原因 | 確認ポイント | 対処手順 |
|---|---|---|---|
| 1. 環境設定 | Unityのバージョン/モジュール不足 | LTS利用、Android/iOS向けモジュールが入っているか | Unity HubでLTSへ更新、Android Build Support(SDK/NDK/JDKを含む)やiOS Build Supportを追加 |
| 2. スクリプト | AOT非対応の反射/動的生成(Type.GetType、MethodInfo.Invoke等) | エディタでは動くのにIL2CPPでのみ失敗していないか | 反射の使用箇所を極力削減、必要な型をリンク.xmlで保持、ジェネリックの動的生成を避ける |
| 3. パッケージ/アセット | 古いプラグインの競合、コードストリッピングで必要型が削除 | Package Managerに更新あり/アセット導入直後に失敗していないか | 不要パッケージ整理、最新版へ更新、Managed Stripping LevelをLowやMinimalに下げて検証 |
| 4. ビルド設定 | Scripting BackendやAPI Compatibility Levelのミス | 対象プラットフォームでIL2CPP/ARM64になっているか | Player Settingsで IL2CPP、ARM64 を選択。API互換は .NET Standard 2.1 を基本に、依存ライブラリ次第で切替 |
| 5. 外部ツール/リソース | NDK/SDK/Xcodeの不整合、メモリ/ストレージ不足 | Edit > Preferences > External Tools のパス/空き容量 | 推奨NDK/SDK/Xcodeに合わせる。gradle.properties に org.gradle.jvmargs=-Xmx4096M を追加。ビルド先は高速なSSDを利用 |
ビルド時間短縮&失敗回避の実用Tip: ビルドキャッシュやプロジェクト保存先をSSDに置くとコンパイルが安定しやすく、容量不足エラーも防げます。
✅ Amazonでチェックする|
エラーメッセージ別トラブルシューティング
最後に、実際のビルド時に表示される代表的なエラーメッセージと、その原因・解決方法を一覧で紹介します。エラーログを検索するだけでも解決に近づけるので、該当するものがあれば試してみてください。
| エラーメッセージ | 原因の特定 | 解決方法 |
|---|---|---|
Failed running /path/to/il2cpp.exe | IL2CPP変換プロセスでの失敗。スクリプトにAOT非対応APIやリフレクションを多用している場合、またはAPI互換レベルが合っていない。 | Player Settings の API Compatibility Level を .NET Standard 2.1 に変更。反射や動的型生成を削減し、キャッシュを削除して再ビルド。 |
error CSXXXX(C#関連エラー) | コードのスペルミスや参照設定の不足。Assembly Definitionファイルの依存関係ミスも多い。 | 該当スクリプトを確認し、名前空間や参照が正しいかチェック。必要に応じてAssembly Definitionの設定を見直す。 |
clang: error: linker command failed(iOS) | Xcodeのバージョンが古い、またはプラグインがARM64に非対応。 | 最新のXcodeへアップデートし、Player Settings の Target Architectures が ARM64 になっているか確認。 |
Gradle build failed(Android) | Gradle設定の不整合、SDK/NDKバージョンの不一致、依存関係の競合。 | Edit > Preferences > External Tools でSDK/NDKパスを確認。Gradleキャッシュを削除して再ビルド。必要に応じてGradleバージョンを調整。 |

エラーメッセージをコピーしてそのまま検索するのも有効です。特に「IL2CPP build failed」+エラー番号で調べると、同じ事例を共有している開発者の解決策に辿り着けることがあります。
まとめ
IL2CPPは、UnityでAndroidやiOS向けにアプリをリリースする際に必須の設定です。
ビルド時間はMonoより長くなるものの、パフォーマンスとセキュリティの両面で優れており、Google Playの64ビット必須要件やiOS環境にも対応できます。
今回紹介したポイントを振り返ると――
- パスに日本語(全角文字)を含めない
- シンボル定義を正しく設定する
- NDK/SDK/Xcodeを最新バージョンで揃える
- API互換レベルやストリッピング設定を調整する
- ストレージ不足やメモリ不足にも注意する

このあたりを押さえておけば、「IL2CPP build failed」エラーの多くは解決可能です。
特に開発環境を安定させるには、基礎から学べる書籍や、ビルドを快適にする外部SSDがあると安心ですね。
よくある質問(FAQ)
- QMonoビルドでリリースすることはできますか?
- A
残念ながら現状ではほとんど不可能です。
AndroidはGoogle Playの64ビット必須要件によりMonoではリリースできず、iOSはそもそもIL2CPPが必須です。開発中の動作確認でMonoを使うのは便利ですが、最終的な配布にはIL2CPPが欠かせません。
- Qビルド時間を短縮する方法はありますか?
- A
はい、いくつか工夫できます。
- 外付けSSDにビルドキャッシュやプロジェクトを保存する
- 不要なアセットやパッケージを削除する
- Managed Stripping Levelを調整して処理を軽くする
これらを組み合わせると、体感で数分以上短縮できる場合もあります。
- Q「NDK not found」エラーがどうしても消えません…
- A
その場合は、次の順に確認してください。
- Unity Hubで Android Build Support を再インストールし、OpenJDK・Android SDK & NDK Tools にチェックを入れる
- Edit > Preferences > External Tools を開き、NDK/SDK/JDKのパスが正しく設定されているか確認する
- プロジェクトを再ビルドする
これでも解決しない場合は、UnityのLTS版へのアップデートや別バージョンのNDKを試すと改善することがあります。








※当サイトはアフィリエイト広告を利用しています。リンクを経由して商品を購入された場合、当サイトに報酬が発生することがあります。
※本記事に記載しているAmazon商品情報(価格、在庫状況、割引、配送条件など)は、執筆時点のAmazon.co.jp上の情報に基づいています。
最新の価格・在庫・配送条件などの詳細は、Amazonの商品ページをご確認ください。