Open6
Arcの設定移行

を見ると、以下のファイルを移行すればうまくいきそうと書いてある。
~/Library/Application Support/Arc
~/Library/Preferences/company.thebrowser.Browser.plist
移行したけど、何も変わってないように見える。
あと不要なキャッシュとかもたくさん移行されたぽい。

スペース、サイドバーの同期は、設定でいけた

以下は同期できてない
- Favorite tabs (サイドバー上部にピン留めされてるタブ)
- 拡張機能
- キーボードショートカット
- その他設定
- アイコンのデザイン
- URL全体を表示する
- Arc Max、何を使うか

拡張機能とか設定とかを移行するスクリプトを書いてみたけどダメだった。
拡張機能のファイルは移行されても、Arcに拡張機能が認識されない、、、
arc-backup.sh
#!/bin/bash
# Arcを終了
osascript -e 'tell application "Arc" to quit'
sleep 2
# バックアップ先ディレクトリ
BACKUP_DIR=~/Dropbox/ArcBackup
mkdir -p $BACKUP_DIR
# 日付を含むバックアップファイル名
BACKUP_FILE=$BACKUP_DIR/arc_settings_$(date +%Y%m%d_%H%M%S).tar.gz
# 必要なディレクトリをバックアップ
echo "Arcの設定をバックアップしています..."
# 一時ディレクトリを作成
TEMP_DIR=$(mktemp -d)
mkdir -p $TEMP_DIR/Arc_Backup
# 必要なファイル/ディレクトリをコピー
ARC_DATA=~/Library/Application\ Support/Arc/User\ Data/Default
# 拡張機能関連
cp -R "$ARC_DATA/Extensions" "$TEMP_DIR/Arc_Backup/" 2>/dev/null
cp -R "$ARC_DATA/Extension State" "$TEMP_DIR/Arc_Backup/" 2>/dev/null
cp -R "$ARC_DATA/Extension Rules" "$TEMP_DIR/Arc_Backup/" 2>/dev/null
# 設定関連
cp "$ARC_DATA/Preferences" "$TEMP_DIR/Arc_Backup/" 2>/dev/null
cp "$ARC_DATA/Secure Preferences" "$TEMP_DIR/Arc_Backup/" 2>/dev/null
cp ~/Library/Application\ Support/Arc/User\ Data/Local\ State "$TEMP_DIR/Arc_Backup/" 2>/dev/null
# ブックマーク/履歴
cp -R "$ARC_DATA/Bookmarks" "$TEMP_DIR/Arc_Backup/" 2>/dev/null
cp -R "$ARC_DATA/Favicons" "$TEMP_DIR/Arc_Backup/" 2>/dev/null
# Arc固有の設定
cp -R "$ARC_DATA/Arc Spaces" "$TEMP_DIR/Arc_Backup/" 2>/dev/null
cp -R "$ARC_DATA/Arc Settings" "$TEMP_DIR/Arc_Backup/" 2>/dev/null
# アーカイブ作成
tar -czf "$BACKUP_FILE" -C "$TEMP_DIR" Arc_Backup
# 一時ディレクトリを削除
rm -rf "$TEMP_DIR"
echo "Arcの設定をバックアップしました: $BACKUP_FILE"
arc-restore.sh
#!/bin/bash
# Arcを終了
osascript -e 'tell application "Arc" to quit'
sleep 2
# バックアップ元ディレクトリ
BACKUP_DIR=~/Dropbox/ArcBackup
# 最新のバックアップファイルを取得
BACKUP_FILE=$(ls -t $BACKUP_DIR/arc_settings_*.tar.gz | head -1)
# バックアップファイルの存在確認
if [ -z "$BACKUP_FILE" ]; then
echo "バックアップファイルが見つかりません: $BACKUP_DIR/arc_settings_*.tar.gz"
exit 1
fi
echo "次のバックアップファイルから復元します: $BACKUP_FILE"
# 一時ディレクトリを作成
TEMP_DIR=$(mktemp -d)
# アーカイブを展開
tar -xzf "$BACKUP_FILE" -C "$TEMP_DIR"
# Arcのデータディレクトリ
ARC_DATA=~/Library/Application\ Support/Arc/User\ Data/Default
# 復元前に既存の設定をバックアップ
TIMESTAMP=$(date +%Y%m%d_%H%M%S)
BACKUP_BEFORE_RESTORE=~/ArcBackupBeforeRestore_$TIMESTAMP
mkdir -p "$BACKUP_BEFORE_RESTORE"
echo "既存の設定を $BACKUP_BEFORE_RESTORE にバックアップしています..."
# 既存の設定全体をバックアップ
if [ -d "$ARC_DATA" ]; then
cp -R "$ARC_DATA" "$BACKUP_BEFORE_RESTORE/" 2>/dev/null
fi
# 復元対象のディレクトリを一度削除してから復元(完全に上書きするため)
echo "バックアップから設定を復元しています..."
# 復元対象のディレクトリ/ファイルを削除
if [ -d "$ARC_DATA/Extensions" ]; then rm -rf "$ARC_DATA/Extensions"; fi
if [ -d "$ARC_DATA/Extension State" ]; then rm -rf "$ARC_DATA/Extension State"; fi
if [ -d "$ARC_DATA/Extension Rules" ]; then rm -rf "$ARC_DATA/Extension Rules"; fi
if [ -f "$ARC_DATA/Preferences" ]; then rm "$ARC_DATA/Preferences"; fi
if [ -f "$ARC_DATA/Secure Preferences" ]; then rm "$ARC_DATA/Secure Preferences"; fi
if [ -d "$ARC_DATA/Bookmarks" ]; then rm -rf "$ARC_DATA/Bookmarks"; fi
if [ -d "$ARC_DATA/Favicons" ]; then rm -rf "$ARC_DATA/Favicons"; fi
if [ -d "$ARC_DATA/Arc Spaces" ]; then rm -rf "$ARC_DATA/Arc Spaces"; fi
if [ -d "$ARC_DATA/Arc Settings" ]; then rm -rf "$ARC_DATA/Arc Settings"; fi
# 必要なディレクトリを作成
mkdir -p "$ARC_DATA"
# バックアップから設定を復元
cp -R "$TEMP_DIR/Arc_Backup/"* "$ARC_DATA/" 2>/dev/null
# 一時ディレクトリを削除
rm -rf "$TEMP_DIR"
echo "Arcの設定を復元しました"
echo "元の設定は $BACKUP_BEFORE_RESTORE に保存されています"

古いArcの拡張機能をリストアップして、拡張機能ページのリンク一覧のHTMLを出力するようにした。
#!/bin/bash
# Arcの拡張機能リストを生成するスクリプト
# Arcのデータディレクトリ
ARC_DATA=~/Library/Application\ Support/Arc/User\ Data/Default
# 拡張機能ディレクトリ
EXT_DIR="$ARC_DATA/Extensions"
# 出力ファイル
OUTPUT_FILE=~/Dropbox/settings/arc_extensions.html
# HTMLファイルのヘッダー
echo '<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Arc拡張機能リスト</title>
<style>
body { font-family: Arial, sans-serif; max-width: 800px; margin: 0 auto; padding: 20px; }
.extension { margin-bottom: 20px; padding: 10px; border: 1px solid #ddd; border-radius: 5px; position: relative; }
.name { font-weight: bold; font-size: 18px; margin-left: 40px; }
.id { color: #666; font-family: monospace; margin-left: 40px; }
.install-btn { display: inline-block; margin-top: 10px; margin-left: 40px; padding: 5px 10px; background: #4285f4; color: white; text-decoration: none; border-radius: 3px; }
.number { position: absolute; top: 10px; left: 10px; background: #f1f1f1; padding: 5px 10px; border-radius: 50%; font-weight: bold; }
</style>
</head>
<body>
<h1>Arc拡張機能リスト</h1>
<p>以下のリンクをクリックして拡張機能をインストールしてください。</p>' > $OUTPUT_FILE
# 拡張機能ディレクトリが存在するか確認
if [ ! -d "$EXT_DIR" ]; then
echo " <p>拡張機能ディレクトリが見つかりません。</p>" >> $OUTPUT_FILE
echo "</body></html>" >> $OUTPUT_FILE
echo "拡張機能ディレクトリが見つかりません: $EXT_DIR"
exit 1
fi
# カウンター初期化
counter=1
# 各拡張機能のIDとマニフェスト情報を取得
for ext_id in $(ls "$EXT_DIR"); do
if [ -d "$EXT_DIR/$ext_id" ]; then
# 最新のバージョンディレクトリを取得
version=$(ls -1 "$EXT_DIR/$ext_id" | sort -V | tail -1)
if [ -n "$version" ]; then
manifest_file="$EXT_DIR/$ext_id/$version/manifest.json"
if [ -f "$manifest_file" ]; then
# マニフェストからnameを取得
name=$(grep -o '"name": "[^"]*"' "$manifest_file" | head -1 | cut -d'"' -f4)
# __MSG_extName__形式の名前を処理
if [[ "$name" == *"__MSG_"* ]]; then
# _locales/en/messages.jsonからの名前取得を試みる
locale_file="$EXT_DIR/$ext_id/$version/_locales/en/messages.json"
if [ -f "$locale_file" ]; then
# メッセージキーを抽出 (__MSG_extName__から extName を取得)
msg_key=$(echo "$name" | sed -n 's/__MSG_\(.*\)__/\1/p')
# messagesファイルから該当するメッセージを取得
actual_name=$(grep -A 5 "\"$msg_key\"" "$locale_file" | grep "message" | head -1 | cut -d'"' -f4)
if [ -n "$actual_name" ]; then
name="$actual_name"
else
# 英語がなければ他の言語を試す
for lang_dir in $(ls "$EXT_DIR/$ext_id/$version/_locales/"); do
locale_file="$EXT_DIR/$ext_id/$version/_locales/$lang_dir/messages.json"
if [ -f "$locale_file" ]; then
actual_name=$(grep -A 5 "\"$msg_key\"" "$locale_file" | grep "message" | head -1 | cut -d'"' -f4)
if [ -n "$actual_name" ]; then
name="$actual_name"
break
fi
fi
done
fi
fi
# それでも名前が取得できなければ、拡張機能IDを使用
if [[ "$name" == *"__MSG_"* ]]; then
name="拡張機能 (ID: $ext_id)"
fi
fi
# Chrome Web Storeのリンクを生成
echo " <div class='extension'>
<div class='number'>$counter</div>
<div class='name'>$name</div>
<div class='id'>ID: $ext_id</div>
<a class='install-btn' href='https://chrome.google.com/webstore/detail/$ext_id' target='_blank'>インストール</a>
</div>" >> $OUTPUT_FILE
# カウンターを増やす
((counter++))
fi
fi
fi
done
# HTMLファイルのフッター
echo '</body>
</html>' >> $OUTPUT_FILE
echo "拡張機能リストを生成しました: $OUTPUT_FILE"
echo "このHTMLファイルを開いて、各拡張機能のインストールボタンをクリックしてください。"
echo "合計 $((counter-1)) 個の拡張機能が見つかりました。"

これで新PCでは
- Arcをインストール&ログイン(これでSpaceとブックマークは同期される)
- スクリプトで生成されたhtmlファイルを元に、拡張機能を1つ1つダウンロード
- 拡張機能の設定をする(Vimiumの設定ファイルをコピペしたりする)
- Arcの設定を手動でポチポチやる
- Ctrl + Mで過去開いたタブにアクセスできるようにする
- PIN(上部に固定表示されるブックマーク)の設定を手動でポチポチやる
って感じで一通り移行できそう。