Skip to content

fix(container): gemini の Vertex AI 強制をやめ、起動定義をファイルへ出す - #149

Merged
takemi-ohama merged 1 commit into
mainfrom
fix/gemini-alias-vertex
Sep 3, 2026
Merged

takemi-ohama merged 1 commit into
mainfrom
fix/gemini-alias-vertex

Conversation

@takemi-ohama

Copy link
Copy Markdown
Contributor

概要

containers/base/Dockerfile が .bashrc へ書き込む alias が、全コンテナで GOOGLE_GENAI_USE_VERTEXAI=true を無条件に強制していました。Vertex AI を使わないプロジェクトでも Vertex 経路へ倒れ、gemini が使えなくなります。

設計は #148 でレビュー済みです。詳細は issues/PLAN50_gemini-vertex-alias.md を参照してください。

関連 Issue

なし(利用者からの直接の報告)。設計 PR: #148

変更点

1. 起動定義を containers/base/ai-cli-aliases.sh へ出した

Dockerfile 側は COPY と .bashrc からの読み込み 1 行だけになりました。インラインの echo ... >> ~/.bashrc はテストできず、Dockerfile の文字列を grep するテストは振る舞いを固定しません。tmux.conf と同じ COPY する資産にしています。

2. gemini から GOOGLE_GENAI_USE_VERTEXAI の前置を落とした

認証方式は環境の同変数で選びます。GOOGLE_CLOUD_PROJECT の有無で推論しません。 これは gcloud や BigQuery でも使うプロジェクト指定であって認証方式の opt-in ではなく、OAuth を選んだ利用者が別の目的で設定した瞬間 Vertex へ倒れるためです(#148 のレビュー指摘)。

設定 経路
GOOGLE_GENAI_USE_VERTEXAI=true Vertex AI
未設定・空 ~/.gemini/settings.json の selectedType(OAuth など)

3. 全 6 定義から "$@" を落とした

alias の "$@" は alias の引数ではなくシェルの位置パラメータへ展開されるため、引数を渡す働きをしていません。引数は alias の展開で末尾へ付きます。

4. claudb に command を挟んだ(範囲を広げた判断)

挟まないと claude の alias まで展開され、--dangerously-skip-permissions が 2 度渡ります。実コンテナで再現を確認しました。

$ claudb            # 修正前(claude をスタブ化して確認)
ARGS:--dangerously-skip-permissions --dangerously-skip-permissions

書き換えている行そのものが原因で、放置するとテストが重複を「正」として固定するため範囲に入れました。理由は計画ファイルの「範囲を広げた判断」に記録しています。

5. テスト 37 件(tests/containers/test_ai_cli_aliases.py)

shopt -s expand_aliases して定義を source し、PATH の先頭に置いたスタブが受け取る引数と環境を突き合わせます。Docker には依存しません(既存の test_entrypoint_*.py と同じ方式)。

移行(実施済み)

この変更だけでは、いま Vertex を使っている環境が OAuth 側へ倒れます。 起動定義が補っていた値を環境へ移しました。

対象 実施内容 確認
共通 devbase env set GOOGLE_GENAI_USE_VERTEXAI=true 解決結果が 'true'
with-ai-dev / project-trygroup-prd env へ GOOGLE_GENAI_USE_VERTEXAI= を追記して打ち消し with-ai-dev の解決結果が []

projects/*/env の実体は devbase-ext リポジトリにあるため、この PR には含まれません。 別途そちらへ反映が要ります。

動作確認

段階 コマンド 結果
限定的な検証 uv run pytest tests/containers/test_ai_cli_aliases.py -q 37 passed / exit=0
全体テスト uv run pytest tests/ -q 1786 passed / exit=0
静的解析 shellcheck --severity=error --shell=bash containers/base/ai-cli-aliases.sh 指摘なし
静的解析 shellcheck --severity=error bin/devbase / ruff check --select=E9,F63,F7,F82 lib 指摘なし
構文検査 python -m compileall -q lib bin exit=0
  • 影響を受けるコマンドの主要シナリオを確認した(6 定義すべての引数の届き方と前置される環境をテストで固定)
  • 必要に応じてドキュメント (docs/user/container-operations.md) を更新した
  • ローカルで ./bin/devbase --help が正常に動作する
  • CI が green である

未検証: 実コンテナでの動作。この修正はベースイメージの再ビルドとコンテナ再作成で初めて効きます。 リリース後テストで確かめます。

補足

レビューでは特に次を見ていただきたいです。

  1. claudb への command の追加(範囲を広げた判断)。この PR に含めてよいか
  2. テストが実行行だけを見る _statements() の扱い。「書かない」ことを確かめる assertion がコメントに反応しないようにしている
  3. .bashrc から /etc/devbase/ai-cli-aliases.sh を読む形。非対話シェルへの影響が無いか

containers/base/Dockerfile が .bashrc へ書く alias が、全コンテナで
GOOGLE_GENAI_USE_VERTEXAI=true を無条件に強制していた。Vertex を使わない
プロジェクト (GOOGLE_CLOUD_PROJECT を空にした with-ai-dev /
project-trygroup-prd) でも Vertex 経路へ倒れ、gemini が使えなくなる。

- 起動定義を containers/base/ai-cli-aliases.sh へ出し、Dockerfile は COPY と
  .bashrc からの読み込み 1 行だけにした。インラインの echo はテストできない
- gemini から GOOGLE_GENAI_USE_VERTEXAI の前置を落とした。認証方式は環境の
  同変数で選ぶ。GOOGLE_CLOUD_PROJECT は gcloud や BigQuery でも使う変数であり
  認証方式の opt-in ではないため、推論には使わない
- 全 6 定義から "$@" を落とした。alias の "$@" は alias の引数ではなく
  シェルの位置パラメータへ展開され、引数を渡す働きをしていない
- claudb に command を挟んだ。挟まないと claude の alias まで展開され
  --dangerously-skip-permissions が 2 度渡る (実コンテナで再現を確認)
- Docker を起動せず振る舞いを固定するテストを 37 件追加した

移行 (実施済み): 共通へ GOOGLE_GENAI_USE_VERTEXAI=true を設定し、Vertex を
使わない 2 プロジェクトの env で空に打ち消した。projects/*/env は
devbase-ext リポジトリの実体のため、この PR には含まれない。

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01V9tinzTAbF1LVEYvfUgzKx

@takemi-ohama takemi-ohama left a comment

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🤖 cross-review | round 1 | codex | APPROVE

修正必須の指摘はありません。

@takemi-ohama takemi-ohama left a comment

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🤖 cross-review | round 1 | gemini | APPROVE

PRの目的に沿った適切な修正です。claudb への command 追加による二重展開の防止、非対話シェルへの影響がないこと、テストの簡潔な実装についても妥当であることを確認しました。

@takemi-ohama takemi-ohama left a comment

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🤖 cross-review | round 1 | gemini | APPROVE

PRの差分および仕様を確認しました。修正提案はありません。

@takemi-ohama
takemi-ohama merged commit ea79b8d into main Sep 3, 2026
5 checks passed
@takemi-ohama
takemi-ohama deleted the fix/gemini-alias-vertex branch September 3, 2026 01:20
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant