Obsidian
obsidian() ソースを使うと、Obsidian の Vault をそのまま公開できます。ウィキリンク、プロパティ、Vault 内の画像はビルド時に解決されるため、エクスポートの手順は不要です。
組み込みの obsidian() アダプターは、Obsidian の Vault をその場で読み込みます。エクスポートの手順はなく、リポジトリにファイルが生成されることもありません。Vault が信頼できる唯一の情報源のまま、Blume が読み込み時に Obsidian 独自の記法を Markdown に変換します。
import { defineConfig } from "blume";
import { filesystem, obsidian } from "blume/sources";
export default defineConfig({
content: {
sources: [
filesystem({ root: "docs" }),
obsidian({
prefix: "notes",
vault: "vault",
// Vault folder names to skip at any depth, on top of dot-folders
exclude: ["Templates", "Daily"],
}),
],
},
});
[[Wikilinks]] はルートへのリンクになります。Obsidian と同じく、パスではなく Vault 全体で一意なノート名で参照先が決まります。次の形式はすべて使えます。
- カスタムのリンクテキスト(
[[Note|label]]) - 見出しアンカー(
[[Note#Install]]) - フルパス(
[[folder/Note]]と[[folder/Note.md]]) - Obsidian のデフォルト設定「可能な場合は最短パス」で書き出される部分パス(
[[guides/Note]]) - Obsidian が表のセル内で書き出す
[[Note\|label]]形式
フロントマターで slug を設定したノートへのリンクは、その slug で公開されるルートを指します。同じ名前のノートが複数ある場合は、まず Vault 内のフルパスがその名前と完全に一致するノートが優先されます。Obsidian はリンクを名前より先にパスとして解決するためです。該当するノートがなければ、Vault 内の並び順で最初のノートが選ばれます。並び順は Obsidian のファイルエクスプローラーと同じく、フォルダーがノートより先で、大文字と小文字は区別しません。Blume が警告を出すのは、ウィキリンクが実際にこうした名前の重複を経由して解決された場合だけです。リンク先を一意にするには、より長いパスを書いてください。ブロック参照([[Note#^id]])は、アンカーなしでそのノートにリンクします。ブロックはリンク先となる id なしでレンダリングされるためです。見出しアンカーは、リンク先ノートに実在する見出しと照合して解決されます。照合は Obsidian のオートコンプリートが書き出す形式に合わせて行われます(**bold**、`code`、リンク構文は取り除かれます)。スラッグ化には、ページマニフェストの生成と同じ extractHeadings の処理が使われます。そのため、#Install へのリンクは、どのページにも存在しない id ではなく、正しくその見出しを指します。[[#Install]] は、書いているノート自身の見出しを指します。存在しない見出しへのリンクでは、ページへのリンクは残りますが、アンカーは削除されて警告が出ます。
フロントマターに残るのは、Blume のページスキーマで定義されたキーと、frontmatter.extend で宣言したキー(ノートに type があれば、そのコンテンツタイプの frontmatter で宣言したキー)です。Dataview のフィールド、Templater の日付、publish、Obsidian 独自の tags・aliases・cssclasses など、それ以外の Obsidian のプロパティはノートの変換時にすべて削除されます。そのため、プロパティ UI で書いた Vault でもフロントマターのエラーなしでビルドできます。aliases は解決されずに削除されます。エイリアスをリンク先として使う機能には、まだ対応していません。ノートと同じ場所にある画像を相対パスで参照した Markdown 画像()は、Vault から配信されます。Vault が git リポジトリ内にある場合、Vault のページにも他のページと同じく git の履歴から「最終更新」日時が付きます。「このページを編集」リンクのパスは github.dir を基準に解決されます。そのため、モノレポでドキュメントアプリと並べて置いた Vault でも、正しいファイルにリンクされます。リポジトリの外にある Vault には、このリンクは付きません。
Vault 内のロケールディレクトリとバージョンスナップショットは、filesystem ソースと同じ方法で読み込まれます。i18n を設定していれば fr/Note.md は /fr/ 配下に、バージョンを設定していれば v1.0/Note.md は /v1.0/ 配下に公開されます。これらのノートへのウィキリンクは、それぞれが公開されるルートを指します。
index ノートへのリンクは、存在しない /index ではなく、そのフォルダーのルートを指します。解決できないウィキリンクがあってもビルドは失敗せず、ビルド警告を出したうえでプレーンテキストとして表示されます。 そのため、整理の途中の Vault でも公開できます。1 行の %%comments%% は取り除かれます。HTML コメント内のウィキリンク(<!-- [[Draft]] -->)は Obsidian でも表示されないため、そのまま残ります。フロントマターに title がないノートには、ファイル名がタイトルとして使われます。これは Obsidian 自体と同じルールです。ただし index ノートは例外です。index ノートの名前はノートではなくルートを表すため、タイトルは Blume の通常の決め方に従います。まず最初の見出しが使われ、見出しがなければパスのセグメントを読みやすく整形したものが使われます。フェンスで囲んだコード、インデントしたコード、インラインコードは変換されずにそのまま残ります。そのため、これらの記法自体を解説するノートも崩れません。
ドットフォルダーはスキップされます。これには Obsidian 自身の設定ディレクトリである .obsidian や .trash も含まれます。開発時のファイル監視もこれらを無視するため、アプリでペインを移動したり、ノートを削除してゴミ箱に移したりしてもサイトは再ビルドされません。ノートを編集した場合は再ビルドされます。コンテンツのスキャン対象外のディレクトリ(node_modules、dist、.git など)もスキップされます。そのため、プロジェクトのルートをそのまま Vault にしても、依存パッケージの README が公開されることはありません。パスに # や ? を含むノートは、コンテンツファイルと同じくエラーとなり、公開されません。Astro がそのノートのコピーを読み込めないため、ファイル名を変更してください。Vault 内のシンボリックリンクは、filesystem ソースと同じくリンク先まで読み込まれます。そのため、Vault にリンクした共有フォルダーも一緒に公開されます。filesystem ソースのルート内に Vault を置く場合は、そのソースの対象から Vault を除外する必要があります(filesystem({ root: "docs", exclude: ["**/_*", "**/.*", "vault/**"] }))。exclude を指定すると、デフォルトの ["**/_*", "**/.*"] に追加されるのではなく置き換えられます。_ で始まるパーシャルやドットファイルを引き続き非公開にするには、この 2 つを必ず含めてください。こうして除外しておくと、blume version <id> でスナップショットを作成するときにも Vault は含まれません。Vault は自身のノートを現行バージョンとして公開し続けるためです。
次の機能はまだ変換に対応していません。コールアウト(> [!note])は通常の引用ブロックとして表示されます。埋め込み(![[image.png]])は変換されずにそのまま出力され、複数行の %%comments%% もそのまま残ります。バックリンクのグラフもまだありません。