ツリー構造
ツリー構造とは昔からの整理方法である。各々の情報に単一のマークを付けて、このマークを基にして情報にアクセスする。例えば、WebでつかわれるURLとかURIとかはツリー構造の一つである。僕が情報管理の方法に欠点を感じる点は、単一のマークを情報にマークすることである。シンボリックリンクという技術はこの点をうまく回避し、同じ情報に対して複数のマークをつけることが出来る。
代替リンク
シンボリックリンクという考え方をもう少し考えてみる。あるプールにまとめて収められている情報に複数のマークを付けてみる。例えば、./row/ というディレクトリに全く未分類の情報が入っているとする。このディレクトリに含まれている情報にディレクトリを介したシンボリックリンクを貼ることでタグを付ける。
$ ls ./row/ 001.txt 002.txt 003.txt $ cd ./tag/game/ $ ln -s ../../row/001.txt uno.txt $ cd ./tag/boy/ $ ln -s ../../row/001.txt tom.txt $ ls ./tag/* tag/game: uno.txt -> ../../row/001.txt tag/boy: tom.txt -> ../../row/001.txt tag/girl:
このようにすることで、001.txtにgameとboyというタグを貼ったことになる。もし、タグの名前を変えたくなった場合は./tag/game/というディレクトリの名前自体を変えてしまえばよい。
$ cd ../ $ mv game games
ただし、絶対にしてはいけないことは、./row/ ディレクトリに含まれるファイルのファイルネームを書き換えてはいけないということだ。正しく言えば、./row/ ディレクトリの中身のことは忘れようということだ。ファイルの実体はそこにあっても、書き換えや変更はタグディレクトリの中で行うようにすることだ。ここで、001.txtにどのようなタグがつけられているかを探してみよう。
$ cd ./tag/ $ find . -lname '*001.txt*' ./boy/tom.txt ./games/uno.txt
ということで、001.txtにはgameとboyの2つのタグがつけられていることがわかった。ひとつの情報に複数のタグを付けることが出来たのでこの方法は面白いようにも見える。しかし、この方法にも問題点が存在する。それは、タグによる情報の検索だ。ここで、gamesとboyというタグがつけられた情報を選び出したいという場合を考える。当然ながら、001.txtがヒットすればOKだが、これをするには結構コストがかかる。やってみよう。
$ ls -l tag/games/ tag/boy/ | perl -F'/->\s/' -lnae 'print $F[1]' | sort | uniq -c | grep --regex "^\s*2" 2 ../../row/001.txt
という感じだ。これで、gamesとboyのタグが両方つけられた情報が001.txtという名前だとわかった。さらに、boyとgamesとgirlのタグがつけられたものを探してみる。注意点は、lsコマンドに与えるタグにgirlを追加することと、grepの引数を2から3に変えることだ、次のようにする。
$ ls -l tag/games/ tag/boy/ tag/girl/ | perl -F'/->\s/' -lnae 'print $F[1]' | sort | uniq -c | grep --regex "^\s*3"
当然ながらヒットしない。ヒットしなくてよいのだ。このやり方は問題がある。例えば、gamesのディレクトリに同じ情報を別名でシンボリックリンクを貼っている場合を考える。すると、3つの同じリンク先を持つシンボリックリンクがあるため、ヒットしてしまう。