# Windowsの一時フォルダで削除してよいもの

Windowsの一時フォルダは1つではありません。自分のものは`%TEMP%`で、通常は`C:\Users\<name>\AppData\Local\Temp`です。システム全体のものは`C:\Windows\Temp`で、Windows 11ではSYSTEMとして動くプロセスが`C:\Windows\SystemTemp`を使います。およそ1週間より古いファイルは削除して安全で、使用中のファイルは拒否されます。その拒否は普通です。強制せず、スキップします。いちばん簡単な安全な経路は、「設定」の「システム」「ストレージ」「一時ファイル」、または自動にしたいならストレージセンサーです。

## 一時フォルダの場所

プログラムは一時フォルダを無作為には選びません。[MicrosoftのGetTempPath2のリファレンス](https://learn.microsoft.com/en-us/windows/win32/api/fileapi/nf-fileapi-gettemppath2w)は、普通のプログラムの順序を示しています。環境変数`TMP`、次に`TEMP`、次に`USERPROFILE`、次にWindowsフォルダです。SYSTEMとして動くプロセスには`C:\Windows\SystemTemp`を返し、ほかのプロセスはそこへアクセスできません。

| フォルダ | 書く人 | 整理できる人 |
| --- | --- | --- |
| `%TEMP%`(`AppData\Local\Temp`) | 自分のアカウントで動くプログラム。多くのインストーラーを含む | 管理者権限なしの自分 |
| `C:\Windows\Temp` | システム全体の一時作業 | 管理者 |
| `C:\Windows\SystemTemp` | SYSTEMとして動くプロセス | 管理者。Windowsのクリーンアップツールを使う |

自分のものを開くには、`Win + R`を押し、`%TEMP%`と入力してEnterです。Windowsのアカウントにはそれぞれ自分の`%TEMP%`があるので、自分のものを整理しても別のユーザーには触れません。

<figure class="blog-diagram">
  <picture>
    <source media="(max-width: 900px)" srcset="/img/blog/windows-windows-temp-folder-cleanup-en-mobile.webp" type="image/webp" width="768" height="1180">
    <img src="/img/blog/windows-windows-temp-folder-cleanup-en.webp" width="1360" height="454" loading="lazy" alt="所有者の違う2種類の一時フォルダ">
  </picture>
  <figcaption>自分のアカウントのプログラムは%TEMP%へ書き、C:\Windows配下のフォルダはPC全体のもので、管理者権限が必要です。</figcaption>
</figure>

## 一時ファイルがたまる理由と、一部がロックされる理由

[Microsoftのcleanmgrのリファレンス](https://learn.microsoft.com/en-us/windows-server/administration/windows-commands/cleanmgr)は、フォルダを平易に説明しています。プログラムはときどき一時情報をTempフォルダに置き、終了前に消すのが普通で、1週間変更されていない一時ファイルは安全に削除できます。残るものは、たいていクラッシュした、インストール中に閉じられた、自分のあと片付けをしないプログラムからです。展開されたインストーラー、更新のダウンロード、ログ、一部のアプリが意図してそこに置くキャッシュです。

プログラムがまだ開いているファイルは削除できず、Windowsはファイルが使用中だと伝えます。進行中の作業を守っているのです。自分を展開して「次へ」を待っているインストーラーや、スクラッチファイルを書いている動画エディターなどです。それらのファイルはスキップします。プログラムを閉じるとたいてい解放され、再起動はすべてを閉じるので、次のクリーンアップで届きます。

1週間の規則が最も大切なのは`C:\Windows\Temp`です。インストーラーとWindowsのコンポーネントは、作業の間そこに作業ファイルを残し得ます。今日のファイルは更新の途中かもしれません。WindowsのツールとMoleの両方が、1週間より新しいものを残すのはこのためです。

## Windows自身のツールで整理する

Windows 11では、「設定」の「システム」「ストレージ」を開き、「一時ファイル」を選びます。Windowsは項目とサイズを一覧します。分かるものだけにチェックし、自分でそのフォルダを確認していない限り、ダウンロードのチェックは外したままにします。[Microsoftの空き容量のガイド](https://support.microsoft.com/en-us/windows/experience/storage-filemanagement/free-up-drive-space-in-windows)も、クリーンアップの推奨事項の下に一時ファイルを挙げています。

自動にするには、同じストレージのページでストレージセンサーをオンにします。[Microsoftのストレージセンサーのガイド](https://support.microsoft.com/en-us/windows/experience/storage-filemanagement/manage-drive-space-with-storage-sense)は、既定の設定ではデバイスのディスク空きが少ないときに動き、規則を設定しない限りダウンロードとクラウドファイルには触れないとしています。ディスククリーンアップもまだ使えます。項目ごとの比較は[ディスククリーンアップとストレージセンサー](/ja/windows/blog/disk-cleanup-vs-storage-sense-windows)にあります。

## 先にサイズを見て、手で消すならそのあと

次のPowerShellコマンドは読むだけです。1つ目は`%TEMP%`の合計をメガバイトで示し、2つ目はそのうち7日より古い量です。

```powershell
(Get-ChildItem $env:TEMP -Force -Recurse -File -ErrorAction SilentlyContinue | Measure-Object Length -Sum).Sum / 1MB
$cutoff = (Get-Date).AddDays(-7)
(Get-ChildItem $env:TEMP -Force -Recurse -File -ErrorAction SilentlyContinue | Where-Object { $_.LastWriteTime -lt $cutoff -and $_.CreationTime -lt $cutoff } | Measure-Object Length -Sum).Sum / 1MB
```

日付の確認が両方を読むのは意図的です。今日Tempへコピーまたは展開されたファイルは、アーカイブの中の古い更新日を保てます。今日届いたと言えるのは作成日だけです。両方を見ることで、今展開したインストーラーが一覧に入りません。

手で消したいなら、先にプレビューします。`-WhatIf`では、PowerShellは消す予定のものだけを表示します。

```powershell
$cutoff = (Get-Date).AddDays(-7)
Get-ChildItem $env:TEMP -Force -Recurse -File -ErrorAction SilentlyContinue | Where-Object { $_.LastWriteTime -lt $cutoff -and $_.CreationTime -lt $cutoff } | Remove-Item -Force -WhatIf
```

一覧を読み、使用中と分かるものの持ち主のアプリを閉じてから、同じ行を`-WhatIf`なしで実行します。`Remove-Item`は直接削除し、ごみ箱には入りません。ロックされたファイルのエラーは想定内で、何も変わりません。プレビューにシンボリックリンクやディレクトリジャンクションが出たら、スキップし、普通のファイルだけを消します。

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

- Tempフォルダ自体や、その`Low`サブフォルダを削除しない。プログラムはフォルダがあることを前提にします。空にして、フォルダは外しません。
- 拒否するファイルを強制的に出すために、`C:\Windows\Temp`や`C:\Windows\SystemTemp`の所有権を取らない。そこにあるロックされたファイルは、たいてい動いているインストーラー、更新、サービスに属します。
- インストール、Windows Update、大きな書き出しの最中に整理しない。終わるまで待つか、先に再起動します。
- 容量を節約するためだけに`TEMP`と`TMP`を別のドライブへ向けない。多くのプログラムとインストーラーがこれらに依存します。Microsoftの[開発ドライブのドキュメント](https://learn.microsoft.com/en-us/windows/dev-drive/)は、勧める唯一の構成でさえ、移動には副作用があると警告しています。

## Mole for Windowsが一時ファイルを扱う方法

Moleのクリーンは2行を出します。**一時ファイル**は自分の`%TEMP%`フォルダです。上と同じく、更新日と作成日の新しい方で判断して7日より古いものを消し、`%TEMP%\Low`は残します。そのフォルダは低い整合性ラベルを持ち、サンドボックス化されたプログラムが書くために必要だからです。使用中のファイルはスキップされ、あとの実行で拾われます。今空にしたフォルダは、自分の日付が期限を過ぎるまで待ちます。

**Windowsの一時ファイル**は`C:\Windows\Temp`と`C:\Windows\SystemTemp`で、こちらも7日より古いものです。これらの行は管理者の承認が必要です。「すべて選択」はチェックを外したままにし、許可の確認はクリーンするときにだけ出て、拒否すると残ります。中のフォルダは残すので、動いているインストーラーの作業フォルダが消えることはありません。普通の行は設定の削除方法に従い、管理者の行は直接削除されます。クリーンが一覧する残りのものは、[キャッシュの整理のガイド](/ja/windows/blog/windows-cache-cleanup)を見てください。

## 結果を確認する

「PC」でCの空き容量をメモし、整理してからもう一度見ます。一時フォルダはPCを使うとまたたまるので、来週に数百MB戻るのは普通です。毎日GB単位で増えるなら、そこに書いているプログラムを探します。`%TEMP%`を更新日で並べ、いちばん新しいフォルダ名を見て、掃除の回数を増やすのではなくプログラムを直します。空きがまだ足りないなら、原因は別の場所です。次は[いっぱいのCドライブを整理する](/ja/windows/blog/windows-c-drive-full)です。

## よくある質問

### Windows 11で一時ファイルを削除しても安全ですか?

およそ1週間より古いファイルなら、はい。Microsoftは、過去1週間変更されていない一時ファイルは安全に削除できるとしています。使用中のファイルはスキップします。動いているプログラムのものです。

### Windowsの一時フォルダはどこにありますか?

自分のものは`%TEMP%`で、通常は`C:\Users\<name>\AppData\Local\Temp`です。システム全体のフォルダは`C:\Windows\Temp`で、Windows 11のSYSTEMプロセスは`C:\Windows\SystemTemp`を使います。

### Tempフォルダの一部のファイルを削除できないのはなぜですか?

プログラムがまだ開いています。インストーラー、更新、アプリのスクラッチファイルであることが多いです。プログラムを閉じるか再起動してから、もう一度整理します。強制のために所有権を取らないでください。

### ストレージセンサーは一時ファイルを自動で削除しますか?

オンにすれば、はい。既定の設定では、システムドライブの空きが少ないときに一時ファイルを整理し、規則を設定しない限りダウンロードには触れません。


Canonical: https://mole.fit/ja/windows/blog/windows-temp-folder-cleanup
