ブックマークを複数ブラウザで同期したい。LAN内のみで良い(一手間加えればWANもいけると思うけど)。
EverSyncを使っていたのだけれど、Braveをアップデートしたら挙動不審になったのをきっかけにセルフホストに移行することにしました。別にブックマークなんて結局リンク集なのでそんな大した秘匿情報ではないので、別にクラウドでもよかったんですが、まぁせっかくなので。
できるだけシンプルなものとして、「Cross-browser bookmarks syncing - Floccus bookmarks sync」をWebDAV構成で使うことにしました。
構成
簡単に構成。
- Floccusはブックマーク同期のみをするソフトウェア
- 通信はいくつかの手段がある。一番楽なのはGoogle Drive。
- ここではシンプルかつ自立性を重視して安心と伝統のWebDAV
- 2つめ以降のブラウザで、同じプロファイルを用いるには、手動でプロファイルのインポート、エクスポートをする
NextcloudとかLinkwardenを基盤にすることもできるようなのですが、依存を減らしたかったのでWebDAVにしました。Nextcloud基盤一応あるんですけれど、重量級なのであんまり色々やりたくない感じ。
Floccusのバージョンは5.8.3で、Firefox、Chromeなど対応しています。
インストール
WebDAVサーバの準備
「bytemark/webdav - Docker Image」を使わせていただきました。
services:
webdav:
image: bytemark/webdav
container_name: floccus-webdav
restart: unless-stopped
ports:
- "ポート:80"
environment:
- USERNAME=ユーザ名
- PASSWORD=パスワード
volumes:
# 相対パスに変更することで、今いるディレクトリの data フォルダに固定されます
- ./floccus-data:/var/lib/davポート、ユーザ名、パスワード、あとブックマークを保存する場所を指定します。上記はカレントディレクトリのfloccus-dataディレクトリになっていますが、適当に。
同期ファイルとして、最小限のXMLファイルbookmarks.xbelをコンテナ内の/var/lib/dav/data内に置いておきます。
# コンテナ内のファイルに最小限の XML 構造を書き込む
docker exec floccus-webdav sh -c 'echo "<?xml version=\"1.0\" encoding=\"UTF-8\"?><xbel version=\"1.0\"></xbel>" > /var/lib/dav/data/bookmarks.xbel'
# 念のため所有権を再設定
docker exec floccus-webdav chown www-data:www-data /var/lib/dav/data/bookmarks.xbel最初のブラウザにfloccus導入
「Guides and How tos - Floccus bookmarks sync」がドキュメント。ここから使っているブラウザの拡張機能を導入します。
インストールしたら、最初のプロファイルを作成します。
- WebDAV URL:
http://WebDAVサーバのIPアドレス:ポート- LAN内なのでhttps接続は不要としました
- ユーザ、パスワード:
docker-compose.ymlと合わせる - パスフレーズ: 空欄(暗号化しない場合)
次は同期ファイルのパスとかを指定します。

次の設定は同期の手法で、同期タイミングや方向性の設定ですが、基本的にはデフォルトでいいと思います。

ただ入れ子プロファイルだけOFFにしました。私には必要ない機能だと思ったからです。この機能の意味はGemini曰く以下です。
例えば、以下のような2つの同期設定(プロファイル)を作りたいとします。
- プロファイルA(全体用): 「ブックマークバー」全体を、自分専用のWebDAVサーバーに同期する。
- プロファイルB(共有用): 「ブックマークバー」の中にある**「仕事」フォルダだけ**を、チームの共有サーバーに同期する。
このとき、「仕事」フォルダは、プロファイルAの管理下でもあり、プロファイルBの管理下でもあるという重複状態になります。
つまりチームやプロジェクトで一部分だけ共有とかしたい時に使う機能です。私はシングルユーザで、特に複雑なコントロールをする予定はないので、オフにしました。どうしてもこの手の同期系ソフトウェアは運用していると何かとトラブルが発生しがちなので、不要な機能はオフにしたほうがよかろうと思いました。
そういう意味では、もっとも確実なのはアップロードもダウンロードも完全手動にすることでしょうし、実際EverSyncではそうしていたのですが、とりあえず当面は双方向でやっていきたいと思います。
2つめのブラウザ以降
まず出口みたいなアイコンからプロファイルをエクスポートします。

2つ目のブラウザで拡張機能を導入後、エクスポートしたプロファイルをインポートしたらOKです。インポート後、下矢印アイコンでダウンロードしたら同期されます。
一点注意ですが、同期のタイミングが初期設定では定義されていませんでした。なので「設定」から「変更ベースの同期」と「時間ベースの同期」をそれぞれONにします。その後はWebDAV経由で同期されます。
バックアップ
docker-compose.yml自身と、バインドマウントの設定を記述してますが、そのディレクトリを圧縮してコピーしたらOKです。
自分はバックアップスクリプトで定期実行しています。スクリプトはdocker-compose.ymlをAIに見せたらサクッと書いてくれると思います。そういうのは得意なAI。
所感
dockerでWebDAVサーバをたてたのは地味に初めてで、Geminiに聞いてすぐできるかと思いきや、だいぶ間違えたことを言われて転がされました。インフラ絡むと不得意なAI。地味に時間がかかっている。ま、だから記事にも意味があるんですけどね。
性質上、ブックマーク同期はインターネット公開にする必要性は特に感じていません。なのでLAN内限定です。外で使う時にブックマークを激しく変更しないと思いますし、また常に同期用の通信が走るのも邪魔です。もしやるならば、簡単なのは例によってCloudflare Tunnelでしょう。
とりあえずしばらく運用してみようと思います。うまくいくようならEverSyncはいらないですね。
コメント