Obsidianを使えるまでにする

作成:
heroimage

めちゃくちゃ長くなってしまったがとりあえず Astro 用として使えるようにはなった。

iCloud ドライブの同期は注意が必要

まず初めにそもそも iCloud ドライブで正しく同期されていないと始まらない。

Obsidian はファイルを少しいじるたびにファイルを保存するのでかなり危険な仕様であると思った。

PC から正しく Vault を閉じれば同期が行われるかテストしてみた。

と思ったが Vault は閉じれないのでしばらく保存されるまで放置してみる。 急いでファイルを閉じるのがいけないのかもしれない。

同期が正しく終わる前に開くと同期される前のものが新しく同期されてしまって新しいものが消えることもあった。デバイス間で同じファイルを操作するときは時間を空けたほうがよさそうだ。

Astro との同期の問題は力技で解決する

iCloud ドライブは更新日時がファイルに変更がなくても書き換えてしまい同期のあてにまったくならない。

そんなわけでファイル内容比較オプションのある FreeFileSync を使うことでリアルタイム同期ではないが Astro と Obsidian 間のファイルの同期が可能となり、 画像も正しく同期される。

これは複数の同期設定を一度に実行してくれる上除外ファイルやフォルダを指定できるためである。

そのためまず public フォルダにあたる obsidian vault フォルダ直下を@のついたフォルダを除外して同期し、blog note それぞれは/src/content 以下の各フォルダと同期する。

これで iCloud ドライブで同期できる Obsidian vault は一つしかできないとしても、public フォルダを同期しつつ各 src/content 以下の Markdown フォルダもそれぞれ同期される。

同期が Windows 起動の上手動なのはネックだが現在のベストだろう。

Linux では iCloud が絡む以上無理があるのであきらめるしかない。

FreeFileSync

この画面から同期する。右側の比較対象は以下のとおり。

  • Obsidian の vault 直下 と /public
  • @note と /src/content/note
  • @blog と /src/content/blog

ここで重要なのは比較方法を「ファイルの内容」にすることである。

iCloud ドライブはファイルの更新日時がめちゃめちゃなのであてにならないためである。 必ずファイル同士の内容を比較させないといけない。

/public を比較するときには下のように除外するものを指定する必要がある。

この時のために@を先頭に付けたフォルダを用意した。

こうして Windows 上で iCloud ドライブ上の Obsidian vault と Astro のコンテンツを手動で同期できるようになった。

注意点

FileSync は以下のファイルを同期フォルダに生成するようなので .gitignore に書いておく必要がある。

  • sync.ffs_db

Obsidian の便利な画像挿入

ドラッグ&ドロップで画像を記事へ貼り付けると特定フォルダへファイルをコピーしてくれるようにもできる。この時のパスは上記の問題はあるもののとりあえず先頭に / を付けても表示される。

さらにファイルは移動されるとリンクしている各 Markdown ファイルの中のパスが自動的に変更される。

挿入される Markdown のパスは相対パスにもできるし絶対パスにもできる。
Astro との都合上絶対パスにするしかないもののとても使いやすいと言えるだろう。

Astro と Obsidian の画像パス

Obisidan の問題は Astro の場合画像の読み込みパスである/public がルートになるパスからなので、挿入される画像パスが絶対パスに設定されていても / が入らないというところだろう。

画像パスの自動追尾の場合も、先頭の / が消されてしまうのでいちいち変更箇所へ行って / を付け加えなければ Astro では読み込めなくできなくなってしまう。

Obsidian で絶対パスの場合はスラッシュが入るようにしてくれればいいだけなのだが…

Linux はやっぱりあきらめる

前回も書いたが Linux はどうしようもない

Astro と合わせるための設定

書き出すのが大変面倒なので画像で

オプション→ファイルとリンク

とにかく Astro 側に余計なものを同期してはいけないので@をつけたフォルダ以下にファイルを出力する。

リンクは絶対パスにする。

コアプラグイン→デイリーノート

これも同様に@フォルダにする

コアプラグイン→テンプレート

テンプレートになっているファイルには frontmatter を書いておく

テンプレートの例

テンプレート呼び出し時に自動的に日付や時間が上の設定に合わせて挿入される。

---
layout: "@layouts/BlogPost.astro"
title: "タイトル"
date: "{{date}} {{time}}"
updatedDate: "{{date}} {{time}}"
description: "説明文"
heroImage: /img/res.jpg
featured: /img/res.jpg
tags:
- タグ1
- タグ2
baseUrl: /note/
category: カテゴリー
---

最後に

やはり困ってくるのは TOC の生成と Lint が無いところだろう。

結局そこは VSCode でやるしかないのだった。

とはいえ画像の扱いもラクであるし便利なのは間違いない。