◉ANTIGRAVITY LABEN
記事一覧/連携・プラグイン
⬡ 連携・プラグイン/2026-07-08上級

Antigravity の OAuth トークンが OS キーリングに保存されるようになった—ヘッドレス運用で認証を崩さない設計

v2.2.1 で更新後の OAuth トークンが OS キーリングへ自動保存されるようになりました。デスクトップでは快適な一方、ヘッドレスのスケジュール実行では保管庫そのものが存在せず認証が崩れます。バックエンドの明示指定・安全なファイルフォールバック・保存場所ごとの生死確認までを設計します。

Antigravity377OAuth認証7キーリングヘッドレス自動化40

✦ プレミアム記事

デスクトップの Antigravity では一度ログインすれば数日間プロンプトが出ない。ところが同じアカウントで組んだサーバー側のスケジュール実行だけ、数時間おきに認証が切れて空振りする——この非対称に、しばらく首をかしげていました。

原因は権限でもネットワークでもなく、トークンをどこに置くかでした。v2.2.1 で、更新後の OAuth トークンは OS のキーリングへ自動保存されるようになっています。デスクトップではこれが効いて再認証が激減します。けれど端末も画面もないヘッドレスのサーバーには、その「キーリング」という保管庫がそもそも立ち上がっていないことがあります。保存しようとして黙って失敗し、次の起動ではトークンが見つからず、また最初から取り直す。この繰り返しが「数時間おきに切れる」の正体でした。

個人開発で Dolice Labs の複数サイトを無人で回している私にとって、この手の「デスクトップでは再現しない不具合」が一番やっかいです。手元では起きないので、ログを保管場所の視点で読み直すまで見当がつきませんでした。同じ静かな失敗に手を焼く方が、保管庫という視点を最初から持てるように、仕組みからヘッドレス向けの設計、そして本番運用での落とし穴の回避まで順にたどっていきます。

OS キーリングという保管庫の正体

まず、「キーリング」が具体的に何を指すのかを OS ごとに揃えておきます。ここが曖昧なままだと、対処が当て推量になります。

OS保管庫の実体アクセスの前提
macOSKeychain(login キーチェーン)ログインセッションが解錠されていること
WindowsCredential Locker(資格情報マネージャー)対話ユーザーのログオンセッション
Linux(デスクトップ)Secret Service(gnome-keyring / KWallet)D-Bus セッションと解錠済みの keyring デーモン
Linux(ヘッドレス)多くの場合、存在しないD-Bus セッションが立たず Secret Service に応答者がいない

要点は、macOS と Windows は「対話ログインしたユーザーのセッション」に強く結びついている点です。SSH で入っただけのシェルや、ログイン画面を通らずに起動する常駐サービスからは、同じユーザー名でも解錠済みのキーチェーンに手が届かないことがあります。

Linux のデスクトップでは Secret Service という共通規格があり、gnome-keyring や KWallet がその応答者として動きます。逆に言えば、その応答者がいない環境では、保存要求そのものが宛先を失うということです。ヘッドレスのサーバーやコンテナがまさにこれに当たります。

ヘッドレスでキーリングが消える瞬間

症状を分解します。無人のスケジュール実行で認証が崩れるとき、内部では次の順に事が起きています。

  1. エージェントがトークンを更新する(ここまでは成功する)
  2. 更新後のトークンを OS キーリングへ保存しようとする
  3. キーリング(Secret Service の応答者)が存在せず、保存が失敗する
  4. その失敗が致命傷として扱われず、実行はそのまま進む
  5. 次回の起動でキーリングを読みにいくが、当然何もない
  6. トークンが見つからず、再取得か、端末のない環境での再ログイン待ちに落ちる

厄介なのは 4 の「黙って進む」部分です。保存の失敗はしばしば警告どまりで、終了コードには表れません。以前に扱った、Antigravity CLI が無人実行中に 401 で止まるとき の「成功と記録されるのに中身が空」という現象と、根は同じ静かな失敗です。あちらがトークンの寿命の問題なら、こちらはトークンの置き場所の問題、という違いがあります。

まず、自分の実行環境に保管庫の応答者がいるかを確かめます。

#!/usr/bin/env bash
# 目的: Secret Service(キーリングの応答者)が実際に応答するかを判定する。
# いる/いないを最初に確定させないと、以降の対処が当て推量になる。
set -uo pipefail
 
has_secret_service() {
  # D-Bus セッションが無ければ、その時点で応答者はいない。
  [ -n "${DBUS_SESSION_BUS_ADDRESS:-}" ] || return 1
  # org.freedesktop.secrets が bus 上に存在するかを問い合わせる。
  command -v dbus-send >/dev/null 2>&1 || return 1
  dbus-send --session --dest=org.freedesktop.DBus \
    --type=method_call --print-reply \
    /org/freedesktop/DBus org.freedesktop.DBus.ListNames 2>/dev/null \
    | grep -q "org.freedesktop.secrets"
}
 
if has_secret_service; then
  echo "[keyring] Secret Service あり: OS キーリングを使えます"
else
  echo "[keyring] Secret Service なし: ヘッドレス向けの保管戦略へ切り替えます"
fi

この判定を「本処理の前」に置くのが肝心です。保存が失敗してから気づくのではなく、保管庫の有無を先に確定させてから経路を選ぶ。そうすることで、後段の分岐が推測ではなく事実に基づきます。

✦

ここまでお読みいただきありがとうございます。

この記事の続きを読む

この先には、実装コードやベンチマーク結果など、実務でお役に立てる内容をご用意しています。このサイトは広告を掲載しておらず、サーバーや開発にかかる費用はメンバーの皆様のご支援で成り立っています。もしお役に立てていましたら、ご支援いただけますと大変ありがたいです。

この記事で得られること
✦デスクトップでは動くのにサーバーのスケジュール実行だけ認証が切れる、という不可解な症状の原因を保管庫の視点から特定できるようになる
✦Secret Service の有無を判定してキーリングバックエンドを明示指定し、無い環境では権限を 0600 に絞ったファイルフォールバックへ安全に切り替える実装を今日から手元に持ち帰れる
✦複数マシンでエージェントを回すときにトークンを同期すべきか、という判断基準を運用の実体験から得られる
Stripe による安全な決済 · いつでもキャンセル可能
✦

この記事を購入する

この先の内容をすべてお読みいただけます。一度のご購入で、いつでも何度でもアクセスできます。このサイトは広告を掲載しておらず、皆さまのご支援がサーバー費用などの運営を支えています。

または
メンバーシップなら全記事が読み放題 →
シェア

お読みいただきありがとうございます

Antigravity Lab は広告なしで運営しており、サーバー費用などの運営コストはメンバーシップのご支援で賄っています。実装コード・ベンチマーク・本番設計パターンなど、実務でお役立ていただける記事を毎日更新しています。もし読んでよかったと感じていただけましたら、ぜひご覧ください。

  • ✦コピー&ペーストで使える実装コード付き
  • ✦毎日新しい上級ガイドを追加
  • ✦¥580/月 または ¥2,480 の永久アクセス
メンバーシップを見る →

関連記事

⬡ 連携・プラグイン2026-09-20
10月5日に止まる antigravity-preview-05-2026、差し替えで済む構成と済まない構成
antigravity-preview-05-2026 の停止日が10月5日に決まりました。公式が示すのは日付と後継名だけです。output_text だけを読む構成なら差し替えで終わり、steps を読む構成なら改修が要ります。その分かれ目を切り替え前に確かめる手順です。
⬡ 連携・プラグイン2026-09-18
MCP が欠けたまま始まったセッションを、どこで止めるか
MCP サーバーの初期化に失敗したまま始まったセッションで、エージェントは黙って別の手段に落ちます。ツールが本当に見えているかを手元で確かめる小さなスクリプトと、欠けていたときに取る三つの分岐をあらかじめ決めておく話です。
⬡ 連携・プラグイン2026-09-12
Antigravity CLI 1.1.28 で print-timeout 超過が成功終了になりました — 無人実行の判定を見直す
1.1.28 から --print-timeout の超過は例外ではなく、部分出力を返しての正常終了になりました。外部 URL の取得も既定で承認待ちです。終了コードだけで成否を決めている無人実行を、どう組み直したかを書き残します。
📚RECOMMENDED BOOKS
大規模言語モデル入門
山田育矢
LLM開発
生成AIプロンプトエンジニアリング入門
我妻幸長
プロンプト
Claude CodeによるAI駆動開発入門
平川知秀
AI駆動開発
※ アフィリエイトリンクを含みます