Windows では何種類にも派生しちゃう HOME、やぁねぇ

「諦め」入ってはいるんだけれど。

pwd の話にも通ずるのだが、生まれて初めて Windows を使った 1998 年からずっとストレスで、結局解はないので諦めている「HOME」問題、より広くは「標準のユーザ固有置き場(のルート)」問題。結局のところは都度考えて、何かしらの妥協案を取るしかない。

「Unix だけが世界だ」というスタンスに立つならばこれほどシンプルな話はなく、HOME
/home/youraccount 以外の何者でもなく、「標準のユーザ固有置き場のルート」は HOME で良く、「固有設定ファイル」は HOME 直下に置くドットファイル、だ。

「Windows だけが世界だ」とした場合にシンプルか? 否。

まず「歴史的経緯」が実際複雑で、HOME 相当の場所はここだ、というのが確定したのはつい最近になってからだ。「Windows 9x」なんつーぶっ壊れたオモチャでは「そんなもんはない」でしかなく、Unix 生まれのソフトウェアの多くが採用していたのは「HOME 環境変数自作」であった。

ではその「ぶっ壊れたオモチャ」そのものに「ユーザ固有のナニモノか置き場の標準」はなかったのか。これも否。あった、し、今でも同じシカケはある。これが綺麗なツリーを成していれば良かったんだけどね、設計が場当たり的だったために、これも Windows のバージョンとともに「進化」しやがった。進化つーか、「非互換な整理の繰り返し」と言ったほうがいい。そもそもホームの概念なしに「マイドキュメント場所」のような枝だけ先に定義されていったのが大問題。親のない単独の子ノードが乱立した、ってことだ。

開発者として、ユーザとして、「実際問題どれに従えば良いのだ?」が Windows バージョンアップのたびに変化していった中で、「じゃぁ今どれに従ってんの?」はアプリケーションによってバラバラである。あらゆるアプリケーションが c:/Users/hhsprings/AppData/Roaming に行儀良く置いてくれるわけではない。まさにこの「AppData/Roaming 流儀」のような「Microsoft 流階層化」に逐一従うことはアプリケーション開発者にとっての大きな負担であり、だからこの新式ではない旧式に従うものも多いし、そもそも我関せずなアプリケーションも当然多い。

「アプリケーション開発者にとっての大きな負担」とはいっても本来はこれは Microsoft によってドキュメントされているものであり、誠実なアプリケーションはこれに従おうとしている。負担言うたって、実際は「どの環境変数(実体はレジストリ)に従うか」だけの話だから。

「Unix 流儀が混在しない Windows」だけでもこれだけのことになっているわけだから、これが混在するとさらに混乱したことになる。MSYS は「オレオレ HOME」を勝手に発明する。MSYS2、cygwin も同じだ。だからこれら全部を使ってると、「おぬしの HOME はどこなのじゃ?」と、HOME 本来の意義を覆す問いをせざるを得なくなる。

つーわけでワタシの PC は「色んな種類の HOME、色んな種類のユーザ固有設定置き場」だらけで、どこ見りゃ設定ファイルがあるんだ、てのはアプリケーションそれぞれで違うので都度迷子になる。

なんつーのかなぁ、ユーザとしてはせめて「固有設定置き場データベース」みたいなのを管理する、てことは考えてもいいのかもなぁ、と最近思い始めた、て話。一番困るのが MSYS コマンドラインにいる時に、非 MSYS アプリケーション、例えばワタシの場合だと hg や python、pip などの設定ファイルを参照したい場合。MSYS ではないのだから「~/.hgrc」(チルダ) みたいに簡単に辿り付けはしない。そう、まさに最近 .pypirc 置き場がわからず苦労したのであった。こやつは CPython Windows 公式バイナリの場合は c:/Users/hhsprings ね、ワタシの場合は。

ところでこの話、当たり前だが「ユーザ固有」ではなく「アプリケーション固有」としても全く同じ話が成立する。Unix なら「/etc/」「/share/」(と「/usr」「/usr/local」配下の同名)がほぼ全て。Windows はそうじゃない。(そもそもが「ファイル」に置くか「レジストリ」に置くか、の二つがあって既にこれだけでも大変。)

なんだろ、例えば実行ファイルへのパスをキーとして、固有設定置き場を返す、のようなナレッジベースがあれば、少しは楽にはなるのかな、と思う。ものによっては複雑なレジストリ探索が必要となるであろう。また、「本当にユーザごとにバラバラ」なものもあれば、「アプリケーションが決まれば決まる」ものもあるだろう。だから「自動探索」部分と、利用者が自身で登録出来るのが理想だ。

てのが欲しいが、出来合いのものでこんなんないかなぁ? 「現在の Microsoft 推奨ルール」とは切り離されたものがいい。そういうのは多分「開発環境」の一味として見つかるだろう。つまり「オヌシが作るアプリケーションはこのコンフィギュレーションマネージャクラスを使え」てことだ。そういうことじゃないんだよ。

とにかく emacs 内や MSYS コマンドライン、python スクリプト内からクエリするのに使えるものが欲しいわけなので、どうだろね、例えば redis とかに突っ込んどくとか? いや…バージョン管理もしたいぞ、てことなら、データベースは bitbucket とかに剥き身で置いとけるテキストがいいのか。

まぁ何かいいこと思いついたり見つけたら書こうと思う。今のところこれは皮算用。夢見がちな。