Obsidianのノートのファイル名をUID化してZettelkastenメソッドを実現する
CREATED: 2023-11-18, UPDATED: 2023-12-13
※本記事は Obsidian Advent Calendar 2023 の14日目の記事です。
はじめに¶
Obsidianのデフォルト設定ではファイル名がそのノートのタイトル名となります。 ファイル名をタイトル名で管理する方法は直感的で理解しやすいですが、次のようなデメリットがあります。
- 同じタイトル名の異なるノートを作成できない
- タイトルを変更するとリンクも変わってしまう。Webサイト化しているとURLが変わるので、外部サイトからのリンクはリンク切れになる
- 日本語のようなマルチバイト文字を使用している場合、Webサイト化した際にURLエンコーディングされて、長くなり扱いづらくなることがある
そこでUIDの登場です。ファイル名をUIDにしてタイトル名はFront Matterで管理することで、ノートの堅牢性が高まり、上記の問題を解消することができます。この方法は特にZettelkastenメソッドの実践者の間で支持されており、Obisidianのフォーラムでも根強い要望があります。1
残念ながらObsidianはUIDのみのファイル名を想定しておらず、標準設定のままUID化すると様々な問題が生じます。しかし、現在は有志が提供するプラグインを組み合わせることで、UID化してもかなり快適に運用できるようになりました。
本記事ではその設定方法について詳しく述べていきます。
Zettelkasten用のノートのテンプレート¶
まずはZettelkasten用のノートのテンプレートを用意しておきます。下記にテンプレート例を示します。
---
uid: <% tp.file.title %>
title: &title <% tp.file.cursor() %>
aliases: [*title]
tags: []
publish: true
created: <% tp.file.creation_date("YYYY-MM-DD") %>
updated: <% tp.file.creation_date("YYYY-MM-DD") %>
---
後述のプラグインを使ってUIDのファイル名で作成したノートにこのテンプレートを挿入することで、uid
プロパティの値を自動で埋めてくれます。あとはtitle
に好きなタイトル名を記述します。
さらにここでのポイントはaliases
です。残念ながら現時点のObsidianでは、[[
を入力してリンクを作成するときに、title
のタイトル名では補間してくれません。しかしエイリアス名なら補間してくれるので、title
に&title
とアンカーを貼り、aliases
に *title
を追加してタイトル名を参照させます。Obsidianの仕様のための記述なので若干微妙ですが、大きな副作用は無いかなと思います。
こうすることでtitle
のタイトル名でも補間してリンクを作成してくれるようになります。
さらにQuick switcherにも表示されるようになります。
UID化して快適に運用するためのプラグイン¶
1. Unique note creator¶
新規ノート作成時にファイル名の先頭にUIDを付与してくれるコアプラグインです。プラグイン本来の意図とは異なりますが、UIDのみのファイル名でも使用できます。デフォルトでは無効になっているため、コアプラグインの設定を開いて有効にします。
次にUnique note creator
プラグイン自体の設定を開き、Unique prefix format
をYYYYMMDDHHmmss
とします。さらにTemplate file location
に先程のZettelkasten用のノートのテンプレートを指定します。
ノートを作成するときはCreate new unique note
を実行します。 ホットキーに登録しておくと便利です。実行するとファイル名を決めるプロンプトが表示されますが、すでに現在の日時のYYYYMMDDHHmmss
が入力されているので、そのままノートを作成します。
以降はすべてコミュニティプラグインとなります。
2. Front Matter Title¶
Obsidianでファイル名をUID化したときの一番大きな問題は、ファイルエクスプローラやグラフビューなどでタイトルではなくUIDが表示されてしまい、ノートの中身がわからなくなってしまう事です。このプラグインを有効にすると、UIDではなくFront Matterのtitle
に指定したタイトル名を表示してくれます。
※ただしObsidian本体のためのプラグインなので、Obsidian Publishには反映されません。Obsidian Publishのサイドバーのファイル名やグラフビューはUIDのまま表示されてしまうと思います。公式の対応が待たれる。。。
3. Title as Link Text¶
このプラグインは後述のMarkdownリンクを前提としています。あるノートのFront Matterのtitle
を変更すると、他のノート内にあるこのノートへのリンク名も修正する機能を提供します。READMEの動画を見るとわかりやすいです。ただし、あえてタイトル名と別名で作成したリンクも巻き込まれて修正されてしまう問題があります。念のためファイルリカバリーやObsidian Gitでバックアップを取っておくことをおすすめします。なお、BRATでのインストールが必要です。
4. Update Relative Links¶
Obsidianで後述のMarkdownリンクの設定をすると、ノートを別のディレクトリに移動したときにリンクのファイルパスを自動的に修正してくれますが、ファイルパスを最適化してくれないというバグがあります(詳細はプラグインのREADMEを参照してください)。このプラグインを有効にすると最適化されたファイルパスに修正してくれます。(というかこれはさすがにObsidian本家で直してほしい...)
5. Note Refactor¶
ノートからノートを切り出す事ができる有名プラグインです。しばらく開発が止まっていましたが、最近また再開されたようで良かったです。このプラグインでも設定のFile name prefix
を{{date:YYYYMMDDHHmmss}}
にすることで、切り出したノートのファイル名をUID化できます。ノートを切り出したらZettelkasten用のノートのテンプレートをTemplaterで挿入します。自分はこの方法でノートを作成するケースも多いです。
6. Paste image rename¶
画像を貼るときにファイル名を指定できるプラグインです。 設定でImage name pattern
を{{DATE:YYYYMMDDHHmmss}}
にしておくと画像のファイル名もUIDで統一できます。
7. Periodic Notes¶
デイリーノートだけでなく、ウィークリーノートやマンスリーノートも作成できるプラグインです。自分はデイリーノートのFormat(ファイル名)をYYYYMMDD000000
にしてUID化しており、下記のテンプレートを使用しています。ウィークリーノートやマンスリーノートも同じ方針でUID化できると思います。
---
uid: <% tp.file.title %>
title: &title <% tp.date.now("YYYY-MM-DD", 0, tp.file.title, "YYYYMMDD000000") %>
aliases: [*title]
tags: [dailynote]
publish: false
---
<% tp.file.cursor() %>
すべてのファイル名をUIDで統一しておくとコマンドラインを使ったファイル操作もやりやすくなります。
# 2023年11月2*日に編集したファイル一覧
$ find . -name "2023112*" | sort
./Journals/DailyNotes/20231120000000.md
./Journals/DailyNotes/20231122000000.md
./Journals/DailyNotes/20231123000000.md
./Journals/DailyNotes/20231124000000.md
./Journals/DailyNotes/20231125000000.md
./Journals/DailyNotes/20231127000000.md
./Journals/DailyNotes/20231128000000.md
./Journals/DailyNotes/20231129000000.md
./Zettelkasten/20231127021513.md
./Zettelkasten/20231127021554.md
./Zettelkasten/20231127022009.md
./Zettelkasten/20231127022253.md
./Zettelkasten/20231127022932.md
./Zettelkasten/20231127023302.md
./Zettelkasten/20231127023551.md
./Zettelkasten/20231127023725.md
./Zettelkasten/20231129003002.md
./Zettelkasten/20231129010621.md
./Zettelkasten/Images/20231124024140.png
./Zettelkasten/Images/20231124025448.png
./Zettelkasten/Images/20231124033416.png
Zettelkastenディレクトリ配下がYYYYMMDDHHmmss.md
で統一されていると、なんだかときめきを感じますね!(個人差あり)
WikiリンクではなくMarkdownリンクを使用する¶
ファイル名をUID化した場合、Wikiリンクを使用するメリットはほぼ無いのでMarkdownリンクがおすすめです。 リンク先のファイルが明確になり他のノートと被ることがないので、堅牢性が高くなります。 さらに他のMarkdownエディタでも管理できるようになったり、GitHubのWeb UIからもリンクが辿れるようになりノートを閲覧しやすくなるといったメリットもあります。
Markdownリンクを有効にするには、オプションのFiles & Links
を開いて、Use [[Wikilinks]]
を無効にします。 また、Automatically update internal links
を有効にし、New link format
はRelative path to file
にしておきます。
静的サイトの構築¶
本記事で紹介したノートの管理方法は、静的サイトジェネレーターによるサイト構築とも相性が良いです。 MkDocsやHugoなど多くの静的サイトジェネレーターはFront Matterのtitle
をタイトルとして読み取ってくれるので、UID化&Markdownリンク化したノートをそのまま生成元ファイルとして転用できます。 ちなみにこのサイトもObsidianでUID化&Markdownリンク化したノートからMkDocsを用いて構築しています。 (※なおこのサイトは Obsidian Advent Calendar 2023 のために作ったサンプルサイトなので、今後ノートを追加する予定はありません。)
まとめ¶
本記事ではファイル名をUID化して運用するための方法を紹介しました。UID化することでノートを一意に参照することができてリンクが安定化するなど、様々なメリットを享受できます。
もちろん「はじめに」で述べた通り、ファイル名をタイトル名で管理する方法は直感的でわかりやすいので、デフォルト設定で特に困っていない・不満がない場合は無理にUID化する必要はありません。 UID化のための設定は複雑ですし、Obsidianも他のコミュニティプラグインも基本的に「ファイル名=タイトル名」を想定しているので、UID化することで時々不具合に遭遇することもあります。
それでもUID化に興味がある方、UID化してZettelkastenを実践したかったけどObsidianでは諦めていた方は、ぜひ本記事を参考にしてもらえればと思います!