ObsidianのRemotely Saveを利用してみた

- #obsidian #cloudflare #r2 #dropbox #file-sync

2か月ほどブログ更新が滞ってしまっていたので久々に更新

要約

表題の通りObsidianRemotely Saveプラグインを試してみようと思っていたので、今回色々やってみた

ObsidianのRemotely Saveについて

これはObsidianを利用している人には有名なプラグインで、要するにMarkdownなどの メモを暗号化してクラウドストレージに保管し、端末間で同期してくれる という優れものだ

暗号化は End-to-end(E2E) encryption で行われ、暗号化方式はRClone Crypt(デフォルト)かOpenSSL encかの二択となっている

GitHub公式リポジトリの説明にもある通り、AWSのS3やDropboxやWebDAVなど様々なサービス・機能が同期用ストレージとして利用可能なのだが、今回自分は

の2つでテストしてみた

プラグインのインストール方法などは省略

Remotely Saveを利用する際の注意点

暗号化パスワードについて

もし平文ではなく 暗号化されたメモ をクラウドストレージに置きたい場合、必ず 一番初めに「Encryption Password」を設定 することをおすすめする

当然だが、クラウドサービス利用時にAPIエンドポイントのURLやアクセスキーIDなどの必要情報を先に一通り入力し、そのまま同期してしまうと メモが平文のままアップロードされてしまう

パスワード設定項目はRemotely Save設定画面の最上部より少し下へスクロールした辺りにあるので注意

上記画像にも書いてあるように「Confirm」をクリックしてパスワードを設定しないと有効にならない点にも注意

また、Remotely Saveの設定画面最下部に「Reset」ボタンがあるが、このResetを実行する度にプラグインを再度読み込むらしいので、自分はResetした場合には一応Encryption PasswordのConfirmを再度実行してから同期することにしている

従量課金に注意

連携するクラウド系サービスによっては従量課金になっている点に注意が必要だ

例えば今回利用した Cloudflare R2も従量課金 となっている

具体的には、下記の通り

なお厳密なClassA操作とClassB操作の内訳は下記の通りらしい

Class A Operations include ListBuckets, PutBucket, ListObjects, PutObject, CopyObject, CompleteMultipartUpload, CreateMultipartUpload, LifecycleStorageTierTransition, ListMultipartUploads, UploadPart, UploadPartCopy, ListParts, PutBucketEncryption, PutBucketCors and PutBucketLifecycleConfiguration.

Class B Operations include HeadBucket, HeadObject, GetObject, UsageSummary, GetBucketEncryption, GetBucketLocation, GetBucketCors and GetBucketLifecycleConfiguration.

Remotely SaveでCloudflare R2を利用する方法

一応メモしておく

Cloudflare R2用に支払い手段を登録する

Cloudflareアカウントを持っていない場合はここで作成する必要がある

既にCloudflareアカウントがある場合はCloudflareのログイン済みダッシュボード(Dashboard)から左側の「R2」を選択すればR2サービスの利用開始画面に移動する

あとは指示通りにクレジットカードかPayPalの登録をすればR2サービスが利用できるようになる

以前の記事でも書いたように、自分はドメイン管理やリバースプロキシなどでCloudflareは既に利用していたので、そのままPayPalを支払い手段としてR2を利用することにした

R2用のバケットを作成する

R2を利用するために バケット(Bucket) を作成する

URLの一部になるらしいのでハイフンなどで繋げつつ適当な名前で作ってみた

にしておいた

作成したバケットの設定画面を見ると、このようにAPIエンドポイント用のURLが表示される(S3 APIの部分)

https://からcloudflarestorage.comまで(末尾スラッシュなし)がRemotely Saveプラグインに求められる部分なので一応メモしておくと良い

ちなみにリージョンは自動で「アジア太平洋(APAC)」になった

APIアクセス用トークンを作成する

トークン名は自分が分かればいいので適当なものにする

権限とバケット指定は下記の通りにした

他の方の記事では「管理者読み取りと書き込み」にしないとダメだったという意見を見たが、自分の環境では「オブジェクト読み取りと書き込み」で十分に同期可能だった(環境によるのかも知れない)

アクセスキーIDとシークレットアクセスキーをメモしておく

APIトークンを作成すると、 一度だけ 画面上にアクセスキーIDとシークレットアクセスキーが表示されるので必ずメモしておく

これらの情報はあとでRemotely Saveプラグインの設定時に必要不可欠なので絶対に見落とさないようにしたい

ObsidianのRemotely Save設定画面から必要事項を入力

あとは下記の通り、ObsidianのプラグインRemotely Save設定画面から各種情報を入力することで同期の準備が完了する

Regionはus-east-1にしておくと良い、と書いてあるが自分はautoにしておいた

Remotely Saveで同期開始

これで準備完了だが、念のためRemotely Save設定画面から Check Connectivity のCheckボタンをクリックして同期可能かどうか確認しておくと良い

必要事項入力後、Obsidianのコマンドパレット上から「Remotely Save: start sync」を選択するか、左側のリボンから「Remotely Save」の矢印アイコンをクリックするとその場で同期が開始される

あとは別端末のObsidianの方でも同様にRemotely Saveプラグインの設定をし、同じ暗号化パスワードを入れれば暗号化されたデータが復号されて保存・同期される

Remotely Saveの使い心地など

自分のObsidian環境について

自分のObsidianには凡そ6000超のファイルが含まれており、うち2000ほどは画像・PDFなどのファイル群、残り4000ほどがMarkdownファイルという構成になっている

問題発生: 同期の速度が端末ごとに大きく異なる

上記の通りファイル数がやや多め(?)だったことが災いしたのか、スマホから同期しようとすると 数行のファイル変更差分を同期するだけで10~40分かかってしまう ことが今回分かった

例えばPC上からの同期は 数秒で終わる のに、iPhone SE(第二世代)などで同期を行うと数十分かかったりする

いろいろ検証してみた

原因を特定しようと思い、

様々な検証をしてみた(下記はファイルサイズを半分に減らした時のR2ストレージの推移)

しかしどれも効果は乏しく、利用するサービスやネットワークの速度、ファイルサイズも直接的な要因ではないようだった

むしろ、ローカルの端末スペックに依存している(?)様子だった

やはりiPhone SE(第二世代)のロースペックぶりが足を引っ張っているのだろうか……?

同期速度低下の原因について推測

重要なのが、クラウドサービスにおいてDropbox(のAPI)を使う場合とCloudflare R2を使う場合の 速度差は体感上ほぼ無かった ということだ

どちらを使った場合もPCからのアップロードとダウンロード(fetch)に関してはスムーズに済む一方、スマホからだとどうしてもモタついてしまうことが分かった

恐らくだが、動画ファイルなど比較的ファイルサイズの大きめ1なバイナリファイルがObsidianのVault内にある場合に、Remotely Saveプラグイン本体がローカルキャッシュ(DB)とクラウド上のオブジェクトとの差分を走査&検出しようとするが、ロースペックのスマホだとそれをこなす能力が足りず、結果として遅くなっているのでは……と推測している

あるいは、TypeScript製であるRemotely SaveプラグインがiOSのObsidianで動作する際、JSやTSの(Webブラウザ/Electron上における)動作をエミュレートしているので遅くなっているとか、直接ネイティブコードのようなものに変換しているので遅くなっているとか、色々と考えられるが……

詳細は今回調査していないので分からない。いずれ調査するかも知れない

ReadOnlyで使うならまぁまぁの使い心地

とにかく自分の環境だと スマホからの同期が実用レベルにない速度 となってしまった為、現時点では双方向のWriteは諦め、スマホの方からはRead Only用途で使うことにした

クラウドサービスについてはCloudflare R2もDropboxも両方利用可能な状態にしてあるが、今の所Dropboxを利用している

とは言え、Read Onlyでもやはり Vault全体を暗号化し、クラウドで同期できるのは非常に有難い

スマホ版Obsidianアプリはまだまだ発展途上という感じはするが、現時点で既に使い心地は十分良好なので今後にも期待したい


  1. とは言っても自分のVault内で最大のファイルサイズは28.1MBで、10MB以上のファイルも全部で6つしかないのだが ↩︎