# Windows の DirectX シェーダーキャッシュは削除しても安全？

DirectX Shader Cache には、グラフィックスカードが実行する小さなプログラムであるシェーダーが、Windows でコンパイルされた状態で保存されており、ゲームやアプリが毎回コンパイルし直さずに済みます。削除しても安全で、Windows 自身のクリーンアップツールにも項目があります。注意点は、次の起動で再構築が必要になるため、しばらくゲームの読み込みが遅くなったり、カクついたりすることがある点です。実際に容量を使っているときや、壊れていると疑うときに消し、日常のメンテナンスとしては行わないでください。

## 保存場所

システムのキャッシュは `%LOCALAPPDATA%\D3DSCache` で、その中にキャッシュごとのフォルダがあります。グラフィックスドライバーやゲームも、それぞれ独自のキャッシュを持っています。

| ユーザーフォルダー下のパス | 所有者 |
| --- | --- |
| `AppData\Local\D3DSCache` | Windows DirectX |
| `AppData\Local\Microsoft\DirectX Shader Cache` | Windows DirectX パイプラインキャッシュ |
| `AppData\Local\NVIDIA\DXCache`, `AppData\Local\NVIDIA\GLCache` | NVIDIA |
| `AppData\LocalLow\NVIDIA\PerDriverVersion\DXCache` | NVIDIA |
| `AppData\Local\AMD\DXCache`, `AppData\Local\AMD\VkCache` | AMD |
| `AppData\Local\Intel\ShaderCache`, `AppData\LocalLow\Intel\ShaderCache` （現行のドライバー） | Intel |
| `AppData\Local\VulkanCache` | Vulkan |

どれがあるかは、お使いのグラフィックスハードウェアによります。Steam はゲームごとのキャッシュを自分のライブラリに持っています。[Steam のシェーダーキャッシュ](/ja/windows/blog/steam-shader-cache-windows)を見てください。システムのキャッシュを測るには次のようにします。

```powershell
$p = "$env:LOCALAPPDATA\D3DSCache"
[math]::Round((Get-ChildItem $p -Recurse -Force -File -ErrorAction SilentlyContinue | Measure-Object Length -Sum).Sum / 1MB, 1)
```

単位は MB です。

## 消すと役に立つとき

| 見えるもの | 消すか | 理由 |
| --- | --- | --- |
| ドライバー更新後に始まった不具合、クラッシュ、カクつき | 試す価値あり | 古い、または壊れたエントリが原因のことがあり、再構築で置き換わる |
| キャッシュが数 GB に増え、容量が必要 | 消す | 再生成される。ただし再びプレイするゲームの分だけ |
| ゲームが各エリアの初回だけカクつく | 消さない | キャッシュが作られている最中で、消すとまた同じことが起きる |
| PC 全体の動作が遅い | 消さない | これとは無関係 |
| 定期的なクリーンアップ | 不要 | 再構築のコストを払うだけで得るものが少ない |

## 消す方法

システムのキャッシュについて、組み込みの方法は次のとおりです。

1. **設定 › システム › 記憶域 › 一時ファイル** を開きます。
2. **DirectX シェーダー キャッシュ** にチェックを入れ、ほかは好みのままにします。
3. **ファイルの削除** を選びます。

[ディスク クリーンアップ](/ja/windows/blog/disk-cleanup-vs-storage-sense-windows)（`cleanmgr`）にも同じ項目があります。Windows はこれをクリーンアップハンドラー `D3D Shader Cache` として登録しており、テスト用 ThinkPad にもありました。

手作業なら、ゲームとグラフィックス関連のツールを閉じ、`Win + R` で `%LOCALAPPDATA%\D3DSCache` を開き、中身を削除します。使用中のものは飛ばしてください。ドライバーのキャッシュは、ゲームを閉じた状態で、上のフォルダの中身を削除します。NVIDIA コントロール パネルの **シェーダー キャッシュ サイズ** は、大きくなる上限を決めるだけです。

## 消した後に起きること

各ゲームの最初の起動で、シェーダーが再びコンパイルされます。進行状況バーを出すゲームもあれば、キャッシュがいっぱいになるまで、新しいエリアに進むたびにカクつくゲームもあります。かかる時間はゲームとハードウェアによって異なり、数分になることもあります。最初のプレイだけで結果を判断しないでください。

## やってはいけないこと

- ゲームのプレイやベンチマークの前に消さないでください。最も遅い状態になります。
- スケジュールで消さないでください。害になるほど溜まるゴミではなく、常に空のキャッシュは常にコンパイルし続けることを意味します。
- 上のパス以外のドライバーのフォルダを削除しないでください。`C:\Windows\System32\DriverStore` やドライバーのインストールフォルダはキャッシュではありません。
- ファイルが壊れたゲームが直ることを期待しないでください。それにはランチャーの検証オプションを使います。

## Mole でできること

Mole for Windows の **クリーン** は、これらのキャッシュを名前つきで一覧します。**DirectX Shader Cache**、**DirectX Pipeline Cache**、上の NVIDIA、AMD、Vulkan のフォルダに加え、Intel の古い `Local` フォルダも含め、それぞれにサイズが付きます。現行の Intel ドライバーが使う `LocalLow` フォルダは、Mole は一覧しません。これらは未選択で始まり、推奨からは外されています。消すと各ゲームがシェーダーを再びコンパイルする必要があるからです。そのコストに見合うと判断したときに選択してください。Steam のゲームごとのキャッシュも同じように表示され、`ProgramData` にある NVIDIA のキャッシュには管理者権限が必要です。それらが置かれているフォルダのほかの部分については、[AppData で削除できるもの](/ja/windows/blog/appdata-folder-what-can-delete)を見てください。

## よくある質問

### DirectX Shader Cache を削除しても安全ですか？

はい。Windows が再構築します。代償は、次にゲームを実行したとき、読み込みが遅くなったり、少しカクついたりすることです。

### シェーダーキャッシュを削除するとパフォーマンスは上がりますか？

たいていは上がらず、短期的にはむしろ悪くなります。壊れたキャッシュが不具合を起こしているときや、ディスク容量が必要なときに役立ちます。

### DirectX Shader Cache はどこに保存されていますか？

`%LOCALAPPDATA%\D3DSCache` です。NVIDIA、AMD、Intel、Steam は、別のフォルダに独自のキャッシュを持っています。

### シェーダーキャッシュがまた作られるのはなぜですか？

ゲームやアプリが動作中に再びシェーダーをコンパイルするからです。それがキャッシュの役目なので、クリーンアップが失敗した兆候ではありません。

### ドライバー更新後にシェーダーキャッシュを消すべきですか？

更新後に何かおかしいときだけです。ドライバーは必要なものを再構築するのが普通で、不具合やクラッシュが出たときに消すのは妥当な手順です。


Canonical: https://mole.fit/ja/windows/blog/directx-shader-cache-windows
