Unix系の隠しファイルの仕組みは開発者のポカから生まれた悪習だった


hidden file

今となってはLinuxでのvimやtmuxのコンフィグファイルなど、基本的にユーザーに見せる必要のないファイルを
隠しファイルとしてホームディレクトリに置くという作法がよくつかわれます。

.tmuxや.vimrc、.sshなど枚挙にいとまがありませんが
その起源はプログラマが作り出したバグとコピペとこじつけの3連コンボクリティカルによるものでした。

成り立ち

lsコマンドといえば定番のファイル一覧表示コマンドですが
オプション無しではUnixの実装上存在するカレントディレクトリ、親ディレクトリを指す、.と..を表示しません。
特殊で常在するディレクトリなので当然ですがその実装はちょっとだけ、短かったのです。
実際はアセンブラですが

//実際にできたもの
if (name[0] == '.') continue;
//本当に必要だったもの
if (strcmp(name, ".") == 0 || strcmp(name, "..") == 0) continue;
//営業が提案したもの
// ʕ◔ϖ◔ʔ 

このバグ自体は簡単なものでしたが、2つの結果を引き起こしました。

まず初めに、lsという先例ができたことによって他のいくつかのプログラマが真似をしました。
そのため初めに.が含まれるファイルがスキップされることがよくあります。

第二に、隠しファイル、ドットファイルというアイデアが生まれてしまったことです。
結果としてさらに怠惰なプログラマは隠しファイルをホームディレクトリにぶちこみまくりました。
おかげでホームディレクトリを通過するファイルの評価をするたびこのゴミカスウンチをご自慢のチンポで確認しないといけなくなりました。

代替の方法

とはいってもhidden fileはよく使われています。
設定ファイルのような、不慣れなユーザには余分なファイルの隠蔽は非常に役立つからです。
ですがそもそもホームディレクトリに設定ファイルをそのまま置くことが問題なので
本来であればlib/やcfg/などを作ってそこに放り込む慣習にするべきでした。

というわけで

というわけでPlan9では隠しファイルのアイデアは実装されていません。
詳しくはUnix開発者の人のこちらのブログを見てください。
https://plus.google.com/+RobPikeTheHuman/posts/R58WgWwN9jp

しかしこの記事を見るまでまるで疑問にも思いませんでした。
設計を重視しているUnixですから多少古くがたついたところがあるとはいえまさかこんな・・・いやそんな・・・常識を覆されました。
いわれてみればもっともな話ですが、なかなか気づかないものですね。
vim ~/.vimrcよりも
vim ~/cfg/vimrc の方が見た目にも設定ファイルであることが明示的でいいと思います。

ちなみにls -aコマンドではちゃんとカレントディレクトリなどが表示されます。