Skip to content

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 formatYYYYMMDDHHmmssとします。さらにTemplate file locationに先程のZettelkasten用のノートのテンプレートを指定します。

ノートを作成するときはCreate new unique noteを実行します。 ホットキーに登録しておくと便利です。実行するとファイル名を決めるプロンプトが表示されますが、すでに現在の日時のYYYYMMDDHHmmssが入力されているので、そのままノートを作成します。


以降はすべてコミュニティプラグインとなります。

2. Front Matter Title

Obsidianでファイル名をUID化したときの一番大きな問題は、ファイルエクスプローラやグラフビューなどでタイトルではなくUIDが表示されてしまい、ノートの中身がわからなくなってしまう事です。このプラグインを有効にすると、UIDではなくFront Mattertitleに指定したタイトル名を表示してくれます。

※ただしObsidian本体のためのプラグインなので、Obsidian Publishには反映されません。Obsidian Publishのサイドバーのファイル名やグラフビューはUIDのまま表示されてしまうと思います。公式の対応が待たれる。。。

このプラグインは後述のMarkdownリンクを前提としています。あるノートのFront Mattertitleを変更すると、他のノート内にあるこのノートへのリンク名も修正する機能を提供します。READMEの動画を見るとわかりやすいです。ただし、あえてタイトル名と別名で作成したリンクも巻き込まれて修正されてしまう問題があります。念のためファイルリカバリーObsidian Gitでバックアップを取っておくことをおすすめします。なお、BRATでのインストールが必要です。

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 formatRelative path to fileにしておきます。

静的サイトの構築

本記事で紹介したノートの管理方法は、静的サイトジェネレーターによるサイト構築とも相性が良いです。 MkDocsやHugoなど多くの静的サイトジェネレーターはFront Mattertitleをタイトルとして読み取ってくれるので、UID化&Markdownリンク化したノートをそのまま生成元ファイルとして転用できます。 ちなみにこのサイトもObsidianでUID化&Markdownリンク化したノートからMkDocsを用いて構築しています。 (※なおこのサイトは Obsidian Advent Calendar 2023 のために作ったサンプルサイトなので、今後ノートを追加する予定はありません。)

まとめ

本記事ではファイル名をUID化して運用するための方法を紹介しました。UID化することでノートを一意に参照することができてリンクが安定化するなど、様々なメリットを享受できます。

もちろん「はじめに」で述べた通り、ファイル名をタイトル名で管理する方法は直感的でわかりやすいので、デフォルト設定で特に困っていない・不満がない場合は無理にUID化する必要はありません。 UID化のための設定は複雑ですし、Obsidianも他のコミュニティプラグインも基本的に「ファイル名=タイトル名」を想定しているので、UID化することで時々不具合に遭遇することもあります。

それでもUID化に興味がある方、UID化してZettelkastenを実践したかったけどObsidianでは諦めていた方は、ぜひ本記事を参考にしてもらえればと思います!

  • Markdownエディタ
  • パーソナル・ナレッジ・ツール
  • 一意となるID
  • Obsidianの文脈では1ノートに割り振られ他のノートと被らない固有のID
  • 読みやすさとユニーク性を考慮して、通常はノートを作成した日時のYYYYMMDDHHmmssを用いることが多い
  • ノートの先頭に書くYAML形式のメタデータ
  • ノートの作成技法
  • ドイツの社会学者のニクラス・ルーマンが編み出した
  • カード1枚につき1アイデア
  • カード1枚で内容を完結させる
  • カードは常に他のカードとリンクさせる
  • カードがなぜリンクしているのかを完結に記す
  • 自分の言葉を使う
  • 参考文献を残す
  • 自分の考えを加える
  • 構造を気にしすぎない
  • 関係なさそうカード間の関連を見つけたら接続カードを作成する
  • アウトラインカードを作成する
  • カードを削除しない
  • 無意味かもしれないアイデアでも恐れずにカードを作成する
  • https://gigazine.net/news/20200604-zettelkasten-note/
  • 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”) %>

    ```

    このテンプレートをTemplaterプラグインでホットキーに登録しておくと便利

  • キーボードだけで簡単にノートを検索して開くことができるコアプラグイン
  • Cmd+O(Ctrl+O on Win)で起動する
  • 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”) %>

    ```

    このテンプレートをTemplaterプラグインでホットキーに登録しておくと便利

  • ノートの先頭に書くYAML形式のメタデータ
  • Obsidianのノートをホスティングしてウェブサイト上に公開する有料サービス
  • 書き方
    • [title](link)
  • [title](link)
  • Obsidianにおけるおすすめ設定

    • Automatically update internal links : 有効化
    • New link format: Relative path to file
  • Obsidianにおけるおすすめ設定

  • Automatically update internal links : 有効化
  • New link format: Relative path to file
  • Wikiリンク

  • Wikiリンク

  • ノートの先頭に書くYAML形式のメタデータ
  • ObsidianのノートをGitで管理・バックアップできるプラグイン
  • まだコミュニティプラグインに存在しないβリリースやテストなどのプラグインをインストールするのに使用する特別なプラグイン
  • 書き方
    • [title](link)
  • [title](link)
  • Obsidianにおけるおすすめ設定

    • Automatically update internal links : 有効化
    • New link format: Relative path to file
  • Obsidianにおけるおすすめ設定

  • Automatically update internal links : 有効化
  • New link format: Relative path to file
  • Wikiリンク

  • Wikiリンク

    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”) %>

    ```

    このテンプレートをTemplaterプラグインでホットキーに登録しておくと便利

  • https://github.com/SilentVoid13/Templater
  • 事前に用意したテンプレートをノートに挿入できるプラグイン
  • よく挿入するテンプレートはホットキーに登録しておくと便利
  • 書き方

    • リンクの書き方
      • [[title]]
    • エイリアス名によるリンクの書き方
      • [[title | alias]]
  • 書き方

  • リンクの書き方
    • [[title]]
  • [[title]]
  • エイリアス名によるリンクの書き方
    • [[title | alias]]
  • [[title | alias]]
  • Markdownリンク

  • Markdownリンク

  • 書き方
    • [title](link)
  • [title](link)
  • Obsidianにおけるおすすめ設定

    • Automatically update internal links : 有効化
    • New link format: Relative path to file
  • Obsidianにおけるおすすめ設定

  • Automatically update internal links : 有効化
  • New link format: Relative path to file
  • Wikiリンク

  • Wikiリンク

  • 書き方

    • リンクの書き方
      • [[title]]
    • エイリアス名によるリンクの書き方
      • [[title | alias]]
  • 書き方

  • リンクの書き方
    • [[title]]
  • [[title]]
  • エイリアス名によるリンクの書き方
    • [[title | alias]]
  • [[title | alias]]
  • Markdownリンク

  • Markdownリンク

  • 書き方
    • [title](link)
  • [title](link)
  • Obsidianにおけるおすすめ設定

    • Automatically update internal links : 有効化
    • New link format: Relative path to file
  • Obsidianにおけるおすすめ設定

  • Automatically update internal links : 有効化
  • New link format: Relative path to file
  • Wikiリンク

  • Wikiリンク

  • MarkdownなどのテンプレートファイルからWebサイトのHTMLを生成するツール
  • 生成されたHTMLはホスティングサービスを利用して簡単にデプロイできる
  • 静的サイトジェネレーター
  • シンプルでカスタマイズ性が高く、Zettelkastenと相性が良いと思う
  • プラグインが豊富でbacklinkやページプレビュー(tooltip)もできる
  • 検索機能が強い
  • Material for MkDocsというテーマが大人気
  • ノートの先頭に書くYAML形式のメタデータ
  • 静的サイトジェネレーター
  • シンプルでカスタマイズ性が高く、Zettelkastenと相性が良いと思う
  • プラグインが豊富でbacklinkやページプレビュー(tooltip)もできる
  • 検索機能が強い
  • Material for MkDocsというテーマが大人気