こんにちは、lisです!
最近Obsidianというアプリでメモを管理し始めています。
しかしデフォルトのままだと、他の端末との共有ができない……
ということで今回はObsidianのコミュニティプラグイン「Self-hosted LiveSync」で複数端末同期をしてみたので、手順をご紹介します。
※Twitterで作者のvorotamoroz aka きみのぶさんに補足を頂きましたので、各所追記をしました。
- Obsidianとは?
- Self-hosted LiveSyncとは?
- Self-hosted LiveSyncで同期できるようになるまでの大まかな流れ
- fly.ioをセットアップしていく
- flyctlをインストール
- fly.ioにサインアップ
- アプリ/DBをセットアップ
- アプリをデプロイ
- DBの設定
- ObsidianにSelf-hosted LiveSyncをインストール
- Self-hosted LiveSyncの設定
- Setup URIの作成
- 別端末で同期設定する
- lisの使用状況
- ObsidianでSelf-hosted LiveSyncを設定してみて良かったところ
- ObsidianでSelf-hosted LiveSyncを設定してみてイマイチだったところ
- Obsidianの同期設定してみてイマイチだったところ
- 参考
Obsidianとは?
markdownファイルを管理できるアプリです。
名前をしって試してみたところ、使い勝手もよくキレイなので使い始めてみました。
マルチプラットフォームなので、WindowsもMacOSもLinuxもAndroidもiOS系も使えちゃう優れもの。
Self-hosted LiveSyncとは?
Obsidianにはコミュニティプラグインという、一般の開発者が作成したプラグインを使用する機能があります。
Self-hosted LiveSyncもそのうちの1つです。
このツールは外部のホスティングサービスを経由してファイルを同期するステキプラグインです。
他にも同期する方法はあるのですが、iPadと同期しようと頑張った所、他のものでうまくいかずSelf-hosted LiveSyncにたどり着きました。
Self-hosted LiveSyncで同期できるようになるまでの大まかな流れ
- fly.ioに登録
- fly.ioでアプリ/DBを設定してデプロイ
- ObsidianでSelf-hosted LiveSyncを設定
- 他の端末のObsidianでSelf-hosted LiveSyncの設定
今回は外部サービスとしてfly.ioを使用してます。
fly.ioをセットアップしていく
fly.ioというサービスを使用していきます。
無料枠があって超過すると従量課金ですが、無料枠ないで使用できそうなので進めていきます。
公式のハンズオンページを元に進めていきます。
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です。
ハッピーなキャラクター画面です。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ボタン」をクリック。
UsernameとPasswordにログイン情報を入力して「Configure Nodeボタン」をクリック。
ObsidianにSelf-hosted LiveSyncをインストール
Obsidianの設定をしていきます。
今回使用するのはこちら「Self-hosted LiveSync」です。
Obsidianの左下歯車マークから設定を開きます。
サイドメニューの「コミュニティプラグイン」を開いて、「コミュニティプラグインを有効化ボタン」を押します。
コミュニティプラグインの「閲覧ボタン」を押します。
ここからコミュニティプラグインを検索してインストールしたりできます。
検索バーに「Self-hosted LiveSync」を入力して検索→インストールボタンを押してインストールします。
インストールが完了したら「有効化ボタン」が出てくるので押しましょう。
Self-hosted LiveSyncの設定
設定のサイドバー最下部に、コミュニティプラグイン「Self-hosted LiveSync」が出来ているのでクリック。
Remote Database configuration
左から3番目のアイコンをクリックして「Remote Database configuration」を開く。
開いたら下記項目を入力していきましょう。
- URI: https://{app-name}.fly.dev/
- さっき開いていたDBの設定画面のURLを取ってくると簡単
- Username: ログイン情報のUsername
- Password: ログイン情報のPassword
- Database name: test1
- 任意かと思ったらtest1固定だったけどどこ由来でこの名前だったのか謎
- 同期を一旦止めれば変えられるかもしれないそうですが、まぁ大きな問題はないのでこのままでいいやつだと思います
データベース名が変えられないのは、多分何らかの同期が動いてるからです。一旦プリセットでdisable all syncにしたあと変更してもらえれば多分変えられるかと。
— vorotamoroz aka きみのぶ (@vorotamoroz) 2022年10月3日
- End to End Encryption: ON
- Passphrase: 任意
- 説明には「暗号化パスフレーズ。既存のデータベースのパスフレーズを変更する場合は、リモート データベースを上書きすることを強くお勧めします。」と書かれている
入力完了したら、「Apply欄」の「Applyボタン」を押す。
……が、「Could not connect to the database.」と表示されました。
「Check database configuration欄」の「Checkボタン」を押すと、色々項目が出てくるので全て「Fixボタン」を押していきます。
Fixボタンがなくなるまで全てクリックしました。
「Test Database Connection欄」の「Testボタン」を押します。
右上に「Connected to test1」という通知が出てくれればOK。
Miscellaneous
右から4番目の「スパナアイコン」をクリックして「Miscellaneous」を開く。
下記設定をして「Applyボタン」を押す。
- Show status inside editor: ON
- Presets: 「LiveSync」
Setup URIの作成
同期用のURIを取得します。
このメニューでコピーされるURIと、ここで入力するパスワードは、他の端末で同期設定する際に使用します。
「Ctrl+P」でコマンドパレットを開き「Self-hosted LiveSync: Copy setup URI」を選択。
LiveSyncするためのパスワードを入力します。
このパスワードはfly.ioで設定していたものと全然関係なく、この同期用URIを暗号化するためのパスワードです。新たに任意のものを設定しましょう。
Copy setup URIで聞かれるパスワードは、このURI自体を暗号化するパスワードです。
— vorotamoroz aka きみのぶ (@vorotamoroz) 2022年10月3日
これが漏れたらノートを秒でコピーされるし、データベースのパスワードも解っちゃうので。。なので、逆にできるだけEnd to end encryptionやデータベースのパスワードとは違うパスワードで暗号化してください。
URIとパスワードが漏洩すると、知らん人にノートコピーされちゃうよ!危ないよ!
完了するとクリップボードに、下記のようなURIがコピーされているので、控えておきましょう。大事な情報です。
obsidian://setuplivesync?settings=長い文字列
これでPCの作業は完了です。
別端末で同期設定する
それでは別端末で同期設定していきましょう。
今回はiPadでの例を出しますが、Androidスマホでも同様の手順で実施可能でした!
空のVaultを作成
「Create new vault」からvaultを作っていきましょう。
「Vault name」に任意の名前を入力して「Createボタン」を押してvalueを作成します。
これで空のVaultが作成されました。
Self-hosted LiveSyncをインストール/有効化
Self-hosted LiveSyncをインストールしていきます。
ここの手順はPCと同じです。
歯車ボタンから設定画面を開いて、「コミュニティプラグイン」をタップ。
「Turn on community pluginsボタン」でコミュニティプラグインを有効化。
「閲覧ボタン」をタップ。
「Self-hosted LiveSync」を検索して選択。
「インストールボタン」でSelf-hosted LiveSyncをインストール。
インストール完了したら「有効化ボタン」をタップ。
設定画面を閉じます。
Self-hosted LiveSyncの同期設定
メインのサイドバーから「コマンドパレットを開く」をタップ。
コマンドパレットから「Self-hosted LiveSync: Open setup URI」をタップします。
Easy setupというポップアップが出てきます。
PCで最後にクリップボードにコピーしたURIをここで入力します。
何かしらの手段を使って文字列を転送して、ここに貼り付けて「Okボタン」をおします。
次にパスフレーズを入力します。「Self-hosted LiveSync: Copy setup URI」でURI取得前に入力したパスフレーズです。
「y/n) Importing LiveSync's conf, OK?」で「yes」をタップ。
「How would you like to set it up?」で「Set it up as secondary or subsequent device」をタップ。
少し待つと……勝手に同期されて空だったVaultにファイル/フォルダが作成されていきます!
これで端末間同期するようになった!
適当に編集して、別の端末で編集が適用されていることを確認できればミッションコンプリートです!
lisの使用状況
ちなみにぼくは今のところ
- PC
- iPad
- Androidスマホ1
- Androidスマホ2
で同期設定をしていて、今のところ不自由なく使えています。
あくまで個人利用なので、同時に複数端末操作とかはしていないのでその場合の動作は不明です。
ObsidianでSelf-hosted LiveSyncを設定してみて良かったところ
- iPadで同期ができた
- 正直これが1番大きい
- SyncthingとかGitとか別の方法でiPadと同期できないかと思っていたらことごとくNGだったの、Self-hosted LiveSyncに助けられた
- サクッと同期してくれるので、どの端末でどうこうを考えないでメモできるようになった
- 最初の設定(今回の場合PCでの設定)が完了しちゃえば、後続の端末はセットアップがかなり楽ちん
- Setup URIさえ受け渡せちゃえばこっちのもんです
ObsidianでSelf-hosted LiveSyncを設定してみてイマイチだったところ
今のところは正直ありませんが、強いて挙げれば
- 外部サーバ(今回の場合、fly.io)の設定をしなければならないので手間
- こういうのやり慣れてない人は戸惑ったり恐怖したりしそう
- とはいえ基本的には見よう見まねでできたので、それほどでもなかったのは事実です
- ここに添付されている動画で完結するに等しい
- サービスを何らかの問題で変更しないといけない場合面倒そう
- 作者さんももともとIBM Cloudantを使用するように解説されていたものの、ここで問題があったためfly.ioにたどり着いた旨を対談でお話していました
- 同様にfly.ioが何らか起きた時、他のサービスに乗り換えないと!となると、面倒な手順は発生しそうな気はします
Obsidianの同期設定してみてイマイチだったところ
これはどんな同期手段でも複数端末、複数Vault使ったら発生する問題かと思いますが……
Vault作成のたびにObsidian自体の設定が初期値なので、設定が面倒です。
PCでわちゃわちゃ設定したのに
「あれ……英語だ……」
「あのメニューがONになっていない……設定しなければ……」
みたいなことが発生します。
設定同期とかあればいいのにねぇ(未調査)。
> 設定同期とかあればいいのにねぇ(未調査)。
— vorotamoroz aka きみのぶ (@vorotamoroz) 2022年10月3日
さぁSync hidden filesを有効にするのだ!
なおskip patternsをcross platformボタンを押してクロスプラットフォーム用にするのを忘れないように…
あと初っ端で意外と設定がモバイルとデスクトップでガチャガチャするので、要バックアップ。
Sync hidden filesを有効にすれば設定の同期もできるようです!
ただし注意点として、↓をした方がよいようです。
- 「skip patternsをcross platformボタン」を押す(クロスプラットフォーム用にする)
- 実行する前にバックアップをすること(設定がモバイルとデスクトップでガチャガチャする可能性があるみたい)
参考
コチラを参考にしました。ありがとうございました!
github.com pouhon.net github.com github.com pouhon.net
*1:Win+x→a が手っ取り早いです