Skip to content

Latest commit

 

History

History
396 lines (351 loc) · 17.5 KB

20210508233810-org_roam.org

File metadata and controls

396 lines (351 loc) · 17.5 KB

Org-roam

:header-args+: :wrap

概要

Org-roamはRoam Research[fn:1]に着想を得て作られたEmacsのメモパッケージ。org-modeをベースに、目的ファイルへのアクセスしやすさ、リンク、グラフ化の機能を強化する。

本文書のトップページInsomniaのグラフは、org-roamが生成するsqliteレコードを加工して作成している。

GitHubリポジトリ
https://github.com/org-roam/org-roam
公式サイト
https://www.orgroam.com/
マニュアル
https://www.orgroam.com/manual.html

Memo

db関連がおかしくなったとき

dbへ書き込みできませんエラーが出たとき。

  • (org-roam-db-location) でDBが保存されているパスを調べる。
  • .dbファイルを削除。
  • (org-roam-db-clear-all) でキャッシュ削除。
  • (org-roam-db-sync) によってdbファイルを再作成。

Selecting deleted buffer が出るとき。

  • ライブラリをすべて削除してインストールし直す
  • emacsql-sqliteを保存しているディレクトリに行く。sqliteディレクトリ下でmakeしなおす
    • make clean && make emacsql-sqlite

バックエンドの違いを吸収する関数

いわゆるコネクターパターン。接続に使用する関数を返す関数。

https://github.com/kd-collective/org-roam/blob/abe63b436035049923ae96639b9b856697047779/org-roam-db.el#L123-L137

Tasks

References

ZettelkastenやOrg-roamの解説。

マニュアル。

System CraftersのOrg Roam紹介。

具体的なワークフローがわかりやすい。

作者サイトのマニュアル。

org-modeのワークフロー。

Archives

CLOSE Unify workflow management with roam

https://d12frosted.io/posts/2021-01-16-task-management-with-roam-vol5.html

CLOSE CI, sqliteを入れて試してみる

  • search emacsql

Default install sqlite on ubuntu, so does not matter.

基本的キーバインド

  • find(C-c n f)
  • バックリンク(C-c n l)
  • Roamリンク挿入(C-c n i)補完を有効にすることであまり使わなくなる。

idリンクをpublishできない問題

roamのidがhtmlに変換できないよう。

Unable to resolve link

になる。

(setq org-hugo-base-dir ".")
(setq org-export-with-broken-links t)

するとできるが、idリンクを辿れない。 ほかのサイトではidがあってもできてるように見える。 https://hugocisneros.com/blog/my-org-roam-notes-workflow/ orgのバージョンを最新にしたが変わらず。

公式で言及。 https://github.com/org-roam/org-roam/wiki/Hitchhiker’s-Rough-Guide-to-Org-roam-V2#export

(setq org-id-link-to-org-use-id t)
(setq org-id-extra-files (org-roam--list-files org-roam-directory))

↓で設定していた。これを設定すると成功した。 https://hugocisneros.com/org-config/#configuration

https://gist.github.com/hugcis/1f2d2ad4b98b07ee543f10232ba1b025

(require 'find-lisp)
(defun hugcis/publish-note (file)
  "Publish a note in FILE."
  (interactive)
  (with-current-buffer (find-file-noselect file)
    (projectile-mode -1)
    (setq org-hugo-section "notes"
          org-hugo-base-dir "."
          citeproc-org-org-bib-header "* Bibliography\n<ol class=\"biblio-list\">"
          citeproc-org-org-bib-footer "</ol>")
    (let ((org-id-extra-files (find-lisp-find-files org-roam-directory "\.org$")))
        (org-hugo-export-wim-to-md))))
find . -name '*.org' | emacs --batch -l ./publish.el --funcall kd/publish

初期設定

⚠バージョンが上がって設定が変わった。この内容は古い。 roamのデフォルトディレクトリを作成して、そこでファイルが作成されたり、検索対象になる。
(require 'org-roam)
(add-hook 'after-init-hook 'org-roam-mode)
(make-directory "~/roam" t)
(setq org-roam-directory "~/roam")
(setq org-roam-completion-everywhere t)
(define-key org-mode-map (kbd "C-M-i") 'completion-at-point)

リンク補完が有効になります。非常に便利。

(define-key org-roam-mode-map (kbd "C-c n l") 'org-roam)
(define-key org-roam-mode-map (kbd "C-c n f") 'org-roam-find-file)
(define-key org-roam-mode-map (kbd "C-c n g") 'org-roam-graph)
(define-key org-mode-map (kbd "C-c n i") 'org-roam-insert)
(define-key org-mode-map (kbd "C-c n I") 'org-roam-insert-immediate)

外部リンクをグラフに表示したくない

org-roam-graph でファイルリンクだけのつながりを表示したい。 v1ではファイルリンクだけで、外部リンクは出てなくてわかりやすかった。

org-roam-uiを使ってみた。めちゃかっこいい。

org-roam-graph-link-hidden-types でhttp, httpsを指定すると消せた。 これでCIでも出力できるはず。

(setq org-roam-graph-link-hidden-types '("https" "http" "file"))

d3でのグラフ出力

  1. org-roam-db-syncでdbファイルを生成する
  2. dbファイルをグラフとしてjsonに変換する
  3. JavaScriptのd3ライブラリでjsonを読み込む
  4. ブラウザ描画

CLOSE Selecting deleted bufferエラー

新しく構築した環境にて、 (org-roam-db-sync) をやると Selecting deleted buffer がエラーが出る。 依存しているemacs-sqlite関係でなにかおかしくなっているよう。同じくemacs-sqliteに依存しているmagit-forgeも動かない。

メインマシン、GitHub Actions環境ではうまくいっているので、sqlite関係か、.emacs.dで何か起きている。 うまくいくようになった。関連ライブラリが修正されたよう。

dbを使って何をしているのか

デフォルトではsqliteを利用しているのは知っているが、実際何をしているのだろうか。結論: ファイルの変更をdbに同期し、再利用しやすいようにしている。

まずorg-roam-db.elを見てみる。

https://github.com/kd-collective/org-roam/blob/abe63b436035049923ae96639b9b856697047779/org-roam-db.el#L279-L288
https://github.com/kd-collective/org-roam/blob/abe63b436035049923ae96639b9b856697047779/org-roam-db.el#L309-L323

org-roam-db-insert-fileが呼ばれることによって、orgファイルの追加をdbと同期する。こういった感じで1ファイルの追加、削除、変更に対応する同期関数がある。

↑のみでは1ファイルのみなので、org-roamファイル全体に大して同期をかける関数がある。org-roam-db-sync。変更のタイプを判定して、各関数で処理し、orgファイルとdbの内容を同期する。なるほど。

https://github.com/kd-collective/org-roam/blob/abe63b436035049923ae96639b9b856697047779/org-roam-db.el#L611-L643

直にdbに追加する関数を呼ぶことはなく、ファイルの変更をもとに同期関数経由でdbに追加されるようだ。ファイルの方が先に存在していて、後でdbと同期する。

https://github.com/kd-collective/org-roam/blob/abe63b436035049923ae96639b9b856697047779/org-roam-node.el#L461-L477
  • ファイルがあれば、visitを呼び出す
  • ファイルがなければ、作成するためにcaptureを呼び出す。dbと関係することは同期時にやるので、ここでは一切考えなくてよく、責務分離できている

dbへの同期をみた。利用はどうしているのだろうか。

探す系は、org-roam-node.elに含まれている。

https://github.com/kd-collective/org-roam/blob/abe63b436035049923ae96639b9b856697047779/org-roam-node.el#L461-L477
  • nodeが存在していればファイルを開く。そうでなければorg-roam-captureでテンプレート画面を開く
  • 開くときもdbに接続して情報を取ってくるはずだが、コードのどの箇所かわからなかった

メモのとり方について再考

  • denoteとroamの使い分けが微妙
  • 1つの見出しが1つのファイルに属するとは限らない
  • 文章としてあまり読みやすいものではない
Zettelkastenの解説本。

脚注

[fn:1] https://roamresearch.com/ Webでのアウトラインツール。