ファイルって?


俺が apple でグラフィック関係の操作をしていて思うのは, ファイル操作は, 幾ら zsh が凄くても, apple のファインダにはかなわないと いうことだ. まあ, これはファイルシステムの違いもあるにはあるが, いちいちlsしないとどんなファイルがあるのかも判んないというのは, 今時, やはり, かなりキてると言わざるを得ない. 無論, メモリが断片化したら再起動するしかないシステムの方がよっぽどキてる わけだが, ここでは終り無き聖戦を始めるのが目的ではない(え, ちがうの?なー んだ). 「ま」の付く会社は所詮亜流であるから, この際めんどくさいだけだ から除外しよう.

普通行うファイル操作は, あっちにある奴をこっちに移したり, ディレクトリをひとつにまとめて圧縮したり, アーカイブを解凍したり, ゴミを消したりといった作業だ. GUI による操作の優れている所は, cd したら, 同時に ls もされているという 事だ(1). 普通, cd したら, そこにどんなファイルがあるかを見たいだろ? 「俺はディレクトリを変更したいだけで, そこにどんなファイルがあるかは, 興味無いんだ!(それとも暗記している?)」という奇特な人も居るかもしれない が, 少なくとも俺はそうじゃない. だから, 少なくとも, cd は次のように alias されているべきであろう.

alias cd "cd \!* ; ls"
だからといって, hfs の使い勝手に近付くかというと, そんな事もないし, だいたい hfs 自体もかなりキてるので, 今や目標とすべき存在では, 必ずしも ない. まあ, そんな事はいいや. とにかく, unix ライクな シェルインターフェースは, 日常のファイル操作に 関しては, かなりしんどいやりかたで, hfs とファインダの組合せには対抗す べくもないのだ. だったら, さっさと apple に移れって?

でも, 事はそう単純ではない. 一旦プログラミングめいた事を始めると, GUI の限界が直ちに現れて来る. これは何故か?

GUI は日常の物体に即したメタファである. しかし, 実際に扱う対象は, 「ファイル」 という「データに名前を付けたもの」だ. きわめて抽象的で本質的に日常とはかけはなれた存在だ. だから, ファイルばっかりは, 計算機がどんなに進歩しても, 決してわかりやすくならないだろう.

この場合, 判りやすいということの定義がやや重要だ. 確かに, 明示的で厳密な構造は判りやすいが, 判りやすさを構成している要素は それだけではない. なぜなら, 理解は論理とは全然関係が無いからだ. もう一度言おう. 理解は論理とは関係ない.

理解という現象は, 「判った」という感情がもっとも原始的な構成要素だという ことに気が付いた時に, 非常に明瞭になる. 別に, 得られた知識が正しいか間違っているかなんか, 理解とは何の関係も無い のだ. 判ったという感情は, 未知の対象が既知になった時に発生する安心感と, 極めて強い関連がある. 安心できるかどうか だけが問題だから, よく知っている事と似ているならば, 「判った」と思える.

ファイルが本質的に日常とかけはなれた対象である以上, わかりやすさを追求し て必要以上に日常と強く 関連付けることは, 計算機システムに於ける「ファイル」のポテンシャルを減殺 することになる. たまに感じる GUI の使いにくさは, この辺にも原因がある.

いいかげんで結論を言おう. 適材適所だ. 両方無いと, 駄目だ. 幾ら俺がタイプが速くても, だ. これを見ろ.

aya:~%history | grep ls | wc -l
    215
aya:~%history | wc -l
   1024
オソルベシ. 1024 のヒストリのうち, ls がらみは 215個もあるぜ. 5回に 1 回は ls をタイプしているわけだ. ちなみに cd は 178個だ. cd と ls で合計 40% だぜ! "l" と "s" のキーがそのうち無くなっちまうだろうぜ. 俺は言いたい. unix にもファインダを!

というわけで, 俺は dfm を強化すべく, 日夜しょうもないスクリプトを書き続 けている. 今やアーカイブの作製と展開は drag & drop で可能だ. これ は, そのためのスクリプト. コマンドから使える本体と, X(つまり, dfm とか, 類似の drag & drop できるファイルマネージャ)で使うための wrapper の組み合わせだ. wrapper を実行すると xterm が出て, ちょっと表示 したり, 聞いて来たりする. 展開は, 展開されてファイルをばらまかれたら困る んで, 一旦ファイル一覧を見てから実際に展開するようになっている. ディレクトリを引数にするとアーカイブし, "*tar.gz" と "*tar.bz2" と "*tar" に対しては正しく動作し, 展開してくれる. 他は知らん.

そして, このスクリプトが書けるためには, cd と ls は別のプログラムでなけ れば不可能だった. やはり単純さは全てに優先するのか? また, コマンドラインは「軽い」ので, ネットワークに適するという点も, 見逃せない. だから, どっちかしか無いというのは, 問題外だ. GUI は便利だが, また, kterm 一個で全部間に合う人も居るのだ.

そうだ. ユーザインターフェースをユーザが決める自由をくれ. 少なくとも, ユーザインターフェースをカーネルに統合するのは, 優雅な設計と はいえない. ブラウザを統合?ずばり言って, アホですな.


(1)unix でないひとへ. cd は違うフォルダを訪れるためのコマンドであり, ls はフォルダの中身を見るコマンドなのだ. apple の人には信じられないだろ うが, この2つは別のプログラムなのだ! unix は 1969年の誕生以来, "keep it simple, stupid!" 略して "KISS原理"をモットーとしており, 「単純なものから複雑なものを構成する事は簡単だが, 逆は難しい」 という B.Kerninghan の神託に忠実に, いまもこれら 2つの機能を独立のプログ ラムとして提供しているのだ(厳密に言うと cd は shell の内部コマンドで, 独 立のプログラムではないが). 生きている化石である. 無論これには別の見方もある. つまり, 化石だけれど, 生きている.