📓

foam

2025/01/19に公開

tl;dr

  • Foam
  • foam のメモ
  • Zettelkasten するツール
  • Obsidian の代替として使ってみてるのでメモ

foam

  • VS Code で Zettelkasten するツール
  • マークダウンでメモ
  • グラフ表示
  • 雑に言えば Obsidian より何をどうするのかをユーザに任せるというか、単にメモをグラフでくっつけられるぜ、以上でも以下でもないかも

Obsidian と比べてメリット(かもしれないところ)

  • VS Code を普段使いしているならアプリケーションとして別のものとして扱わないでいい
  • というか、VS Code を使う、ということだけが優位点
  • 機能拡張でテキスト校正くんやSpellCheckerやフォーマットが自由
  • markdown lint したり
  • pre-commit でごにょごにょしたり
  • 見た目や機能のほとんどは VS Code の設定任せ
  • ファイルはユーザ管理なので、どこにファイルがあるの?みたいなことにならない
  • VS Code 配下なので git 管理も準じる(GitHub連携すればモバイルアプリは GitHub Mobile が使える)

Obsidian と比べてデメリット

  • プラグイン類は VS Code の機能拡張になければ使えない(Ankiはかろうじてあるけど。。。)
  • ファイルの管理を自分でちゃんとしないと管理されないまま
  • VS Code の操作や仕掛けを理解していないと使いこなすのが逆に難しくなる
  • プライベートで管理しているリポジトリを集めたワークスペースに突っ込んだら(マークダウンが腐る程あるので)グラフがひどいことになった
  • なので今は単独のワークスペースとしてリポジトリ1つで別にして動かしている
  • 雑に言えば Obsidian でできることのほとんどが素ではできないので移行するメリットはない(大半のObsidianユーザにはfoamを勧められない)

それでも foam を使おうかなと思っている理由

  • 今は知らないのでアレだけど、Obsidian でファイルをリモート連携しようと思うと面倒かお金がかかるかだった(前述のとおり foam なら GitHub 連携は VS Code の設定に準じるので楽)
  • 普段からずっと VS Code を開きっぱなしで仕事をしている(個人用、仕事用、foamで3ウィンドウ開いている)ので、操作的に常に同じ感覚でいられる
  • Obsidian アプリケーションやプラグインを使っていろいろ覚えても、Obsidian に閉じてしまう。VS Code 上で foam を使って同じことをするには VS Code の使い方に準じることになって、横展開しやすい(と思ってる)

つまり VS Code 上でできることのメリットが今のところ好き

  • git 管理が楽(設定済なわけだし)
  • アプリケーション管理が楽(常に VS Code と生きているので)
  • Runme として動かす(技術的なメモでこれはめっちゃ便利)
  • marp として動かす(最近使っているので)
  • mermaid や PlantUML を埋めても大丈夫

最後に

  • これから Zettelkasten やっていくぜって人はまず Obsidian を使ってみましょう
  • すでに VS Code ユーザで、Obsidian をインストールしたくないって人だけ foam を使ってみましょう
  • Zettelkasten やメモの取り方について、原理主義的な使い方をすると foam の良さは活きない(と思います)
  • 全部理解した上で、原理主義とかどうでもよくて、マークダウンをフル活用していくぜ、という人だけどうぞ

おまけ

foam では [[]] で囲むとプレースホルダーになるのと、 # でタグが付けられるので、キーボードショートカットとして追加しておくと、ctrl+d でワードを選択したあと、ctrl+alt+ で料理しやすくて便利。

keybindings.json
[
	{
		"key": "ctrl+alt+[",
		"command": "editor.action.insertSnippet",
		"args": {
			"snippet": "[[${TM_SELECTED_TEXT}]]"
		},
		"when": "editorTextFocus"
		// foam で PlaceHolder にする(`[[`と`]]`で囲む)
	},
	{
		"key": "ctrl+alt+]",
		"command": "editor.action.insertSnippet",
		"args": {
			"snippet": "#${TM_SELECTED_TEXT} "
		},
		"when": "editorTextFocus"
		// foam でタグにする(`#`と` `で囲む)
	}
]

Discussion