以前、ObsidianとVS Code両方でZettelkastenするという記事を書いて、もっと Obsidian を使ってみたいと感じました。
この記事タイトルにもある通り、Obsidian を Sync とか使わずにクラウドストレージサービスを使ってスムーズなクロスデバイスのノート連携と、ブログ執筆体制を整えるという感じのお話です。
やりたいこととか要件
- クロスプラットフォームで同期が面倒くさくないこと
- Obsidian centered なブログ執筆環境を整えること
- 自分用のメモとブログのネタをすぐに見られるようにする
- GoogleDrive や iCloud とは別の環境として、ブログコンテンツは git で変更点管理ができるようにする
- スマートフォンで多少執筆してもストレスがない
その他前提
- スマホでほんとうの意味でゴリゴリメモを取ることが少ない
- -> 主にスマホでは PC で書いたことを後から振り返ったり、がっつりとスマホでメモを取る機会は少ない
- そのため、PC -> Android デバイス間の自動同期のタイミングは多少ラグがあっても良い
- ただし、やりたいときに同期できること
構成
今回は下記のような構成でやりたいことを実現します。
- iCloud 上での Obsidian vault の連携を基本とする(Mac を他のデバイスとの同期の Hub にする)
- -> Mac、iPad などの Apple デバイスと簡単に同期
- iCloud と GoogleDrive を双方向同期
- -> Mac で
fswatch
とunison
を使って、iCloud と GoogleDrive の変更を双方向同期 - つまるところMacは同期Hubとして常時つけっぱなし!
- -> Mac で
- GoogleDrive によって Windows, Android デバイスに同期
- -> Android デバイスでは、DriveSync を使って極力自動で定期的に同期
- 必要な場合は手動で GoogleDrive へ同期
- -> Android デバイスでは、DriveSync を使って極力自動で定期的に同期
- iCloud 上での Obsidian vault のブログコンテンツをさらにローカルのブログコンテンツフォルダに同期
- -> ブログコンテンツは git で管理したいので、iCloud とブログコンテンツ用フォルダ(ここでは draft フォルダ)を双方向同期
構成図
それぞれのデバイスでの設定
それぞれのデバイスにおいて、上記を実現するための設定です。
設定が面倒な順番で記載していますが、サービスによって「勝手に同期」されるやつは説明を省略します。
パスは適当に自分のやつで読み替えてもらえばと。
Mac
iCloudとGoogleDriveの双方方向同期
fswatch
と unison
を使って双方方向同期を実現します。
iCloud と GoogleDrive にそれぞれ Obsidian の vault が設定されるようにしますが、毎回パスの設定が面倒なのでシンボリックリンクを作っておきます。
ln -s YOURUSER/Library/Mobile Documents/iCloud~md~obsidian/Documents/myvault ~/icloudvault
ln -s YOURGOOGLEDRIVE/obsidian/myvalut ~/googlevault
細かい設定は必要ないと思うので、ワンライナーで unison
をささっと書いてしまいます。
fswatch -o $HOME/googlevault /$HOME/icloudvault | xargs -I{} unison -batch -times -prefer newer -auto -fastcheck true -path ./ -ignore "Name .DS_Store" $HOME/googlevault $HOME/icloudvault
iCloudにあるObsidian Vaultとgit管理のブログの特定フォルダの双方方向同期
fswatch
と unison
を使って双方方向同期を実現します。
ほぼ上と同様に。ただ同期先フォルダが違うだけです。
fswatch -o YOURBLOGCONTENTS_PATH /$HOME/icloudvault/103_BlogNotes | xargs -I{} unison -batch -times -prefer newer -auto -fastcheck true -path ./ -ignore "Name .DS_Store" YOURBLOGCONTENTS_PATH $HOME/icloudvault/103_BlogNotes
Android
Obsidian VaultのDriveSyncによるGoogleDriveとの双方方向同期
Android のアプリで Obsidian を使用すると、どのフォルダを vault として使用するかとか選択できます。
目的は、Android の Obsidian vault を GoogleDrive の特定のフォルダと同期させることなので、GoogleDrive のアプリではなく DriveSync というアプリを使って実現します。
Android のストレージの適当な場所に Obsidian vault を作成する
- 例えば自分の例だと
/storage/emulated/0/Documents/obsidian/myvalut
を Obsidian のアプリ上で作る
- 例えば自分の例だと
DriveSyncをダウンロードして設定する
- 無料版だと広告が入ったり、GoogleDrive の特定のフォルダしか連携できませんが、目的には必要十分
- 自分は下記のような設定
- sync method を two-way にしていて危険な香りがしますが、もしファイルの Conflict が起きても conflict ファイルとして別で残るので、都度発生したら修正で対応
たったこれだけで、Mac,Windows,Android のデバイスでの Obsidian 双方向の同期環境が整えられました。
ブログ執筆フロー
ということで、Android と PC デバイス間での同期のラグは少しあるものの、この同期環境を利用したこのブログの執筆フローは下記の感じです。
- ブログのネタとか自分用ナレッジは常に Obsidian を使って下書きなりメモなりしていく
- mac、windows、Android から普通にメモを取る
- メモとかナレッジは、iCloud や GoogleDrive を経由してすべてのデバイスで同期
- ブログ書くタイミングで BlogNote フォルダになんか書いていく
- メモと同様に、BlogNote の内容が icloud や google drive を経由してすべてのデバイスで同期
- BlogNote フォルダの内容がメイン端末の自分のブログ管理のリポジトリの draft フォルダにドンドン反映される
- 大体執筆できたらブログ側で記事ブランチを切って、draft フォルダから公開するための適当な階層にノートを置いて細かい校正とかする
- あとはよしなにデプロイ
その他思ったこと
今回の環境は Mac をつけっぱなしの同期 Hub 扱いしていますが、例えば Windows でできないのかな?とか作りながら思ったことを記載しています。
- メインを Windows にできるの?
- ローカルで双方向フォルダ同期できるやつが準備できればいいと思う
- wsl でコマンド叩いてもいいけど、再起動したときにめんどうやなって
- android だと記入が面倒じゃない?
- アイデアとかをアウトライン形式で書くだけなら Obsidian でも結構十分対応できる
- notion は使わないの?
- notion の使い方と obsidian の使い方は明確に分けるべきだと思っているけどうまく言語化できていない
- 今回の目的はノート環境とブログ環境がシームレスになるように整えたくて、notion だと画像の取り扱いとかブログのリポジトリに追加するのが少し面倒かなって思った
- Obsidian のノート環境とブログ環境を全て git 管理でやればさらにシームレスじゃない?
- Android 上で執筆したり Android 上で画像を挿入したりするのが非常に面倒だと思ったのでそもそも頭からやるつもりはなかった
- この運用だとブログの特定ブランチに関しては対応できるけど、Obsidian でメモっている途中に別のブランチとかで作業するときの運用で崩壊しない?
- Yes。崩壊。
.gitignore
でブランチ毎に書きかけ途中のファイルを変更点として無視するといったことが必要- こちらの記事が参考になるか?
- もしくは Obsidian でノートを取ったとき timestamp がファイル名になるので、そのファイル名の
.md
については ignore する- -> remote repo に push するときは清書するぞ!という心意気なので、一旦これで運用すればいいかなって
- なんなら drafts についてはビルドされないところにフォルダが作成されているのでセーフ
- 画像とかの扱いは面倒じゃない?
- ちょっと面倒
- Obsidian では wikilink 形式で画像も挿入されるように設定しているので、それをブログコンテンツの asset に配置する必要がある
最後に
自分はこの環境に満足していますが、これよりもこちらのほうが便利だよとかあったら教えてもらえると助かります。。。