hero image

Nextcloud を使って複数デバイス間で Obsidian を同期する


こんにちは、るくみるです。

この記事では、自宅サーバに Nextcloud を導入し、メイン PC やノート PC、iPad などの端末間で Obsidian のノートを同期する方法を紹介します。

最後に紹介する Obsidian の設定は、Google Drive や Dropbox など他のクラウドサービスで同期したい場合にも応用できます。

はじめに

今までは、あまつ楓様のこちらの動画を参考に、コミュニティプラグイン「Git」と GitHub を使って複数デバイス間で Vault(Obsidian が管理するデータ)を同期していました。しかし、この方法では同期のたびに Git 操作(commit、push など)を手動で行う必要があるため、push のし忘れで「昨日家で書いた分を iPad に同期できない!」といったことが多々ありました。

そこで、思いついたのです。

「自宅サーバに Vault を置けばいいのでは?」

と。つまり、ローカルとリモートでいちいちデータをやり取りすることなく、直接サーバ上の Vault を編集すればいいのではないかと。

というわけで今回は、Nextcloud という自宅サーバにクラウドを構築できるサービスを使った Obsidian 同期について解説します。

この方法には以下の利点があります。

  • 完全無料(サーバの電気代のみ)
  • VPN で接続するためセキュリティ面でも安心
  • 自宅ネットワーク内で完結し、外部クラウドに頼ることがない

導入も Docker を利用すれば比較的簡単にできたので、ぜひご参考までに。

使用するもの

  • Linux サーバ
  • Tailscale(VPN)
  • Nextcloud
  • Obsidian

Linux サーバについては、私は使わなくなったノート PC に Ubuntu を入れて利用していますが、ストレージとして使うことができれば RaspberryPi や NAS など何でも大丈夫だと思います。

Tailscale は自宅 LAN の外からでも VPN で接続できるように導入しています。

Tailscale

高速かつ安心な VPN サービスです。VPN を使うと、ポート開放をしなくても外部ネットワークからもトンネルを通じて自宅 LAN にアクセスすることができるようになります。

詳細は割愛しますが、Nextcloud を利用するすべての端末に導入しておきます。VPN がないと自宅の LAN に繋がっているときしかアクセスできなくなるので注意。

Tailscale | Secure Connectivity for AI, IoT & Multi-Cloud(公式ダウンロードページ)

Tailscale には MagicDNS という機能があり、各 Tailscale アドレスに名前を付けて管理できます。今回は Linux サーバの Tailscale アドレス(例:100.x.x.x)に server という名前が付いている前提で説明します。

Nextcloud

Nextcloud は個人が保有しているサーバをクラウドストレージとして利用できるサービスです。Linux サーバにデータを保存し、それをクライアント側から閲覧したり編集したりできるようにします。

サーバ側の導入

Docker を使って導入します。サーバに Docker がインストールされていない場合は先にインストールしておきましょう。

任意のディレクトリ(例:~/configs/)に、以下の docker-compose.yml を作成して保存してください。データベースには PostgreSQL を使用します。

また、${PASSWORD} の部分は設定したいパスワードを直接打ち込んでも構いませんが、セキュリティ面が心配な方は同じディレクトリに .env を作成し、そこに書き込んだものを参照するとよいでしょう。サンプルでは .env にパスワードを保存し、それを参照しています。

ポート番号は任意ですが、私は 8080 番ポートを Nextcloud に割り当てました。

services:
  db:
    image: postgres:15
    restart: always
    volumes:
      - db_data:/var/lib/postgresql/data
    environment:
      - POSTGRES_DB=nextcloud
      - POSTGRES_USER=nextcloud
      - POSTGRES_PASSWORD=${PASSWORD}

  nextcloud:
    image: nextcloud:latest
    container_name: nextcloud
    restart: always
    ports:
      - "8080:80"
    volumes:
      - nextcloud_data:/var/www/html
    environment:
      - POSTGRES_HOST=db
      - POSTGRES_DB=nextcloud
      - POSTGRES_USER=nextcloud
      - POSTGRES_PASSWORD=${PASSWORD}
    depends_on:
      - db

volumes:
  db_data:
  nextcloud_data:

保存したら、ターミナルからコンテナを起動します。

docker compose up -d

次に、ブラウザから構築した Nextcloud サーバへアクセスします。サーバの IP アドレス(または前述の Tailscale アドレス)を使ってアクセスしてください。IP アドレスが 192.168.x.x、ポートが 8080 の場合は http://192.168.x.x:8080 です。

初回アクセス時は管理者アカウントの作成を求められるので、任意のユーザ名とパスワードでアカウントを作成してください。

また、Tailscale 経由でクライアント側からアクセスする場合、「不審なドメインを介してアクセスしています」とエラーが発生する場合があるため、Nextcloud のコンテナ内で以下のコマンドを実行して、信頼済みドメインを追加してください。

docker exec -it nextcloud php occ config:system:set trusted_domains 1 --value=<address>:<port>
# --value の値は Tailscale アドレスまたは MagicDNS 名に変更してください。(例:--value=server:8080)

上記のコマンドで “1” となっている部分は、以下のコマンドで設定済みの信頼済みドメインを表示し、続きの番号を指定してください。ほとんどの場合は 1 で大丈夫です。

docker exec -it nextcloud php occ config:system:get trusted_domains

これでサーバ側の導入は終了です。

クライアント側の導入

Windows や Mac は公式サイトからダウンロードが可能です。

Download and install Nextcloud(公式ダウンロードページ)

iPhone や iPad などには各種アプリストアからダウンロードしてください。

インストールが終わったらアプリを起動し、Tailscale アドレスまたは MagicDNS で設定した端末の名前を用いてサーバを指定してください。(例:http://100.x.x.x:8080http://server:8080

最初にログインが求められるので、管理者アカウントを使って(またはクライアント用アカウントを作成して)ログインします。

これで Linux サーバ上の Nextcloud にクライアント側の端末からアクセスできるようになります。

Obsidian の設定

まず、Nextcloud 上に新しい Vault を作成するか、既に管理している Vault を移動してください。今回は例として obsidian-vault というディレクトリを Nextcloud 直下に作成したとします。

Windows や Mac からの同期

Obsidian の「保管庫を管理」から「保管庫としてフォルダを開く」を選択し、作成した Nextcloud 上の保管庫(例:obsidian-vault)を選択するだけです。これでサーバ上の Vault を直接編集できるため、ローカルとクラウドを都度同期する手間を減らせます。

iPad での設定

iPad 版の Obsidian では Nextcloud 上の保管庫を指定して開けないため、コミュニティプラグイン「Remotely Save」を使用して同期を行います。

「設定」の「コミュニティプラグイン」から Remotely Save をインストールします。インストールしたら Remotely Save の設定画面を開き、以下のように変更してください。

  • Choose A Remote Service:Webdav
  • Server Addresshttp://[サーバアドレス]/remote.php/dav/files/[Nextcloud の管理者ユーザ名]/

(例:http://server:8080/remote.php/dav/files/user/

  • Username:[Nextcloud の管理者ユーザ名]
  • Password:[Nextcloud の管理者パスワード]
  • Change The Remote Base Directory:[Nextcloud の Vault 名] (例:obsidian-vault

同期は画面左の円形の矢印ボタンを押すことで実行できます。

すでに管理していた Vault を移植する場合で、設定ファイル(テーマや拡張機能など)も同期したい場合は「Sync Config Dir」を Enable にして一度同期を実行してください。(iPad 用の拡張機能を別で管理したい場合は、その後に Disable にするとよいです)

Sync On Save を Enable にすると同期ボタンを押す手間が省けるようですが、他の媒体で同時に開いたときにコンフリクトが発生する可能性があるので注意が必要です。

以上で、異なる端末間での同期は完了です。Google Drive や Dropbox などのクラウドサービスを使っている場合は、上の Remotely Save の設定を変更すれば同期ができるようになると思います。各自でチャレンジしてみてください。

おわりに

というわけで今回は Nextcloud を使った Obsidian の同期について解説しました。

セキュリティ面でさらに改善可能な部分もありますが、もし現行の実装で重大な脆弱性があれば教えていただけると嬉しいです。

また、途中の説明は省略している部分もありますが、使ったサービスの詳細は公式ドキュメントなどを参照してみてください。ほぼ無料で運用できて、セキュリティ面でも安心な自分だけの知識ノート環境を作ってみませんか。

それでは次の記事でまたお会いしましょう。

Stay Tuned!