Open9

Gemini CLIをDockerコンテナ内で使う

yulogyulog

下記に対する漠然とした不安・懸念があったため、Dockerコンテナ内での使用方法を調べた。

  • Node.js のインストール
  • Gemini CLI による意図しない操作(ファイルの書き換え等)
yulogyulog
  • OS: Windows
  • 事前準備: WSL、Docker
yulogyulog

ディレクトリ構成

Current Directory
├ .gemini\
├ update-notifier-@google\
├ work\
└ compose.yml
yulogyulog

compose.yml

services:

  nodegemini:
    image: node:lts
    container_name: node-gemini
    tty: true
    volumes:
    - ./work:/work
    - ./update-notifier-@google:/root/.config/configstore/update-notifier-@google
    - ./.gemini:/root/.gemini
    command: >
      sh -c "npm install -g @google/gemini-cli --force-immutable --no-update-notifier && bash"
    working_dir: /work
yulogyulog

毎回、コンテナ内で npm install しなくて済むようにGemini CLIのインストールもここで行う。
Node.js は使ったことがなかったが、npxで実行、npmでインストールできるらしい。
commandの部分で && bash としているのは、これがないと実行が終了してしまうため。ほかに良い方法があるのかも。

yulogyulog
# Windows側
# カレントディレクトリでの実行
# コンテナを起動
> docker-compose up -d
# コンテナに入る
> docker-compose exec nodegemini bash

# コンテナ側(#1)
# 初期設定と個人Googleアカウントでの認証
# 認証するときのみ `--debug` オプションを付ける
> gemini --debug
# 個人のGoogleアカウントを選ぶと認証用のURLが表示される
https://accounts.google.com/o/oauth2/v2/auth~~~

# Windows側
# URLをブラウザで開く
# ログインすると、`http://localhost~~~` のURLにリダイレクトされる

# コンテナ側(#2)
# 別のターミナルを開いて、コンテナに入る
> docker-compose exec nodegemini bash
# curlで開いて、少し待つ
> curl "http://localhost~~~"

# 元のbash(#1)で次の表示となれば完了
Authenticated via "oauth-personal".

認証方法の参考

yulogyulog

workフォルダの中にコードを置いて作業する。ほかのフォルダ内が変更される心配がない。
認証情報や設定もすべて保持されている(はず)。

yulogyulog

問題点

  • Gemini ロゴが公式のスクリーンショットのようなリッチなグラデーションにならない。
yulogyulog

compose.ymlに次を追加すると、完全なグラデーションになった。

environment:
    - COLORTERM=truecolor