蔵書管理システムのタグ付け

del.icio.us ですっかりタグ付けに魅了されてしまったので、 前に作った蔵書管理システム からカテゴリー機能を削除して、代わりにタグ付け機能を付けてみた。

タグ付けには acts_as_taggable を使用。acts_as_taggableが提供してくれる機能を自前で実装するのは誰でもできるだろうけれど、それが一行の宣言で済むというのは積もりつもればかなり生産性に差を付けるだろう。なにより、可読性が高い。

今のところ単に書籍にタグを割り振って、タグベースで検索したり、というベーシックな機能しかない。そのうち、del.icio.usとの連携やタグ空間におけるオントロジーを実現できたらよいと思う。そういう、DBのスキーマを変えなくちゃいけないような開発もインクリメンタルにやりやすいのはrailsの利点の一つだね。

カテゴリー分け機能は使わなくなりそうなので削除した。やっぱり、人間の認識ってそこまで完璧に階層的ではなくて、もっといろいろ絡み合ってできてるから、タグ付けの方が直感的に操作しやすい。元々、書籍とカテゴリーの間は(0..n)対(0..n)にしてあったからそう違わないといえばそうなんだけれど、強迫性の問題だろうか。強迫観念が分類や計数に関わりやすいように、階層的分類には何か強迫的なものがある。技術的にはむしろこれは退行であって、カテゴリ群が階層性を失ってフラットなタグ群に変わっただけだ。でも、操作にあたっての意識面ではかなり使いやすくなったと思う。違いというのは多分

  • カテゴリーが書籍を所有するのではなく、書籍の属性としてタグが存在する。
  • タグ同士が完全な包含関係にあるとしてもそれは特殊例で、一般には複数のタグは互いに重なり合い、その共通部分として書籍の性質が浮き上がってくる。これはカテゴリー分けよりもずっと有機的な関係であって、しかもそれがUIとして目に見える。

苦労して作ったカテゴリー操作GUIを使わなくなるのだけが残念。ドラッグ&ドロップによって書籍をカテゴリーに入れたり、Ajaxでカテゴリ階層ツリーを表示したり、それなりに手を掛けたんだけど。階層ツリーサポート用のスクリプトは会社で再利用できそうだから、それで良いことにしよう。