# セーフモード

> Understand Unity's Safe Mode, a mode that the Unity Editor enters if there are compilation errors in your project.

## 概要

Unity のセーフモードは、スクリプトのコンパイルエラーが発生したプロジェクトを開いたときに開始できる Unity エディターのモードです。セーフモードは、コンパイルエラーを解決するための最適な環境を提供するように設計されており、プロジェクトを正常に使用できる状態に素早く戻すことができます。

セーフモードでは、エディターのユーザーインターフェースは機能が制限された最小限のバージョンになります。スクリプト関連のアセットのみがインポートされ、スクリプトではないアセット (モデル、マテリアル、テクスチャ、プレハブなど) はインポートできません。これは、セーフモードがコンテンツ制作のためのものではなく、コンパイルエラーを解決するためだけのものだからです。

セーフモードでは、プロジェクトやそのパッケージからのマネージコードの実行は許可されません。つまり、[エディタースクリプト](/engine/6000.0/manual/working-in-unity/uitoolkits/guiscripting-guide/extending-the-editor.md)、[アセットポストプロセッサー](/engine/6000.0/script-reference/unity-editor/asset-postprocessor.md)、[スクリプトインポーター](/engine/6000.0/manual/working-in-unity/assets-and-media/asset-workflow/asset-types/scripted-importers.md) などの独自のスクリプトは実行されません。セーフモードでは、[アセンブリオーバーライド](/engine/6000.0/manual/scripting/compilation-and-code-reload/script-compilation/assembly-definition-files/class-assembly-definition-importer.md#assembly-references)、[Burst](/engine/6000.0/manual/packages-list/packages-all/pack-safe/com-unity-burst.md) アナライザー、[Roslyn](/engine/6000.0/manual/scripting/debugging-and-diagnostics/roslyn-analyzers.md) アナライザーも無効になります。これにより、セーフモードのエディターは、ひどく壊れた状態のプロジェクトを開いた場合でも、常に完全な機能と信頼性を保つことができます。

Unity は、コンパイルエラーがなくなったことを検知すると、自動的にセーフモードを終了します。セーフモードを終了すると、Unity はプロジェクトを完全にインポートし、エディターは通常の全機能を回復します。

## コンパイルエラーのよくある原因

一般的にコンパイルエラーが発生するのは、以下のような場合です。

* プロジェクトを古いバージョンの Unity から新しいバージョンにアップグレードするとき。
* プロジェクトを、作成時とは異なるバージョンの Unity で開くとき。
* [パッケージ](/engine/6000.0/manual/packages-list.md) がないプロジェクトや、バージョンが正しくないパッケージを含むプロジェクトを開くとき。
* 独自のスクリプトにエラーがあるプロジェクトを開くとき。
* [バージョン管理](/engine/6000.0/manual/unity-editor/editor-features/version-control.md) でプロジェクトを開き、最新の変更にコンパイルエラーが含まれているとき。

コンパイルエラーが発生したプロジェクトをセーフモードなしで開くと、さまざまな問題が発生する可能性があります。例えば、プロジェクトの [パッケージ](/engine/6000.0/manual/packages-list.md) が正しくロードまたは機能しない、アセットが正しくインポートされない、アーティファクトが [ライブラリ](/engine/6000.0/manual/working-in-unity/assets-and-media/asset-workflow.md#processing) または [キャッシュサーバー](/engine/6000.0/manual/working-in-unity/assets-and-media/unity-accelerator.md) に正しくキャッシュされないことがあります。

このような状況では、プロジェクトの残りの部分がインポートされるのを待ってからエラーの解決に取り掛かるのは望ましくありません。セーフモードには、プロジェクトのインポートがすべて終わるまで待たなくても、スクリプト関連の問題を自分で解決するツールや、バージョン管理でプロジェクトを新バージョンに更新してエラーを解決するツールがあります。

## セーフモードへの移行

コンパイルエラーが発生しているプロジェクトを開くと、エディターはセーフモードに入るかどうかを尋ねるダイアログを表示します。


**コンパイルエラーが発生したプロジェクトを開くと、セーフモードに入るように Enter Safe Mode? ダイアログで促されます。:**
![](/api/media?file=/engine/6000.0/media/images/SafeModeDialog.png)

この時点では、3 つの選択肢があります。

* **Enter Safe Mode (セーフモードに移行します)**
* **Ignore** (エラーを無視してプロジェクトを開きます)
* **Quit** (Unity を終了します)

ほとんどの場合は、**Enter Safe Mode** を選択して、プロジェクトのエラーを解決する必要があります (バージョン管理を使用している場合は、エラーの修正を含む変更を選択します)。セーフモードは、コンパイルエラーを解決するための最適な環境を提供するので、プロジェクトの残りの部分をインポートする前に、プロジェクトを機能する状態に素早く戻すことができます。

ただし、セーフモードに入ることを望まない場合は、Unity を終了 (**Quit**) するか、エラーを無視 (**Ignore**) することができます。

**ノート**: *このダイアログは ****Edit > Preferences > Asset Pipeline > Show Enter Safe Mode Dialog**** で無効にすることができます。このダイアログを無効にすると、コンパイルエラーが発生したプロジェクトを開いたときに、Unity は自動的にセーフモードになります。*

### セーフモードに入らずに終了

セーフモードは、特にコンパイルエラーを修正するために設計されています。この Unity プロジェクトの一員であっても、エラーの原因となっているスクリプトには関わっておらず、どうしたらよいかわからない場合は、ダイアログで \*\*Quit \*\* を選択して、チーム内のプログラマーにアドバイスを求めてください。

### エラーを無視してインポートを継続

プロジェクトを使用可能な状態にしておく必要がない場合もあります (例えば、部分的にコピーするためや、単に構成を調べたりするために、古いプロジェクトを開く場合など)。このような場合には、エラーを無視して、壊れた状態のプロジェクトを開くことができます。

**Ignore** を選択した後に、セーフモードでプロジェクトを開くには、Unity を一旦閉じて再度開くことで、"Enter Safe Mode" ダイアログに再度アクセスすることができます。

### コンパイルエラーを無視することの意味

エラーを無視することを選択すると、残りのアセットのインポートは続行されて、プロジェクト全体が開きます。この場合には、以下のような状態になる可能性があります。

* プロジェクトが使用可能な状態になっていない可能性があります。エラーが解決するまでは、再生モードに入ることも、プロジェクトのビルドを作成することもできない可能性があります。プロジェクトのパッケージが正しくロードされないか、まったくロードされない可能性もあります。

* アセットのインポートが、Unity の起動時とプロジェクトのコンパイルエラー解決後の 2 度必要になる可能性があります。そのため、使用可能な状態のプロジェクトのロードにかかる時間が長くなります。

* プロジェクトで [スクリプタブルレンダーパイプライン](/engine/6000.0/manual/rendering-and-post-processing/render-pipelines/scriptable-render-pipeline-introduction.md) を使用する場合は、レンダーパイプラインがロードされず、[エラーシェーダー](/engine/6000.0/manual/materials-and-shaders/shaders/shader-troubleshooting/shader-error.md) などの視覚的な問題が発生する可能性があります。

* スクリプトのコンパイルエラーは、プロジェクト内で二次的なエラーを引き起こす可能性があります。例えば、コンパイルエラーが原因でプロジェクト内の [scripted importer](/engine/6000.0/manual/working-in-unity/assets-and-media/asset-workflow/asset-types/scripted-importers.md) をロードできない場合は、アセットが正しくない状態でインポートされる可能性があります。

セーフモードは、これらの問題をすべて回避できるように設計されています。

## セーフモードのエディター

セーフモードでは、機能が制限された最小限のエディターインターフェースが提供されます。


**セーフモードの Unity エディター:**
![](/api/media?file=/engine/6000.0/media/images/SafeModeEditor.png)

Unity エディターでは、標準のエディターツールバーの代わりに、エディター上部のツールバーセクションにセーフモードのバナーが表示されます。セーフモードであることがツールバーに表示されます。ツールバーの **Exit Safe Mode** ボタンを使用すると、残りのエラーを無視してセーフモードを終了できます。プロジェクトで [プレビューパッケージ](/engine/6000.0/manual/packages-list/packages-all/pack-preview.md) を使用しているかどうかもバナーに表示されます。

Unity エディターと [コードエディターとのインテグレーション](/engine/6000.0/manual/scripting/environment-and-tools/ide-support.md) はセーフモードでも維持されるため、スクリプトアセットや [コンソールエラー](/engine/6000.0/manual/unity-editor/using-the-editor/console.md)[ ](/engine/6000.0/manual/unity-editor/using-the-editor/console.md)をダブルクリックして関連スクリプトを開いたり、**Assets** メニューから C# プロジェクトを開いたりすることができます。また、[バージョン管理システム](/engine/6000.0/manual/unity-editor/editor-features/version-control.md) とのインテグレーションも維持されます。

### セーフモードでの制限されたウィンドウ群

セーフモードのエディターには以下のウィンドウのみが表示されます。

* コンソールウィンドウ
* Project ウィンドウ
* Inspector ウィンドウ
* Package Manager ウィンドウ

コンパイルエラーの修正に関連するこれらのウィンドウのみを利用できます。他のウィンドウは、セーフモードでは使用できません。

### セーフモードでのエディターメニュー

セーフモードでは、エディターメインメニューの使用可能オプションが限られています。スクリプトの操作に関連するメニューオプションのみが表示され、選択できます。他のコンテンツの作成や操作のための通常のオプションは使用できません。例えば、シーンを作成したり開いたりすることはできません。プリミティブな形状、ライト、カメラなど、スクリプトではないアセットを作成することもできません。**GameObject** と **Component** のメニューは表示されません。**Window** メニューには限られたウィンドウのみが表示されます。


**セーフモードで表示される限られたエディターメニュー。アセットの作成に使用できるオプションが表示されています。:**
![](/api/media?file=/engine/6000.0/media/images/SafeModeLimitedMenu.png)

### セーフモードでの Project ウィンドウ

セーフモードの Project ウィンドウには、セーフモード以外の通常の動作と比べて機能的な違いがあります。

主な違いは、コンパイル関連のアセットしか選択できないことです。他のアセットタイプは選択できません。他のアセットタイプは、Project ウィンドウにグレーアウトで表示され、選択や編集はできません。

具体的には、インタラクティブに操作できるコンパイル関連のアセットタイプは以下の通りです。

* C# ファイル (.cs)
* DLL ファイル (.dll)
* アセンブリ定義 (.asm)
* 応答ファイル (.rsp)
* ルールセットファイル (.ruleset)

選択できないアセットのアイコンには、そのアセットのコンテンツのプレビューが表示されません。代わりにアセットのタイプを表す汎用アイコンが表示されます。


**選択できないアセットの汎用アイコンが表示された Project ウィンドウ:**
![](/api/media?file=/engine/6000.0/media/images/SafeModeProjectWindow.png)

**作成 (+)** メニューボタンが無効になります。Project ウィンドウのコンテキストメニューでは、使用できるオプションが少なくなります。


**Project ウィンドウの 作成 (+) メニューボタン。セーフモードでは無効になっています。:**
![](/api/media?file=/engine/6000.0/media/images/SafeModeCreateButton.png)

## セーフモードの終了

すべてのコンパイルエラーが解決されると、Unity のセーフモードは自動的に終了します。Unity では引き続きプロジェクトが開いて、アセットがインポートされます。

コンパイルエラーが残っている状態でセーフモードを終了するには、セーフモードツールバーの **Exit Safe Mode** ボタンを選択します。これは推奨されていません ([コンパイルエラーを無視することの意味](/engine/6000.0/manual/unity-editor/editor-features/safe-mode.md#IgnoringErrors) を参照)。決定を確認するダイアログが表示されます。


**セーフモードツールバーの Exit Safe Mode ボタン:**
![](/api/media?file=/engine/6000.0/media/images/SafeModeExitButton.png)

プロジェクトにエラーが残っている状態でセーフモードを終了し、後でセーフモードに戻りたい場合は、Unity を一旦閉じて再度開くことで、Enter Safe Mode ダイアログに再度アクセスすることができます。

## バッチモードのセーフモード

バッチモードでプロジェクトにコンパイルエラーがある場合は、`-ignoreCompilerErrors` [コマンドライン引数](/engine/6000.0/manual/unity-editor/editor-features/command-line-arguments.md) を使用しない限り、Unity は自動的に終了します。
