Web Analytics

Technically Impossible

Lets look at the weak link in your statement. Anything "Technically Impossible" basically means we haven't figured out how yet.

Windowsアプリケーションの適切なインストール先 - Namespace Usage Guidelines for the Windows Vista File System

Windowsにて何かをインストールする場合、定番のインストール先は

%PROGRAMFILES%
C:\Program Files\

場合によっては、諸々の制約を回避するため、Cドライブ直下にフォルダを作成してインストールするものもある。諸々の制約とは例えば、次のようなことである。

  • Windows Vista以降、C:\Program Files\での書き込みが、基本的には認められていない。
  • パスにスペースが含まれるのが好まれない。適切に処理されない。

Pythonをインストールしようとしているとき、インストーラが次のフォルダへインストールしようとしているのに気付いた。

C:\Users\%username%\AppData\Local\Programs\Python\...

このインストールは適切なのだろうか。ここでいう適切とは、技術的に正しいか、ということではなく、Microsoft、そしてWindowsが想定しているマナーや慣例上よろしいのか、ということだ。
実行環境なのだから、Program Files、あるいはc:\Python\...のような場所へインストールされるべきではないか?
そういえば、そもそもWindows Vista以降のフォルダ構成、特に新しく追加されたフォルダ群の目的を、私は知らないのだった。そこでフォルダの用途などを調べてみることを思い立った。

Namespace Usage Guidelines for the Windows Vista File System

Windows 10のフォルダ構成は、Windows Vistaから採用された構成を踏襲している。そのため、今回の調査では表題の文書を参照している。
未だに需要のある文書ではあるのだが、Microsoft社サイト上のダウンロード・リンクは機能していない。このエントリでは、次のサイトにアップロードされている文書を参照した。
www.scribd.com

ユーザー用のデータ置き場、アプリケーション用のデータ置き場

まず、ここでいうデータというのは文書や画像、動画ファイルであったり、.ini、.datのような設定ファイルなどを指す。実行ファイルではないことに注意。
参照、編集するのがユーザーなのか、アプリケーションなのかによって、データ置き場となるフォルダが明確に区別されている。また、それらが特定のユーザー専用であるのか、全ユーザー共通であるのかによっても区別されている。

ユーザー用
特定ユーザー専用 %HOMEPATH%
%USERPROFILE%
C:\Users\%username%\
全ユーザー共通 %PUBLIC%
C:\Users\Public\
アプリケーション用
特定ユーザー専用 %HOMEPATH%\AppData\
%USERPROFILE%\AppData\
C:\Users\%USERNAME%\AppData\
全ユーザー共通 %PROGRAMDATA%
C:\ProgramData\

アプリケーション用のフォルダは、ユーザーが参照すべきではない前提から、隠しフォルダとして実装されている。

ちなみに文書を読んでいて興味をひかれたことが一点。Outlookで用いられる.pstファイルは、ユーザー用データではなく、アプリケーション用データとして分類されていることだ。それは、次の考えが反映された帰結のようだ。

  • ファイルの編集はアプリケーションの仕事であり、ユーザーが直接操作すべきものではない。
  • 必要ならば、ユーザーはOutlookの管理画面を介してファイルを管理する。

特定ユーザー専用のアプリケーション・データ

ユーザー個人が自宅で利用するようなPCを前提に言えば、

%LOCALAPPDATA%
C:\Users\%USERNAME%\AppData\Local\

以外の保存先を考慮する必要はないのだが、業務利用、特にActive Directoryと連携する場合(端的にはroaming profile、folder redirect)、データの保存先をさらに考慮する必要がある。
それは”C:\Users\%USERNAME%\AppData\”配下で、次のフォルダに分類される。

Roaming 端的にはroaming profileやfolder redirectの対象になるデータを保存する。
文字で簡潔に表現するのが難しいのだが、他のPCへ設定を引き継ぐ必要があるデータ。
Local 他のPCへ設定を引き継ぐ必要がないデータを保存する。
LocalLow low-rightsなデータを保存する。
low-rightsも文字で簡潔に表現するのが難しい。例えば保護モードであったり、アクセスが限定されているアプリケーションが参照するデータ。

アプリケーションの適切なインストール先、あるいはマナー

文書によると、プログラムやソフトウェア・コンポーネントの保存先は”C:\Program Files”が正解。そして、このフォルダにはユーザー、アプリケーション用に関わらず、データは保存しない。

C:\Program Files:
Storage location for programs and software components.
Users should not store any user data or application data here because of the security permissions configured for this folder. Standard users do not have rights to write data to this location.

適切なインストール・フォルダは次のようになる。

%PROGRAMFILES%
C:\Program Files
実行ファイルやライブラリ
%PROGRAMDATA%
C:\ProgramData
アプリケーションが必要とするデータ、設定ファイル
%HOMEPATH%\AppData\
%USERPROFILE%\AppData\
C:\Users\%USERNAME%\AppData\
ユーザーごとの設定ファイル

そして最後に、”C:\Python\...”のようにルート・フォルダ直下にインストールするのは、やはりマナー違反だ。

Creating Folders at the Drive Root
An application should not create files or folders at the root of the system drive and should use the folder structure as described in previous sections to store their program and software components, applicationdata, and user data.