はじめに
ルーマンのカードボックス・メソッド
自分の生産性の秘密は、ブナ材でできた24区画の分類記号のないボックス、ビーレフェルトのカードボックスである、とルーマンは説明していた。 30年以上にわたって、ルーマンはこのボックスを使って仕事をした。彼はすべてを書き留めた。詩、中世貴族の宣誓書、専門論文の参照情報。彼は文献が「カードにとれる」かどうかを確かめ、理論の一部、関連づけの可能性を書き留め、八つ折り版のカードに文字数字併用の略記法で分類記号を書き、さまざまな順序に並べた。世界の在庫目録である。
実のところいろいろ読んでも、ルーマンが大量にカードを書いてユニークなID番号を振っていたことまでは分かるのだが、それらを具体的にどう結びつけていたのかはよく分からない。おそらくは折に触れてカードをぶちまけて、自分の目で見て関連付けていたのだろうが、そのあたりをコンピュータにやらせようというがorg-roamである。日本だと京大式情報カードやKJ法が思い浮かぶ人が多いかもしれない。使ってみた感じとしてはScrapboxやObsidianにも通ずるところがある。
近年コンピュータ・プログラミングでは、コードを補完してくれたりいろいろプログラマの世話を焼いてくれるIDE(統合開発環境)というのがよく使われるが、org-roamは 一般物書き用のIDE になるポテンシャルを秘めているようにも思った。
インストールと設定
- SQLite(簡易データベース)
- Graphviz(グラフ描画)
- riprep(高速grep。オプショナルというか、リンクされていないカードを探すのには必要)
がいる。GNU/Linuxならどれも大概パッケージ化されているのですぐインストールできるだろう。少なくともDebian/Ubuntuには全部ある。
Windowsの場合、SQLiteは配布ページの「Precompiled Binaries for Windows」の中の sqlite-tools-win32-*.zip
を落としてきて、中の sqlite3.exe
(他のDLL等は要らない)をどこか PATH
の通っているところに置く必要がある。GraphvizはWindows用インストーラが用意されていて、インストールの途中で途中でPATH環境変数を設定するかと選べるので、チェックして設定するとよい。ripgrepは、scoopやchocolatey等でインストールできる。MacOSのことはよく知りませんが、やってみればなんとかなるんじゃないでしょうか。
あとはorg-roam本体をMELPA等からインストールすればよい。第6回で取り上げたstraight.elを使っていれば、 ~/.emacs.el/init.el
のorg関連記述の後に、
(use-package org-roam :after org :defer t :hook (after-init . org-roam-mode) :custom (org-roam-db-update-method 'immediate) (org-roam-db-location "~/.emacs.d/org-roam.db") (org-roam-directory "~/ownCloud/Org/org-roam/") (org-roam-index-file "~/ownCloud/Org/org-roam/Index.org") :bind (:map org-roam-mode-map (("C-c n l" . org-roam) ("C-c n f" . org-roam-find-file) ("C-c n g" . org-roam-graph)) :map org-mode-map (("C-c n i" . org-roam-insert)) (("C-c n I" . org-roam-insert-immediate))) )
などと書いておくだけで、次回Emacs起動時に他に必要なものも含めて一式勝手にインストールされるので便利である。遅延読み込みにしているので、使いたいときに M-x org-roam-mode
を手で実行する必要があるかもしれない。
設定の注意点として、情報カードというかOrg記法で書かれたノート自体(*.org)と、SQLiteが生成するデータベース(*.db)は別物で、現時点ではデータベースは(ファイル名をフルパスで保存するから?)環境依存らしいということである。よって、ノートはownCloudやDropboxといったクラウドストレージに保存して複数マシンで共有できるが、ノート間の関係性を保存するデータベースは個々のマシンで用意し、必要に応じて再生成する必要がある。上の例では、org-roamのノートはownCloud上、データベース(ここでは org-roam.db
)はローカルのEmacsの環境設定ファイルと同じディレクトリに生成するようにしてある。データベースは M-x org-roam-db-build-cache
で手動再生成できる。
また、Graphvizが出力するグラフはSVG形式で、Emacsのビルドによってはネイティヴに扱えないこともあるので、特にWindowsの場合はビューワを自分で指定しておくとよい。Windowsで一番手頃なSVGビューワはウェブブラウザなので、例えばFirefoxを使うなら
(when (eq system-type 'windows-nt) (setq org-roam-graph-viewer (lambda (file) (let ((org-roam-graph-viewer "c:/Program Files/Mozilla Firefox/firefox.exe")) (org-roam-graph--open (concat "file:///" file))))) )
などとするとよい。ウェブブラウザはローカルのファイル名を直接渡されても読んでくれないので、 パスに file:///
を追加するようにしている。
具体的なワークフロー
仮に、音楽というかジャズに興味があり、ジャズに関するノートというかカードを書きためていたとしよう。ノートを作成したり編集するには、上の設定例だと C-c n f
を押す。Emacs名物の3連続打鍵である。
#+title: チック・コリア ジャズ・ピアニスト。2021年没(79歳)。
org-roamにおいては、ファイル名はあまり重要ではなく(自動生成されるが、これも設定で変更可)、 #+title:
に書くタイトルが重要だ。これがカードの見出しとなり、補完対象となる。あとは、普通にOrg記法で中身を書いていけばよい。紙の情報カードと違って、好きなだけ量を書ける。
他のカードにリンクを張るには、 C-c n i
である。すでにそのタイトルを持つカードがあれば補完対象となり、無ければ新規に作成される。リンクは実のところ単なるOrg modeのリンクなので、直接編集することも不可能ではない。
で、ある程度カードが貯まったら、 C-c n l
を押すと、そのカードにリンクを張っている他のカードとその位置(バックリンク、リンク元)が表示される。
上の例では、「チック・コリア」というカードに、「サークル」というカードと「リターン・トゥ・フォーエヴァー」というカードの「メンバ」という項目からリンクが張られていることが分かる。ちなみに、サークルとかリターン・トゥ・フォーエヴァーというのはチック・コリアが参加していたバンドの名前です。
また、 C-c n g
でカード間のリンク関係を示すグラフが生成される。人間がやることはなく、レイアウトも含め全自動で出力してくれる。
で、ここからはご都合主義というか例のための例という感じだが、上のグラフを眺めると、ジャズに土地勘がある人はなんとなく気がつくことがある。チック・コリアは最近亡くなってしまったが、フュージョンという昔大衆的人気があったジャンルの開祖の一人で、リターン・トゥ・フォーエヴァーもフュージョンの代表的なバンドの一つだ。よって、チックという人は大衆的でポップな音楽をやっていたと世間的には思われていて、その線で論じられることが多い。
ところがグラフを見ると分かるように、今となってはほとんど忘れられているが、実は若いころのチックはサックス奏者のアンソニー・ブラクストンとサークルというバンドを組んで、ごりごりのフリージャズというか前衛音楽もやっていたのである。なので、「前衛としてのチック・コリア」というのは、チックについて何か書くなら目先の変わった良いテーマになりそうだ。こんなふうに、org-roamを使うとグラフからアイデアをひねり出すことが可能となる。
今後の課題
例えば、デフォルトでGraphvizの吐くグラフは見た目が今ひとつしょぼいのだが、Org modeの伝統というか、例によってサードパーティによる拡張が佃煮にするほど開発されており、ちょっと設定が面倒だがorg-roam-serverを使うとウェブアプリとしてorg-roamデータベースをナウく可視化したりズームしたりすることもできる。また、結局org-roamもOrg modeの拡張なので、書きためたカードは好きな形式でエクスポートすることができ、自分のノートをウェブで公開している人もいる。このあたりの融通無碍な感じがOrg modeぽくてよいですね。