アカウントバックアップと移行:インポート/エクスポート、V1/DB ホットマイグレーション
あなたが実際に「バックアップ」したいのは、クォータ数字ではなく、アカウントを再度ログインさせることができる refresh_token です。このレッスンでは、Antigravity Tools の複数の移行方法を明確に説明します:JSON インポート/エクスポート、state.vscdb からのインポート、V1 データディレクトリからのインポート、自動同期の動作方法。
学習後にできること
- アカウントプールを JSON ファイルとしてエクスポートする(email + refresh_token のみ含む)
- 新しいマシンでこの JSON をインポートし、アカウントプールを迅速に復元する
- Antigravity/IDE の
state.vscdbから「現在ログイン中のアカウント」を直接インポートする(デフォルトパスとカスタムパスをサポート) - V1 データディレクトリから自動的にスキャンし、古いアカウントをインポートする
- 「現在アカウントの自動同期」が実際に何をするか、いつスキップされるかを理解する
現在の課題
- システム再インストール/マシン変更後、アカウントプールを再度追加する必要があり、コストが高い
- Antigravity/IDE でログインアカウントを切り替えたが、Manager 内の「現在のアカウント」が変更されていない
- 以前 V1/スクリプト版を使用しており、古いデータファイルしか持っておらず、直接移行できるかわからない
いつこの方法を使用するか
- アカウントプールを別のマシン(デスクトップ/サーバー/コンテナ)に移動したい場合
- Antigravity を「権威あるログイン入口」とし、Manager が現在のアカウントを自動的に同期してほしい場合
- 旧バージョン(V1 データディレクトリ)からアカウントを移動したい場合
🎒 開始前の準備
- Antigravity Tools を開くことができ、アカウントプールに少なくとも 1 つのアカウントがある
- アカウントデータが機密情報であることを知っている(特に
refresh_token)
セキュリティ提醒:バックアップファイルをパスワードとして扱う
エクスポートされた JSON ファイルには refresh_token が含まれています。これを入手した人は誰でも、それを使用して access token を更新できる可能性があります。バックアップファイルをクラウドストレージのパブリックリンクにアップロードしたり、グループに送信したり、Git にコミットしたりしないでください。
コアアイデア
Antigravity Tools の「移行」は本質的に2つのことです:
- 使用可能な
refresh_tokenを見つける - それを使用して access token を取得し、Google から実際のメールアドレスを取得し、アカウントをローカルアカウントプールに書き込む
3 つのエントリを提供します:
- JSON インポート/エクスポート:「制御可能なバックアップ」を明確に行いたい場合に適している
- DB インポート:Antigravity/IDE のログイン状態を権威あるソースとみなす場合に適している(デフォルトで
state.vscdbを検索し、手動ファイル選択もサポート) - V1 インポート:古いデータディレクトリから自動的にスキャンし、移行する場合に適している
さらに「自動同期」があります:DB 内の refresh_token を定期的に読み取り、Manager の現在のアカウントと異なる場合、自動的に DB インポートを実行します。同じ場合はスキップします(トラフィックを節約)。
手順に従って進める
ステップ 1:アカウントプールをエクスポートする(JSON バックアップ)
なぜ これが最も安定した、制御可能な移行方法です。ファイルを 1 つ入手するだけで、別のマシンでアカウントプールを復元できます。
操作:Accounts ページに入り、エクスポートボタンをクリックします。
- 設定で
default_export_pathを設定している場合、エクスポートは直接そのディレクトリに書き込まれ、ファイル名はantigravity_accounts_YYYY-MM-DD.jsonになります。 - デフォルトディレクトリを設定していない場合、システム保存ダイアログが表示され、パスを選択できます。
エクスポートファイルの内容は次のようになります(配列内の各項目は必要なフィールドのみ保持):
[
{
"email": "alice@example.com",
"refresh_token": "1//xxxxxxxxxxxxxxxxxxxxxxxx"
},
{
"email": "bob@example.com",
"refresh_token": "1//yyyyyyyyyyyyyyyyyyyyyyyy"
}
]次のように表示されます:ページでエクスポート成功が通知され、保存パスが表示されます。
ステップ 2:新しいマシンで JSON をインポートする(アカウントプールを復元)
なぜ インポートは「アカウント追加」ロジックを個別に呼び出し、refresh_token を使用して実際のメールアドレスを取得し、アカウントプールに書き込みます。
操作:引き続き Accounts ページで、「Import JSON」をクリックし、エクスポートしたファイルを選択します。
形式要件は次のとおりです(少なくとも 1 つの有効なレコードを含む必要があります):
- JSON 配列である必要があります
refresh_tokenを含み、1//で始まる項目のみがインポートされます
次のように表示されます:インポート完了後、アカウントリストにインポートされたアカウントが表示されます。
Proxy を実行中にインポートする場合
「アカウント追加」が成功するたびに、バックエンドはリバースプロキシのトークンプールのリロードを試み、新しいアカウントを即座に有効にします。
ステップ 3:state.vscdb から「現在ログイン中のアカウント」をインポートする
なぜ バックアップファイルを管理したくなく、「Antigravity/IDE のログイン状態を基準にしたい」だけの場合があります。DB インポートはこのシナリオ用です。
操作:Accounts ページに入り、Add Account をクリックし、Import タブに切り替えます:
- 「Import from Database」をクリック(デフォルト DB パスを使用)
- または「Custom DB (state.vscdb)」をクリックし、
*.vscdbファイルを手動で選択
デフォルトの DB パスはクロスプラットフォームです(--user-data-dir または portable mode も優先的に識別されます):
~/Library/Application Support/Antigravity/User/globalStorage/state.vscdb%APPDATA%\Antigravity\User\globalStorage\state.vscdb~/.config/Antigravity/User/globalStorage/state.vscdb次のように表示されます:
- インポート成功後、このアカウントは Manager の「現在のアカウント」に自動的に設定されます
- システムは自動的にクォータ更新を 1 回トリガーします
ステップ 4:V1 データディレクトリから移行する(旧バージョンインポート)
なぜ 以前 V1/スクリプト版を使用していた場合、Manager は古いデータディレクトリを直接スキャンし、インポートを試みることができます。
操作:Import タブで、「Import V1」をクリックします。
ホームディレクトリの下でこのパス(およびその中のインデックスファイル)を検索します:
~/.antigravity-agent/
- antigravity_accounts.json
- accounts.json次のように表示されます:インポート完了後、アカウントがリストに表示されます。インデックスファイルが見つからない場合、バックエンドはエラー V1 account data file not found を返します。
ステップ 5(オプション):「現在アカウントの自動同期」を有効にする
なぜ Antigravity/IDE でログインアカウントを切り替える際、Manager は固定間隔で DB 内の refresh_token が変更されたかどうかを検出し、変更があれば自動的にインポートできます。
操作:Settings に入り、auto_sync を有効にし、sync_interval を設定します(単位:秒)。
次のように表示されます:有効にすると、即座に 1 回の同期が実行されます。その後、間隔に従って定期的に実行されます。DB 内の refresh_token が現在のアカウントと同じ場合、スキップされ、重複インポートされません。
チェックポイント ✅
Accountsリストにインポートされたアカウントが表示されます- 「現在のアカウント」が期待するものに切り替わっているのが確認できます(DB インポートは自動的に現在に設定します)
- Proxy を起動すると、新しくインポートされたアカウントが正常にリクエストに使用できます(実際の呼び出し結果に基づきます)
トラブルシューティング
| シナリオ | 間違ったやり方(❌) | 推奨されるやり方(✓) |
|---|---|---|
| バックアップファイルのセキュリティ | エクスポートされた JSON を通常の設定ファイルとして手放しに配布する | JSON をパスワードとして扱い、伝播範囲を最小限にし、パブリックネットワークへの露出を避ける |
| JSON インポート失敗 | JSON が配列ではない、または refresh_token に 1// 接頭辞がない | プロジェクトからエクスポートされた JSON をテンプレートとして使用し、フィールド名と構造を一致させる |
| DB インポートでデータが見つからない | Antigravity がログインしていない、または DB に jetskiStateSync.agentManagerInitState が不足している | 最初に Antigravity/IDE がログインしていることを確認し、インポートを再試行する。必要に応じて Custom DB で正しいファイルを選択する |
| V1 インポート後、アカウントが使用不可 | 古い refresh_token が無効 | そのアカウントを削除し、OAuth/新しい refresh_token で再度追加する(エラー通知に基づく) |
| auto_sync が頻繁すぎる | sync_interval を小さく設定し、頻繁に DB をスキャンする | 「状態追従」とみなし、受け入れ可能な頻度に間隔を設定する |
このレッスンのまとめ
- JSON エクスポート/インポートは最も制御可能な移行方法:バックアップファイルには
email + refresh_tokenのみが含まれる - DB インポートは「Antigravity/IDE の現在ログインアカウントを基準とする」場合に適しており、自動的に Manager の現在のアカウントに設定される
- V1 インポートは
~/.antigravity-agentをスキャンし、複数の旧形式と互換性がある - auto_sync は refresh_token を比較し、同じ場合はスキップし、重複インポートしない
次のレッスン予告
次のレッスンでは、「移行後のアカウントプール」を実際に使用します:ローカルリバースプロキシを起動し、最初のクライアントを接続する(/healthz + SDK 設定)。
学びます:
- Proxy を起動/停止し、
/healthzで最小限の検証を行う方法- SDK/クライアントで Base URL を設定する方法
付録:ソースコード参照
クリックしてソースコードの場所を表示
更新日時:2026-01-23
| 機能 | ファイルパス | 行番号 |
|---|---|---|
Accounts エクスポート/インポート JSON(save_text_file / read_text_file) | src/pages/Accounts.tsx | 458-578 |
| Dashboard でアカウント JSON をエクスポート | src/pages/Dashboard.tsx | 113-148 |
| Import タブ:DB インポート / Custom DB / V1 インポートボタン | src/components/accounts/AddAccountDialog.tsx | 491-539 |
| アカウント追加:フロントエンド email を無視、refresh_token を使用して実際のメールアドレスを取得し、自動クォータ更新、Proxy ホットリロード | src-tauri/src/commands/mod.rs | 19-60 |
| --- | --- | --- |
DB インポート:state.vscdb から refresh_token を抽出(ItemTable + base64 + protobuf) | src-tauri/src/modules/migration.rs | 192-267 |
| --- | --- | --- |
| DB インポート後、自動的に「現在のアカウント」に設定し、クォータを更新 | src-tauri/src/commands/mod.rs | 495-511 |
| auto_sync:refresh_token を比較し、同じ場合はスキップ、変更がある場合は DB インポートをトリガー | src-tauri/src/commands/mod.rs | 532-564 |
フロントエンドバックグラウンドタスク:sync_interval に従って定期的に syncAccountFromDb() を呼び出し | src/components/common/BackgroundTaskRunner.tsx | 43-72 |