docs(gemini): PLAN50 gemini の Vertex AI 強制をやめる設計 - #148
Conversation
containers/base/Dockerfile が .bashrc へ書く alias が、全コンテナで
GOOGLE_GENAI_USE_VERTEXAI=true を無条件に強制している。Vertex を使わない
プロジェクト (GOOGLE_CLOUD_PROJECT を空にした with-ai-dev /
project-trygroup-prd) でも Vertex 経路へ倒れる。実装は含めない。
- GOOGLE_GENAI_USE_VERTEXAI の設定箇所が alias 1 か所だけであることを確認した。
どの projects/*/env にも、secrets/global.env.age のキーにも無い
- Vertex は GOOGLE_CLOUD_PROJECT が無ければ呼べないため、その有無を判定に使う
- alias は引数を受け取れない ("$@" はシェルの位置パラメータ) ので関数にする
- 起動定義を Dockerfile のインライン echo から containers/base/ai-cli-aliases.sh
へ出し、tests/containers/ の既存方式で Docker 抜きに固定できるようにする
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01V9tinzTAbF1LVEYvfUgzKx
takemi-ohama
left a comment
There was a problem hiding this comment.
🤖 cross-review | round 1 | gemini | APPROVE
設計内容に論理的な破綻や既存仕様との矛盾は見られません。
- 「
GOOGLE_CLOUD_PROJECTが非空なら Vertex」という判定は、Vertex AI の必須要件と一致しており妥当です。 ${VAR+x}での判定は、ユーザーによる明示的な無効化(空文字での上書きなど)を正しく尊重できるため安全な設計です。- 提示されている AC1〜AC10 は想定される環境変数の組み合わせと既存定義の互換性を十分に網羅しています。
修正提案はありません。
takemi-ohama
left a comment
There was a problem hiding this comment.
🤖 cross-review | round 1 | codex | REQUEST_CHANGES
認証方式の判定を GOOGLE_CLOUD_PROJECT から分離し、Vertex を明示的に opt-in する設計へ変更してください。
PR #148 のレビュー指摘への対応と、"$@" を落とす要件の追加。 GOOGLE_CLOUD_PROJECT は gcloud・BigQuery など GCP 全般が共有するプロジェクト 指定であって、gemini の認証方式の opt-in ではない。これを判定に使うと、OAuth を 選んだ利用者が別の目的で同じ変数を設定した瞬間、意図せず Vertex へ倒れる。 起動定義から推論を無くし、GOOGLE_GENAI_USE_VERTEXAI だけで決める形にした。 - 判定が消えたためシェル関数は不要になり、alias のままにする - 起動定義が補っていた値を環境へ移す「移行」の節を追加した。共通機密へ GOOGLE_GENAI_USE_VERTEXAI=true を入れ、GOOGLE_CLOUD_PROJECT を空にしている 2 プロジェクトでは同じく空で打ち消す - 利用者の指示により、全 6 定義から "$@" を落とす受け入れ条件を追加した (AC5 / AC7)。alias の "$@" はシェルの位置パラメータに展開され、意図した 働きをしていない - 変更は「受け入れ条件の変更」節に取り消し線付きで残した Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01V9tinzTAbF1LVEYvfUgzKx
takemi-ohama
left a comment
There was a problem hiding this comment.
🤖 cross-review | round 2 | codex | REQUEST_CHANGES
移行手順に実行不能なコマンドがあり、検証手順にも新しい認証方式と矛盾する記述が残っています。
takemi-ohama
left a comment
There was a problem hiding this comment.
🤖 cross-review | round 2 | gemini | REQUEST_CHANGES
移行手順に記載されている devbase env set コマンドのフラグに誤りがあるため修正を提案します。
- devbase env set に -g は無い。`./bin/devbase env set --help` で確認したところ オプションは --project/-p だけで、指定なしが共通スコープ。移行手順の `env set -g ...` を `env set ...` に直し、スコープの指定方法を添えた - 手動確認の欄が旧設計 (GOOGLE_CLOUD_PROJECT による分岐) のままだったので、 GOOGLE_GENAI_USE_VERTEXAI の有無で経路を見る内容へ更新した。あわせて alias の定義に $@ が無いことも確認対象に入れた Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01V9tinzTAbF1LVEYvfUgzKx
takemi-ohama
left a comment
There was a problem hiding this comment.
🤖 cross-review | round 3 | codex | REQUEST_CHANGES
PR 本文の「主な設計判断」が、現在の計画と正反対の旧仕様(GOOGLE_CLOUD_PROJECT の有無による推論とシェル関数化)を記載したままです。実装判断とレビューを誤らせるため、本文を GOOGLE_GENAI_USE_VERTEXAI の環境設定をそのまま使うこと、alias を維持して "$@" を除くこと、既存 Vertex 利用者には移行が必要なことに更新してください。
takemi-ohama
left a comment
There was a problem hiding this comment.
🤖 cross-review | round 3 | gemini | REQUEST_CHANGES
PR 本文 (Description) と PLAN50_gemini-vertex-alias.md の内容に致命的な矛盾があります。PR 本文の「主な設計判断」では以下の旧仕様(または没案)が記載されたままになっています。
GOOGLE_CLOUD_PROJECTの有無で推論する- alias ではなくシェル関数にする
${VAR+x}で設定済みを判定する
これらはすべて PLAN50 内の「決定 1 (推論せず環境変数で明示的に選ぶ)」「決定 2 (alias のままにし、"$@" を落とす)」で明確に否定・変更されています。今後の実装や運用での判断を誤らせる原因となるため、PR 本文を現在の PLAN50 の内容に正しく更新してください。
takemi-ohama
left a comment
There was a problem hiding this comment.
🤖 cross-review | round 4 | codex | APPROVE
修正が必要な問題は見つかりませんでした。
takemi-ohama
left a comment
There was a problem hiding this comment.
🤖 cross-review | round 4 | gemini | APPROVE
内容を確認しました。設計・移行手順・テスト方針について修正の必要な点はありません。
概要
containers/base/Dockerfileが.bashrcへ書き込む alias が、全コンテナでGOOGLE_GENAI_USE_VERTEXAI=trueを無条件に強制しています。Vertex AI を使わないプロジェクトでも Vertex 経路へ倒れるため、これをやめる設計です。実装は含めません。利用者からの報告(with-ai-dev で gemini の Vertex 経由が使えない → OAuth へ切り替えたい)が発端です。
関連 Issue
なし(利用者からの直接の報告。この PR で issue は閉じません)
変更点
issues/PLAN50_gemini-vertex-alias.mdを追加(要求仕様 + 設計)調査で確定したこと
GOOGLE_GENAI_USE_VERTEXAIの設定箇所containers/base/Dockerfile:207)。どのprojects/*/envにも、secrets/global.env.ageのキーにも無いGOOGLE_CLOUD_PROJECTの出所secrets/global.env.age(値は nyle の GCP プロジェクト)with-ai-devとproject-trygroup-prdの 2 件devbase env setのスコープ指定--project/-pのみ。指定なしが共通スコープ(-gは存在しない)alias は「Vertex を使う」と決め打つ一方、Vertex に不可欠なプロジェクトはグローバルの機密が供給しています。プロジェクトを空にした環境では前提が崩れます。
主な設計判断
認証方式は起動定義で推論せず、環境変数で明示的に選びます。
GOOGLE_CLOUD_PROJECTは gcloud・BigQuery など GCP 全般が共有するプロジェクト指定であって、gemini の認証方式の opt-in ではありません。これを判定に使うと、OAuth を選んだ利用者が BigQuery などの目的で同じ変数を設定した瞬間、意図せず Vertex へ倒れます。起動定義はGOOGLE_GENAI_USE_VERTEXAIを一切設定せず、環境を素通しします。alias のままにし、
"$@"を落とします。 条件分岐を持たないためシェル関数にする必要はありません。alias は展開時に引数が末尾へ付くので、定義側の"$@"は不要です。現行の"$@"は alias の引数ではなくシェルの位置パラメータに展開されており、意図した働きをしていません。全 6 定義(claude/claudb/gemini/codex/kiro/agy)から落とします。起動定義を
containers/base/ai-cli-aliases.shへ出します。 インラインのecho >> ~/.bashrcはテストできません。tmux.confと同じくCOPYする資産にすれば、tests/containers/の既存方式(shell を直接 source する)で振る舞いを固定できます。この移動自体は振る舞いを変えないので、コミットを分けます。共通機密を認証方式の既定の置き場にします。
GOOGLE_CLOUD_PROJECT/GOOGLE_CLOUD_LOCATIONと同じ層に置きます。3 つは揃って初めて Vertex が成立するため、別々の層に散らすと片方だけを変えたときに壊れます。移行が要ります
この変更だけでは、いま Vertex を使っている環境が OAuth 側へ倒れます。 起動定義が補っていた値を環境の側へ移す必要があります。
devbase env set GOOGLE_GENAI_USE_VERTEXAI=truewith-ai-dev/project-trygroup-prdprojects/<name>/envへGOOGLE_GENAI_USE_VERTEXAI=を書いて共通の値を打ち消す(GOOGLE_CLOUD_PROJECT=と同じやり方)共通機密は利用者の環境にあり、リポジトリの差分では移せません。手順として計画に書き、実施状況を完了報告に残します(AC12)。
動作確認
設計だけの PR のためコード変更はありません。設計の裏付けとして次を実行しています。
grep -rn GOOGLE_GENAI_USE_VERTEXAI containers/ lib/ bin/で設定箇所が alias 1 か所だけであることを確認secrets/global.env.ageを復号してキー一覧にGOOGLE_GENAI_USE_VERTEXAIが無いこと、GOOGLE_CLOUD_PROJECT/GOOGLE_CLOUD_LOCATIONがあることを確認projects/*/envを走査し、プロジェクトを空にしている 2 件を特定.bashrcの alias とgcloud auth list(ohama.takemi@withjp.inc)を確認./bin/devbase env set --helpで移行コマンドのスコープ指定を確認./bin/devbase --helpが正常に動作する(コード変更なしのため未実施)補足
この修正はベースイメージの再ビルドとコンテナ再作成で初めて効きます。 稼働中のコンテナには反映されません。
レビューでは特に次を見ていただきたいです。
GOOGLE_CLOUD_PROJECTと同じ層へ揃える読みでよいか"$@"の除去による退行を止めるのに足りているか