記事

Last Modified:

ブラウザのブックマークを同期したい #Firefox #Safari #macOS

色々あったので箇条書き

macOS Safari(以下Safari)からmacOS Firefox(以下Firefox)へブックマークを同期する方法を考える。

Safariからブックマークをエクスポート→Firefoxへインポート

  1. Safariで[ファイル]→[書き出す]→[ブックマーク...]、
  2. Firefoxで[ブックマーク]→[ブックマークを管理]→[HTML から読み込む...]

この手作業を自動化したい。

Firefoxで[他のブラウザーから読み込む...]

Firefoxで[ファイル]→[他のブラウザーから読み込む...]を使うとSafariのブックマークなどが読み込める。 でも何回もクリックが必要なので、スクリプトエディタで自動化するにしても減らしたほうが良いと思い設定から減らしてみる。

// ~/.firefox/user.js
// これでブラウザ選択候補がSafariだけになる
user_prefs("browser.migrate.brave.enabled", false);
user_prefs("browser.migrate.canary.enabled", false);
user_prefs("browser.migrate.chrome-beta.enabled", false);
user_prefs("browser.migrate.chrome-dev.enabled", false);
user_prefs("browser.migrate.chrome.enabled", false);
user_prefs("browser.migrate.chromium-360se.enabled", false);
user_prefs("browser.migrate.chromium-edge-beta.enabled", false);
user_prefs("browser.migrate.chromium-edge.enabled", false);
user_prefs("browser.migrate.chromium.enabled", false);
user_prefs("browser.migrate.edge.enabled", false);
user_prefs("browser.migrate.firefox.enabled", false);
user_prefs("browser.migrate.ie.enabled", false);
user_prefs("browser.migrate.opera-gx.enabled", false);
user_prefs("browser.migrate.opera.enabled", false);
user_prefs("browser.migrate.safari.enabled", true); // Safariだけtrue
user_prefs("browser.migrate.vivaldi.enabled", false);

// こうすると読み込むデータ選択に履歴の項目が出てこない
user_prefs("browser.migrate.history.maxAgeInDays", 0);

// これは新しいタイプのマイグレーションモーダルを使う設定
user_prefs("browser.migrate.content-modal.enabled", true);

// 読み込むデータ選択の[+]を押す手間が省ける
user_prefs("browser.migrate.content-modal.import-all.enabled", false);

ここまでやっといてアレだけど、やっぱりスクリプトエディタでメニューをクリックさせる方法が良く分からない。

コマンドラインで自動化する

MozReplとかあったなと思い出し、chrome://browser/content/bookmarks/bookmarksManager.xulを開いてメニュークリックさせたりできるのでは?と思って試してみる。

Firefox::Marionette

とりあえず試しにブックマーク一覧を出してみる。

use v5.30;
use Firefox::Marionette;
my $firefox = Firefox::Marionette->new();
foreach my $bookmark ($firefox->bookmarks()) {
  say $bookmark->guid(), ": ", $bookmark->url();
}

⭕というわけで、自動的にSafariからFirefoxへブックマークを同期するスクリプトが完成。

#! /usr/bin/env perl
use v5.30;
use Firefox::Marionette qw();

Firefox::Marionette->new(profile_name => 'default', debug => 1)
  ->chrome()
  ->script(<<'END_OF_SCRIPT');
return (async function () {
  await PlacesUtils.bookmarks.eraseEverything();
  const migrator = await MigrationUtils.getMigrator("safari");
  await migrator.migrate(MigrationUtils.resourceTypes.BOOKMARKS);
})();
END_OF_SCRIPT