言語ゲーム

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

Twitter: @propella

メール、ファイル共有、プレゼンテーションについてのメモ2

もしもウェブで使われる URL が SHA-1 だったら? というだけで相当面白い事が分かって来た。

SHA-1 もしくはハッシュキー を URL として使えるか?

ファイルに名前を付けるには二つの方法がある。一つはファイルの置いてある「場所」を名前とみなす方法、もう一つはファイルの内容に名前を付ける方法。

直感的に私達はファイル自体に名前がついているかのように感じているが、実際にはファイル名というのは「場所」を現している。例えば、hello.txt というファイルが目の前にある時、それはたまたま hello.txt と名付けられた場所にあるファイルだと言う意味なので、私が思う hello.txt と あなたが思う hello.txt は違う内容だという事が当然起こる。

内容に名前を付けるというのは簡単そうでややこしい、なぜなら、自分で勝手に決めても意味が無く、みんながその名前を認めてくれないと役に立たないからだ。実用的に名前を付けるには名前がカブらないような中央管理的な仕組みが必要で、ドメイン名や RFC 等、名前の決定には権威が必要だ、しかし世の中には賢い人がいるもので、ハッシュキーという物を使うと中央管理が無くとも絶対カブらない名前が生まれる。例えば私が使っているハッシュキーの一つ SHA-1 で "Hello, World!" という文字列は 0a0a9f2a6772942557ab5355d76af442f8f65e01 という名前になる。これは私のコンピュータで名付けてもあなたのコンピュータで名付けても同じ結果になる。

ハッシュキーは味気ないのが残念だが、同じ内容のハッシュキーは必ず同じで、違う内容のハッシュキーは(無視出来る程度に)だいたい違うという凄い性質がある。これは URL の代わりに使えるという事だ。

トリッキーなのは、ハッシュキーはあるファイルとあるファイルが同じかどうかを確認出来ても、それだけではあるファイルをどうやって入手すれば良いか分からない事だ。例えば私が 2004 年に撮った自分の顔写真の SHA-1 は b2d84b215ffcb0ad8cba3f6adf3e909d18a6dd65 だが、昔の顔が見たいと思ってもこれだけではどのコンピュータのどのディスクにあるどのファイルか知る術が無い。しかしハッシュキーを使ったデータベースはこれはこれでホットな話題であるし、解決の方法は色々あるので、ここではハッシュキーを URL として使える物とする。

ハッシュキーを URL として使う事で何が変わるか?

架空の URL の書式 hash: というのを考える。先ほどの写真をこの URL で示すと hash:b2d84b215ffcb0ad8cba3f6adf3e909d18a6dd65 になる。果たしてこの URL は既存の URL とどこが異なるだろうか?

表面的には、全く問題無く使える。この URL を持つデータは世界で一つ私の顔写真だけなので、この URL さえあれば必ず元の写真を見る事が出来る。

一つ問題なのが、あとからこの写真を変更する事が出来ないという事だ。私が写真を編集してさらに若く見せた所でそのハッシュキーは変わってしまうので、URL の内容は同じだ。これは便利な場合と不便な場合があるだろう。過去の履歴を必ず残したい場合は便利だし、メールの内容など、書き変わってはいけない物にも適している。

もう一つの問題は、相互参照出来ない事だ。相互参照というのは、例えばホームページから自己紹介ページへのリンクを貼って、自己紹介からホームページへ戻るリンクを作れない。なぜなら、ハッシュキーはファイルの内容によって発行されるので、自己紹介ページのハッシュURL をホームページに貼付けた後にホームページの URL を自己紹介に貼ると、自己紹介のハッシュは変わってしまう。つまり、リンクは必ず一方向になる。この問題は、検索エンジンのようにリンクを辿り、自動的に逆リンクを生成する仕組みがあれば解決する。

また、そもそもブログのように変化するサイトは作れない。なぜなら、変化すると URL が変わってしまうのでみんなが来れなくなってしまう。これは二つの解決策がある。一つは今のドメインのような中央管理的な仕組みでシンボリックな名前とハッシュ URL をマップする方法。もう一つは記事を更新した時は必ず特別な方法で古い記事にリンクを貼るようにして、先ほどの自動逆リンクで最新版まで辿るという方法だ。

この思考実験の意味

もともとハッシュキーを使うアイデアは、メールのようにファイル名が無いシステムとウェブを融合するにはどうするかから始まった。ハッシュキーを URL として使うという単純な変更から、今のウェブには無い面白い性質を持つハイパーテキストの体系が出来上がる事が分かった。

ちなみに、五年ほど前にも同じような事を書いた。当時は単なるネタだったが今頃実装していると思うと感慨深い http://d.hatena.ne.jp/propella/20050822/p2