言語ゲーム

とあるエンジニアが嘘ばかり書く日記

Twitter: @propella

無名ファイルシステム

ファイルは無名であるべきである。

無名のファイルシステムを考える。無名とは呼んで字の如くファイルに名前がついてない事である。私達はファイルには必ずファイル名がついている物と考えているが、ファイル名には欠点がある。だからファイル名は無いほうが良い。少なくともファイル名が無くとも動作するシステムを設計するべきだという主張。ファイル名の欠点は以下の通り。

  • 同じファイル名のファイルが存在出来ない。
  • ファイルには必ず名前がつかなければならない。

ファイル名には幾つか役割がある。人間が見てファイルを見分ける為、システムがファイルを参照する為など。しかしファイル名はそのどちらにも適さない。

世の中には同じ名前の物なんて沢山あるのに同じファイル名が存在出来ないし、同じ物のコピーでも別の名前がつけられてしまう事から人間の役に立たない。折角のファイルもファイル名を変えると探せなくなるのでシステムの役にも立たない。また、テンポラリファイルと言って、ダウンロードした画像のようにファイル名なんてどうでも良いものにまで名前をつけなくてはいけないのは理不尽だし、ファイル名をつけると不要なファイルを消し忘れたりする。

そこで、ファイルは無名を基本とする。ファイル名の代わりにそれぞれのファイルに重複しないIDを付加し、参照するときはIDを使う。ファイル名とIDの違いは、ファイル名はディレクトリが持つのに対し、IDはファイル自身が持つ。勿論、ファイル名があっても良い。プログラマにはファイル名は非常に便利な物だ。だけどあるファイルが他の画像かなんかを指すとき、ファイル名でなくIDで指しているのでファイル名が変わっても同じファイルを指し示す。

ファイルは定期的にガベージコレクションによって削除される。ファイル名のあるファイルはファイル名によって参照されているので削除されない。テンポラリファイルの消し忘れは起こらない。

同じIDのファイルは全世界に一つしか存在しない。ダウンロードしたファイルは元と同じIDを持つ。ファイルは更新出来ず、追加のみ出来る。ファイルを更新したい場合は単に新しいファイルとIDを作る。もしそのファイルを参照していた箇所が一つなら、古いファイルは自動的にガベコレによって消える。更新を同期させたい場合は間接参照を使う。

簡単な話ファイルをメモリのように扱うという事だ。

ファイルは無名であるべきである。