kbigwheelのプログラミング・ソフトウェア技術系ブログ

プログラミング・ソフトウェア技術系のことを書きます

「階層脳」を使って自分の改造構造・タグについての考えを整理してみる

きっかけ

以前から僕は階層不要説に懐疑的だったのだけど、ふとそのことについてつぶやいたらscrapboxの開発者の人がそれに反応してくれた。 いい機会なので記事分類手法における階層について僕が思っていることを書く。

階層脳に対する反論

scrapbox.io

この記事は反階層主張の中でもかなり有名だと思うのだけど(かつ上記の反応してくれた人の記事でもある)、 ちょうどいいのでこれを題材にして僕の考えを浮かび上がらせようと思う。

以下上記記事中のトピックとそれに対する僕の意見を書く。

階層的管理の失敗

たいてい途中で破綻する

大筋同意だけども、僕が見た破綻は以下の2パターンでどちらも階層構造固有とは言い難かった。

  1. 新たなコミュニティの参加者が階層構造を把握せずroot直下でページを作ってしまう
    • scrapboxでもリンクを貼らなかったりすでにあるハッシュタグを使わずページを作ると結局同じ
    • つまるところオンボーディングの問題
  2. 階層構造を変更したい人間が従来と異なる階層ルールを導入して新旧ルールが入り混じり、その結果ルールが崩壊する
    • きちんとコンセンサスを取らないことが原因
    • また階層構造変更の提案が通りにくい遠因として構造を変更するとリンク切れを起こしたり、そもそもページの移動が手作業で大変だったりするシステム側の問題がある
      • 後述のようにページへのパーマリンクを階層構造とは切り離しておけばパーマリンクは死なないし、REST APIなどでページを移動できるようにしておけば階層構造変更もそれほど高コストではなくなる1

タグづけ機能を追加する

タグ付けについては僕も階層構造と同時に実装するのは微妙だと思う。タグも階層構造もどちらも記事の分類目的なのだからどちらかにするか、あるいはタグ自体に階層構造をもたせるのがよいかもしれない( lang/javasystem-alpha/post-mortem などのイメージ)

Symbolic Linkのようなリンクを付加する

おそらくページを階層構造上の2箇所以上へ擬似的に置きたいという意図だと思うが、いっそhard linkにして普通に2箇所におけるようにすれば良いと思う。パーマリンクを階層構造と無関係にすれば実現は難しくない。

しかし既にある階層同士の参照を壊すわけにはいかないので、階層構造は維持される

ここはコンテキストが省略されすぎていてちょっとわからなかった

うまくいく場合

 誰もが納得する簡単な階層構造があるときは大丈夫かも
  日付
  音楽データ
   アーティスト/アルバム/曲名
 最初に階層構造を決めないとうまくいかない
  構造が綺麗に決まっていると、新参者でもデータを追加しやすい

この辺でこれを書いた人はそのページのカテゴライズ・階層構造上の位置が書いた瞬間に絶対的に決まるイメージを持っていることに気づく。それは確かにしんどい構造なので継続的に階層構造を保守していくイメージを持てばいいんじゃないかなと思う。

うまくいかない理由

 複数の属性をもつものをどこに置けば良いかわからない
  aka [こうもり問題]
  こうもりは動物か鳥か分類し辛い
  特に複数人で書いているwikiでは判断が分かれて、ケンカの元になる
 階層的に分類するのは疲れる
 階層構造の変更が大変
  最初に決めた階層は大抵見通しが甘いのに

複数の属性を持つケースは階層構造上の複数の位置への配置を許容してしまえばいい(前述のハードリンク)。 階層構造の変更が大変な点はサービス・システム側で補助してやればいい(前述)。

何故階層脳になるか

ここに関してはおまそう要素が強すぎるので省略。

階層脳脱出するには

 Webと似たようなものだと言えばどうか
  無階層でも検索できれば良いと思う
  「Yahoo JPのトップページ使わないでしょ?」
 Gyazz的なものの有用さをじわじわ浸透させる
 複数人でのwiki運用では階層分類に困るものが頻出する
  例
   [カレーうどん]
   プロダクトAとプロダクトBの連携機能についてのユーザーサポートページ
    どの階層に入れる?ユーザーサポート or A or B
  厳格なルールを決めないと、分類できない
   そのルールは全員が覚えられない
   間違った場所に保存すると怒られるから、wikiを書けなくなる
  ガチガチの運用ルールで縛らないと普通のwikiは使えない

普通にページを階層構造上の2箇所以上へおけば良さそう。 またその情報共有サービスの全記事に対して同一のルールを強制するのではなく、その中を縦に区切ってそれぞれの中で分割統治する方式はどうか(イメージとしては部署ごとにその中が整理されている感じ)


書いていて自分のイメージするタグ/階層構造の仕組みがだいぶイメージできてきたので後日文書化する。


  1. 過去これを達成するためにredmine wikiの階層構造を簡単に整理するためこういうものを作ったりしていたのを思い出した bigwheel/rmwikifs