MicrosoftのRaymond Chen氏のブログ「Why are there both TMP and TEMP environment variables, and which one is right?」(本の虫日本語訳)にて、なぜWindowsで「TMP」と「TEMP」2つの似通った環境変数が存在するのか、その理由が説明されています。
CP/Mにはなかったから?
同氏はまず、MS-DOS開発の契機となったCP/Mには環境変数が存在しておらず、環境変数はMS-DOSで拡張された機能の一つであると前提し、CP/Mから移植されたプログラムではなく、MS-DOS専用プログラムが作られているうちに、独自に環境変数(TMPやTEMPなど)を使用するプログラムが増えていったと説明しています。
その後、MS-DOS2.0でパイプ機能が実装された際、一時ファイルを保存する場所を決定するためにCOMMAND.COMは環境変数TEMPを参照するように定められたものの、他のプログラムがTEMPあるいはTMPどちらを参照するかまでは統一はなされず、結果、折衷案として多くのプログラムがTMPとTEMP両方を参照するようになり、どちらを優先するかは決まらないままWindowsに至ったというのです。
とはいえ、WindowsのAPIであるGetTempFileNameやGetTempPathでは、TMPの次にTEMPを参照する仕様なので、これら標準APIを使ったWindowsプログラムではTMPが優先される場合が多くなっているとのこと。
Windows 7にもTEMPとTMPが存在し、両方同じフォルダが設定されているのにはこんな理由があったんですね。Raymond Chen氏は以下の書籍の著者でもあります。興味を持たれた方は参照してみてはいかたでしょうか。
continue reading