lisz-works

プログラミングと興味を貴方に

Obsidianにfly.ioでSelf-hosted LiveSyncを設定する

【スポンサーリンク】

Obsidian

こんにちは、lisです!

最近Obsidianというアプリでメモを管理し始めています。

しかしデフォルトのままだと、他の端末との共有ができない……

ということで今回はObsidianのコミュニティプラグイン「Self-hosted LiveSync」で複数端末同期をしてみたので、手順をご紹介します。

※Twitterで作者のvorotamoroz aka きみのぶさんに補足を頂きましたので、各所追記をしました。

Obsidianとは?

markdownファイルを管理できるアプリです。

名前をしって試してみたところ、使い勝手もよくキレイなので使い始めてみました。

マルチプラットフォームなので、WindowsもMacOSもLinuxもAndroidもiOS系も使えちゃう優れもの。

Self-hosted LiveSyncとは?

Obsidianにはコミュニティプラグインという、一般の開発者が作成したプラグインを使用する機能があります。

Self-hosted LiveSyncもそのうちの1つです。

このツールは外部のホスティングサービスを経由してファイルを同期するステキプラグインです。

他にも同期する方法はあるのですが、iPadと同期しようと頑張った所、他のものでうまくいかずSelf-hosted LiveSyncにたどり着きました。

Self-hosted LiveSyncで同期できるようになるまでの大まかな流れ

  1. fly.ioに登録
  2. fly.ioでアプリ/DBを設定してデプロイ
  3. ObsidianでSelf-hosted LiveSyncを設定
  4. 他の端末のObsidianでSelf-hosted LiveSyncの設定

今回は外部サービスとしてfly.ioを使用してます。

fly.ioをセットアップしていく

fly.ioというサービスを使用していきます。

無料枠があって超過すると従量課金ですが、無料枠ないで使用できそうなので進めていきます。

公式のハンズオンページを元に進めていきます。

fly.io

hands-on

flyctlをインストール

管理者権限でPowerShellを開きます*1

で、コマンドを叩くと、コマンドラインツール「flyctl」をインストールしてくれます。

> iwr https://fly.io/install.ps1 -useb | iex
flyctl was installed successfully to C:\Users\shiba\.fly\bin\flyctl.exe
Run 'flyctl --help' to get started

fly.ioにサインアップ

サインアップコマンドを叩きます。

> flyctl auth signup

ブラウザ開くので、登録を行います。

GitHubアカウントかメールで登録ができるようです。どちらかから登録を行いましょう。

アカウント登録

完了したらクレジットカードを登録します。入力して「Add Cardボタン」。

クレジットカード登録

バンドルカードなどのプリペイドカード式クレカを設定しようとすると、下記のようなポップアップが出て登録できませんでした。
それでも登録したい場合は、詐欺対策として先に一旦課金(クレジット購入)しないといけないようです。

Looks like you're using a prepaid card. We don't allow saving prepaid cards due to fraud, but you can use it to buy credits that go towards future bills. Buy credits now
(翻訳) プリペイドカードをご利用のようです。 詐欺のためプリペイド カードの保存は許可されていませんが、クレジットを購入して将来の請求に使用することはできます。 今すぐクレジットを購入

「Welcome to the Fly Global Application Platform」という画面にくればOKです。

Welcome

ハッピーなキャラクター画面です。flyだから気球のキャラなんでしょうかね?

アプリ/DBをセットアップ

fly.io用の作業フォルダを作成して、その中作業していきます。

> mkdir flyio-db
> cd flyio-db
> flyctl launch --image couchdb
Update available 0.0.398 -> v0.0.399.
Run "flyctl.exe version update" to upgrade.
Creating app in F:\work\Obsidian\flyio-db
Using image couchdb
? App Name (leave blank to use an auto-generated name):

? App Name (leave blank to use an auto-generated name):
Automatically selected personal organization: lisz-works
? Select region: nrt (Tokyo, Japan)
Created app long-moon-6949 in organization personal
Wrote config file fly.toml
? Would you like to set up a Postgresql database now? No
? Would you like to deploy now? No
Your app is ready. Deploy with `flyctl deploy`

App NameはそのままEnterしました。

「green-voice-6431」という名称のアプリが作成されて、「fly.toml」がフォルダ内に作成されました。

> fly volumes create --region nrt couchdata_2 --size 1
Update available 0.0.398 -> v0.0.399.
Run "fly.exe version update" to upgrade.
        ID: vol_gez1nvx82xxrmxl7
      Name: couchdata_2
       App: green-voice-6431
    Region: nrt
      Zone: e883
   Size GB: 1
 Encrypted: true
Created at: 30 Sep 22 12:44 UTC

fly.tomlを下記のように編集します。

ここで設定した「COUCHDB_USER」の値は、DBのログインユーザ名となります。

--- fly.toml.bak        2022-09-30 21:46:37.088880900 +0900
+++ fly.toml    2022-09-30 21:48:00.522665800 +0900
@@ -9,6 +9,11 @@
   image = "couchdb"

 [env]
+  COUCHDB_USER = "your_username"
+
+[mounts]
+  source="couchdata_2"
+  destination="/opt/couchdb/data"

 [experimental]
   allowed_public_ports = []
@@ -16,7 +21,7 @@

 [[services]]
   http_checks = []
-  internal_port = 8080
+  internal_port = 5984
   processes = ["app"]
   protocol = "tcp"
   script_checks = []

DBのログインパスワードを設定します。

「your_password」は任意のパスワードに置き換えてください。

> flyctl secrets set COUCHDB_PASSWORD=your_password
Update available 0.0.398 -> v0.0.399.
Run "flyctl.exe version update" to upgrade.
Secrets are staged for the first deployment

アプリをデプロイ

アプリをデプロイします。

> flyctl deploy
Update available 0.0.398 -> v0.0.399.
Run "flyctl.exe version update" to upgrade.
==> Verifying app config
--> Verified app config
==> Building image
Searching for image 'couchdb' remotely...
image found: img_lj9x4dz37zypwo1k
==> Creating release
--> release v2 created

--> You can detach the terminal anytime without stopping the deployment
==> Monitoring deployment

 1 desired, 1 placed, 1 healthy, 0 unhealthy [health checks: 1 total, 1 passing]
--> v0 deployed successfully

DBの設定

コマンドを叩いてブラウザを開きます。

> flyctl open

ブラウザが開いてJSONが表示されます。

{"couchdb":"Welcome","version":"3.2.2","git_sha":"xxxxxxxxx","uuid":"xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx","features":["access-ready","partitioned","pluggable-storage-engines","reshard","scheduler"],"vendor":{"name":"The Apache Software Foundation"}}

https://アプリ名.fly.dev/というURLで開かれるので、開いたページのURL末尾に「/_utils/」を付けてアクセスします。

https://アプリ名.fly.dev/_utils/とうことですね。

CouchDBのログイン画面が出るのでログイン。

ログイン

ログイン情報は「アプリ/DBをセットアップ」で設定した下記の情報です。

  • Username: fly.tomlに書いた「COUCHDB_USER」の値
  • Password: flyctl secrets set COUCHDB_PASSWORD=your_passwordで指定したパスワード

「スパナアイコン」から「Setup Apache CouchDB」を開いて、「Configure a Single Nodeボタン」をクリック。

Setup Apache CouchDB→Configure a Single Nodeボタン

UsernameとPasswordにログイン情報を入力して「Configure Nodeボタン」をクリック。

ログイン情報を入力して、Configure Nodeボタン

ObsidianにSelf-hosted LiveSyncをインストール

Obsidianの設定をしていきます。

今回使用するのはこちら「Self-hosted LiveSync」です。

github.com

Obsidianの左下歯車マークから設定を開きます。

設定を開く

サイドメニューの「コミュニティプラグイン」を開いて、「コミュニティプラグインを有効化ボタン」を押します。

コミュニティプラグインを有効化

コミュニティプラグインの「閲覧ボタン」を押します。

ここからコミュニティプラグインを検索してインストールしたりできます。

閲覧ボタン

検索バーに「Self-hosted LiveSync」を入力して検索→インストールボタンを押してインストールします。

Self-hosted LiveSyncをインストール

インストールが完了したら「有効化ボタン」が出てくるので押しましょう。

Self-hosted LiveSyncを有効化

Self-hosted LiveSyncの設定

設定のサイドバー最下部に、コミュニティプラグイン「Self-hosted LiveSync」が出来ているのでクリック。

Self-hosted LiveSyncの設定

Remote Database configuration

左から3番目のアイコンをクリックして「Remote Database configuration」を開く。

左から3番目のアイコンをクリックして「Remote Database configuration」を開く

開いたら下記項目を入力していきましょう。

  • URI: https://{app-name}.fly.dev/
    • さっき開いていたDBの設定画面のURLを取ってくると簡単
  • Username: ログイン情報のUsername
  • Password: ログイン情報のPassword
  • Database name: test1
    • 任意かと思ったらtest1固定だったけどどこ由来でこの名前だったのか謎
    • 同期を一旦止めれば変えられるかもしれないそうですが、まぁ大きな問題はないのでこのままでいいやつだと思います
  • End to End Encryption: ON
  • Passphrase: 任意
    • 説明には「暗号化パスフレーズ。既存のデータベースのパスフレーズを変更する場合は、リモート データベースを上書きすることを強くお勧めします。」と書かれている

入力完了したら、「Apply欄」の「Applyボタン」を押す。

……が、「Could not connect to the database.」と表示されました。

「Check database configuration欄」の「Checkボタン」を押すと、色々項目が出てくるので全て「Fixボタン」を押していきます。

「Checkボタン」を押すと、色々項目が出てくるので全て「Fixボタン」を押して

Fixボタンがなくなるまで全てクリックしました。

「Test Database Connection欄」の「Testボタン」を押します。

全てのFixボタンをクリック

右上に「Connected to test1」という通知が出てくれればOK。

Connected to test1

Miscellaneous

右から4番目の「スパナアイコン」をクリックして「Miscellaneous」を開く。

右から4番目の「スパナアイコン」をクリックして「Miscellaneous」を開く

下記設定をして「Applyボタン」を押す。

  • Show status inside editor: ON
  • Presets: 「LiveSync」

Setup URIの作成

同期用のURIを取得します。

このメニューでコピーされるURIと、ここで入力するパスワードは、他の端末で同期設定する際に使用します。

「Ctrl+P」でコマンドパレットを開き「Self-hosted LiveSync: Copy setup URI」を選択。

Self-hosted LiveSync: Copy setup URI

LiveSyncするためのパスワードを入力します。

このパスワードはfly.ioで設定していたものと全然関係なく、この同期用URIを暗号化するためのパスワードです。新たに任意のものを設定しましょう。

URIとパスワードが漏洩すると、知らん人にノートコピーされちゃうよ!危ないよ!

パスワードを入力

完了するとクリップボードに、下記のようなURIがコピーされているので、控えておきましょう。大事な情報です。

obsidian://setuplivesync?settings=長い文字列

これでPCの作業は完了です。

別端末で同期設定する

それでは別端末で同期設定していきましょう。

今回はiPadでの例を出しますが、Androidスマホでも同様の手順で実施可能でした!

空のVaultを作成

「Create new vault」からvaultを作っていきましょう。

Create new vault

「Vault name」に任意の名前を入力して「Createボタン」を押してvalueを作成します。

vaultを作成

これで空のVaultが作成されました。

Self-hosted LiveSyncをインストール/有効化

Self-hosted LiveSyncをインストールしていきます。

ここの手順はPCと同じです。

歯車ボタンから設定画面を開いて、「コミュニティプラグイン」をタップ。

「コミュニティプラグイン」をタップ

「Turn on community pluginsボタン」でコミュニティプラグインを有効化。

「Turn on community pluginsボタン」でコミュニティプラグインを有効化

「閲覧ボタン」をタップ。

「閲覧ボタン」をタップ

「Self-hosted LiveSync」を検索して選択。

「Self-hosted LiveSync」を検索して選択

「インストールボタン」でSelf-hosted LiveSyncをインストール。

「インストールボタン」でSelf-hosted LiveSyncをインストール

インストール完了したら「有効化ボタン」をタップ。

インストール完了したら「有効化ボタン」をタップ

設定画面を閉じます。

Self-hosted LiveSyncの同期設定

メインのサイドバーから「コマンドパレットを開く」をタップ。

メインのサイドバーから「コマンドパレットを開く」をタップ

コマンドパレットから「Self-hosted LiveSync: Open setup URI」をタップします。

コマンドパレットから「Self-hosted LiveSync: Open setup URI」をタップ

Easy setupというポップアップが出てきます。

PCで最後にクリップボードにコピーしたURIをここで入力します。

何かしらの手段を使って文字列を転送して、ここに貼り付けて「Okボタン」をおします。

Set up URI

次にパスフレーズを入力します。「Self-hosted LiveSync: Copy setup URI」でURI取得前に入力したパスフレーズです。

次にパスフレーズを入力

「y/n) Importing LiveSync's conf, OK?」で「yes」をタップ。

「y/n) Importing LiveSync's conf, OK?」で「yes」をタップ

「How would you like to set it up?」で「Set it up as secondary or subsequent device」をタップ。

「How would you like to set it up?」で「Set it up as secondary or subsequent device」をタップ

少し待つと……勝手に同期されて空だったVaultにファイル/フォルダが作成されていきます!

同期される

これで端末間同期するようになった!

適当に編集して、別の端末で編集が適用されていることを確認できればミッションコンプリートです!

lisの使用状況

ちなみにぼくは今のところ

  1. PC
  2. iPad
  3. Androidスマホ1
  4. Androidスマホ2

で同期設定をしていて、今のところ不自由なく使えています。

あくまで個人利用なので、同時に複数端末操作とかはしていないのでその場合の動作は不明です。

ObsidianでSelf-hosted LiveSyncを設定してみて良かったところ

  1. iPadで同期ができた
    1. 正直これが1番大きい
    2. SyncthingとかGitとか別の方法でiPadと同期できないかと思っていたらことごとくNGだったの、Self-hosted LiveSyncに助けられた
  2. サクッと同期してくれるので、どの端末でどうこうを考えないでメモできるようになった
  3. 最初の設定(今回の場合PCでの設定)が完了しちゃえば、後続の端末はセットアップがかなり楽ちん
    1. Setup URIさえ受け渡せちゃえばこっちのもんです

ObsidianでSelf-hosted LiveSyncを設定してみてイマイチだったところ

今のところは正直ありませんが、強いて挙げれば

  1. 外部サーバ(今回の場合、fly.io)の設定をしなければならないので手間
    1. こういうのやり慣れてない人は戸惑ったり恐怖したりしそう
    2. とはいえ基本的には見よう見まねでできたので、それほどでもなかったのは事実です
    3. ここに添付されている動画で完結するに等しい
  2. サービスを何らかの問題で変更しないといけない場合面倒そう
    1. 作者さんももともとIBM Cloudantを使用するように解説されていたものの、ここで問題があったためfly.ioにたどり着いた旨を対談でお話していました
    2. 同様にfly.ioが何らか起きた時、他のサービスに乗り換えないと!となると、面倒な手順は発生しそうな気はします

Obsidianの同期設定してみてイマイチだったところ

これはどんな同期手段でも複数端末、複数Vault使ったら発生する問題かと思いますが……

Vault作成のたびにObsidian自体の設定が初期値なので、設定が面倒です。

PCでわちゃわちゃ設定したのに

「あれ……英語だ……」

「あのメニューがONになっていない……設定しなければ……」

みたいなことが発生します。

設定同期とかあればいいのにねぇ(未調査)。

Sync hidden filesを有効にすれば設定の同期もできるようです!

ただし注意点として、↓をした方がよいようです。

  • 「skip patternsをcross platformボタン」を押す(クロスプラットフォーム用にする)
  • 実行する前にバックアップをすること(設定がモバイルとデスクトップでガチャガチャする可能性があるみたい)

参考

コチラを参考にしました。ありがとうございました!

github.com pouhon.net github.com github.com pouhon.net

*1:Win+x→a が手っ取り早いです