対象OS:Windows 7/Windows 8.1/Windows 10/Windows Server 2012/Windows Server 2012 R2/Windows Server 2016
Windows環境ではさまざまな「環境変数」が定義されて使われているが(TIPS「OSの種類によってバッチファイルの処理を切り替える方法」参照)、その中でもよく使われるのは「TEMP」もしくは「TMP」環境変数であろう。アプリケーションが一時的な作業用のファイルを作成する場合、通常はこのTEMP環境変数の指し示す場所(以下「tempフォルダ」と呼ぶ)に作られる。
tempフォルダに作成されたファイルは、アプリケーションの終了時には削除されることになっているが、実際にはプログラムが終了しても削除されずに残っていることがある(特にログファイルなど)。tempファイルは、既存のファイル名とは重複しないような名前で新規作成されることになっているため、システムの起動や終了などを繰り返していると、tempフォルダの中に多くの一時ファイルが作成される。tempフォルダの内容を確認するには、TIPS「Windowsシステムのtempフォルダを簡単に開く」で紹介しているように、エクスプローラーや[ファイル名を指定して実行]ダイアログに「%temp%」と入力してtempフォルダを開くとよい。さまざまな一時ファイルが作成されていることが確認できるはずだ。
tempフォルダの内容は、基本的にシステムからサインアウトするときには全て削除しても構わないものであるが、実際にはプログラムによって使われていたり、他のユーザーやサービスが使用したりしていて、削除できないことも多い。結果として、小さなサイズの一時ファイルが多数作成され、それらが削除されずに残ってしまい、空き領域を圧迫したり、システムの負荷を高くしたりしている可能性がある。
このような事態を少しでも改善する手段として、tempフォルダの場所(ドライブ)を変更するという方法がある。最近ではSSDが安価になってきているので、まずはtempフォルダだけでもC:とは別のSSDドライブなどに分散させてみよう。その後は、ページファイルやユーザードキュメントフォルダ、アプリのインストール先なども順次移動させるとよいだろう(ページファイルの移動についてはTIPS「ページファイルを別ドライブに移動してパフォーマンスを向上させる」参照)。
なおアプリによっては(プログラムのインストーラなど)、tempフォルダにファイルを展開してからシステムを再起動させ、再サインイン後にインストール処理を続行するようなものもある。なので、tempフォルダをRAMディスクのような(再起動したら内容が消滅する)揮発性のドライブ上に作成することは望ましくない。
tempフォルダの実際の場所は、次の2カ所ある。それぞれ、システム全体で共通のTEMP/TMP環境変数と、ユーザーごとのTEMP/TMP環境変数によってその場所を指し示すことになっている。
システムが起動した直後や、ユーザーがサインインしなくても実行されているサービスなどは、システムフォルダの下にあるtempフォルダを使っている。
だがユーザーがシステムにサインインした場合、そこから起動されるアプリなどは、ユーザーごとに固有のtempフォルダを利用する。
これらのフォルダは場所が分かれているが、実際には1つのフォルダにまとまっていても問題ない。例えばE:\TEMPフォルダだけを使うようにしておけば、tempフォルダのクリーンアップ作業などが簡単になる。
Windows OSでは、tempフォルダの場所はTEMPとTMPという2つの環境変数で指定している。TEMPもTMPも用途は同じなので、通常はどちらも同じ内容(パス)をセットしておけばよい。Windows OSの前身であるMS-DOSではTEMPをよく使っていたが、UNIXやLinuxなどでは/tmpフォルダを使っていたので、どちらで開発されたアプリでも同じように動作するように、現在では2つの環境変数が用意され、利用されている。
tempフォルダの場所を移動して、システム全体で1カ所だけにするには、次のようにする。
1.は、システム起動時に使われるtempフォルダの場所を指定する環境変数である。これを設定することにより、C:\Windows\Temp以外の場所がtempフォルダとして利用されるようになる。
2.でユーザー環境変数のTEMP/TMPを削除しているが、こうすると、システム側のTEMP/TMP環境変数の内容がユーザー環境でもそのまま使われるようになる(もし同名の環境変数があれば、ユーザー側の内容が優先される)。結果として、1.で設定したtempフォルダがユーザー環境でもそのまま利用されることになる。
以下、tempフォルダの環境変数を変更する手順を紹介する。
最初にtempフォルダとして利用するフォルダを作成し、アクセス権を設定する。指定したフォルダが存在しない場合は自動的に作成されるが、アクセス権やフォルダの構成などによっては作成に失敗することもあるので、あらかじめ作成しておくのがよい。
ここでは増設したE:ドライブ上に\TEMPというフォルダを作成して、そこをtempフォルダとして利用することにする(日本語や記号、空白文字などを含むフォルダ名はトラブルの元なので、避けること)。
アクセス権は、AdministratorsグループとUsersグループ、およびビルトインのSystemアカウントなどに対して読み書きを許可すればよいが、C:とは別のドライブを使っているならもっと簡単に、「Everyoneに対してフルコントロールを許可」でよいだろう。
コマンドプロンプト上で作業するなら、次のようなコマンドを実行する。caclsは、アクセス権を確認/設定するためのコマンドである。「cacls <パス> /g everyone:f」とすると、「Everyoneに対してフルコントロールを許可」する(「WindowsのcaclsコマンドでACLを編集する」「アクセス制御リストACL」参照)。
コマンドラインが難しい場合は、エクスプローラーで設定してもよい。 E:ドライブのルート上にTEMPフォルダを作成後、次の画面のようにセキュリティを設定しておく。
tempフォルダを用意できたら、次は環境変数を設定する。
環境変数の設定や確認を行うには、[システムの詳細設定]画面などから、[環境変数]の設定画面を開く必要がある。TIPS「Windows 10でコントロールパネルの[システム]や[システムのプロパティ]を素早く開く方法」で紹介しているように、[Windows]+[Pause]キーで[システムのプロパティ画面]を開いてもよいし、エクスプローラー上の[PC]アイコンを右クリックして、メニューから[プロパティ]を選んでもよい。そして表示されたプロパティ画面から、[システムの詳細設定]−[環境変数]ボタンをクリックする。
環境変数の確認画面が表示されたら、上にあるユーザー環境変数側で[TEMP]を選んで[削除]ボタンを押し、さらに[TMP]を選んでこれも[削除]する。
次はシステム環境変数側で[TEMP]を選んで[編集]をクリックし、新しいtempフォルダのパスを指定する。同様にして[TMP]変数にも同じパスをセットする。
システム環境変数をコマンドラインから設定するには、管理者権限でコマンドプロンプトを開いて、「setx /m <環境変数名> <値>」というコマンドを実行する。/mはシステム環境変数を設定するオプションで、これがないとユーザー環境変数が設定される。詳細はTIPS「setxで環境変数の値を設定する」参照のこと。
setx /m TEMP E:\TEMP
setx /m TMP E:\TEMP
ただしsetxコマンドでは環境変数そのものの削除はできないので(空の値を設定することは可能だが)、ユーザー環境変数のTEMPとTMPを操作したければ、システム環境変数と同じ値を設定しておくとよい。次のいずれかのコマンドを実行する。
※方法1:システム環境変数と同じ値を設定する方法
setx TEMP E:\TEMP
setx TMP E:\TEMP
※方法2:システム環境変数のTEMPとTMPの値を継承する方法。この場合は、% の直前に ^ を付けて環境変数の展開を抑制すること
setx TEMP ^%TEMP^%
setx TMP ^%TMP^%
設定が完了したら、システムを再起動する(システム環境変数を変更した場合は再起動が、ユーザー環境変数を変更した場合は再サインインが、それぞれ必要)。
再起動後、サインインしてコマンドプロンプトを開き、「set t」コマンドでTEMPとTMPの値が正しく設定されていることを確認する。また、tempフォルダ中にはすでに一時ファイルやログファイルなどが幾つか作成されているはずなので、それも確認しておく。
正しく設定されていなかったり、元の「C:\Users\〜」で始まるパス名が表示されたりしているようなら、もう一度設定を確認する。
パスが不正だったり、書き込みの権限が不足しているようだと、例えばアプリなどが正しく起動しなかったり、見たことのない意味不明なエラーが発生したりすることが多い。
設定が完了したら、元のtempフォルダ(C:\Windows\Tempと%USERPROFILE%\AppData\Local\Temp)の内容は削除してもよい。ただし無用なトラブルを防ぐため、元のtempフォルダそのものは空のまま残しておいた方がいいだろう(システムに大きな更新などを適用すると、tempフォルダの設定がデフォルト状態に戻る、といったことがあるため)。
ユーザー環境変数のTEMPとTMPは、新しいユーザーがシステムにサインインした時に自動的に作成される。そのため各ユーザーは、最初にサインインしたときに、それぞれユーザー側のTEMPとTMPの削除を行う必要がある。これをしないと、デフォルトのtempフォルダが利用される。上述の環境変数の編集画面を開き、ユーザー環境変数側のTEMPとTMPを削除すればよい。
■更新履歴
【2019/02/15】最新状況に合わせて、内容を更新しました。
【2004/02/14】初版公開。
■この記事と関連性の高い別の記事
Copyright© Digital Advantage Corp. All Rights Reserved.