Gemini-CLIをDockerコンテナ内で限定して動作させてみる


※ 当ページには【広告/PR】を含む場合があります。
2025/07/09
Vercelの生成AIサービス「v0」で簡単なWebページデザインを始めてみる
蛸壺の技術ブログ|Gemini-CLIをDockerコンテナ内で限定して動作させてみる



AI開発ツールの進化は日々目覚ましいものがあります。
個人的には(趣味も兼ねているので)まだまだ人力でのプログラミングでコツコツと作り上げていくスタイルがほとんどですが、数年後の状況を考えると、周りは皆、AIエージェントによる「Vibeコーディング」の全盛期を迎えるのかもしれません...。
もちろん、数年後のことは分からないのですが、来たるべき大きな潮流に、そのままその波に乗れるように少しづつVibeコーディングにも慣れておきたいものです。
で、今回はちょっと前からチラホラ話題となっているGoogleのコマンドラインベースのAIワークフローツール・
『Gemini CLI』 を個人的に使いこなすための方針づくりを防備録としてまとめた記事になります。


【無料ではじめる】Gemini CLI x Vibe Coding入門

NodejsコンテナにGemini-CLIを導入する



ここでのGemini-CLI開発環境構築の前提として、

            + ホストマシン(開発用パソコン等)にはNodejsをインストールさせたくない
+ Gemini-CLIはDocker内部で動作させ、グローバルインストールはしない

        

ということを念頭に進めていきます。
そもそもGemini-CLIには独自に「Sandbox」という機能モードが備わっていますが、ユーザーによるカスタマイズ性がイマイチです。
先にこのSandbox機能に関して軽く説明しておきましょう。

Gemini-CLIのSandbox



Gemini-CLIに限らず、AIエージェントにデスクトップでの様々な操作を行わせたい場合、心配になるのが、「AIがユーザーの意図を越えて好き勝手に色んなことをやってしまう」リスクです。
例えば、外部へ通信させてほしくない情報がAIの処理で漏れてしまったり、セキリュティ面で重要なクレデンシャル変数(.envなど)を編集して破壊してしまったり、様々な影響を与えてしまうおそれがあります。
そこで、このような影響をDockerなどのコンテナ技術を利用して、AIエージェントにアクセスできるファイルやプロセスの範囲を限定させる機能が
Sandbox(=砂場) です。
文字通り、子どもが遊べる場所が"砂場"の中だけで、その外では遊ばせないようにさせるイメージです。
一見すると便利に使えそうなサンドボックス機能ですが、ホストOSにNode.jsとDocker/Podmanをインストールし、その上でGemini-CLIをグローバルインストールしないと使えません。
つまり、DockerでNodeコンテナを起動させ、そのコンテナ内にGemini-CLIをインストールさせて使う場合、そもそも"サンドボックス化"しているので、Gemini-CLIのサンドボックス機能を使う必要がありません。

NodeコンテナにGemini-CLIをインストールする



話は逸れましたので、話を戻してNodeコンテナへGemini-CLIを導入していきます。
著者のホストマシーンですが、Debian Linuxを使っています。

            $ lsb_release -a
No LSB modules are available.
Distributor ID:	Debian
Description:	Debian GNU/Linux 12 (bookworm)
Release:	12
Codename:	bookworm

        

当然、Docker/Docker-Composeが動くこと前提です。 インストール方法は以下の記事内容を参考してください。

参考|Dockerインストール手順

適当なフォルダを作成し、そこにDocker関連のファイルを作成します。

            $ touch Dockerfile compose.yml .env

        

これらのファイルを以下の内容で編集しておきます。

            FROM node:24-bookworm-slim

RUN apt update && apt upgrade -y

RUN apt install curl -y

ENV PS1="[\u@\h:\w]$"

CMD ["bash"]

        
            services:
  app:
    image: gemini-cli-dev:node24
    build: .
    container_name: gemini-cli-dev
    user: "node:node"
    environment:
      NODE_ENV: ${NODE_ENV}
    volumes:
      - ./:/usr/src/app
    working_dir: "/usr/src/app"
    tty: true

        
            NODE_ENV=development

        

ファイルを編集したら、イメージをビルドさせてみます。

            $ docker compose build 

        

問題なくイメージがビルドできたら、コンテナを起動し、インタラクティブモードにアタッチし中に入って作業を進めます。

            $ docker compose up -d && docker compose exec app bash
#...コンテナ内にアタッチ

        

ここからは簡単なnodejsプロジェクトを作ります。
手動で
package.json ファイルを作るか、 yarn init で初期化すると package.json が作成されます。
適当だと以下のようなファイルで結構です。

            {
    "name": "my-gemini",
    "version": "0.0.1",
    "description": "To learn gemini-cli",
    "private": true,
    "scripts": {}
}

        

では待望のGemini-CLIをローカルインストールしましょう。

            $ yarn add -D @google/gemini-cli

        

npxコマンドでも良いのですが、ローカルインストールしたため、そのままだと
gemini コマンドが呼び出せません。
ここではyarnのサブコマンドとして利用する方式で、
package.json のスクリプトタグに追加しておきます。


            {
//...
    "scripts": {
        //👇追加
        "gemini": "gemini",
//...

        

さて、最初のGemini-CLI起動ですが、
--debug コマンドありで開始するのがポイントです。

            $ yarn gemini --debug

        

ここからは対話的な設定操作に入ります。

合同会社タコスキングダム|蛸壺の技術ブログ


まずは、CLIの外観を選ぶようです。 ここではDefaultにしておきます。
次に認証モードを選択します。


合同会社タコスキングダム|蛸壺の技術ブログ


3つほど選択肢がありますが、とりあえずご自身のGoogleアカウントで認証する
「Login with Google」 を選択しておきます。

合同会社タコスキングダム|蛸壺の技術ブログ


こちらのコンテナで、認証待ちを行わせている状態しておき、表示されたURLアドレスを適当なブラウザで開いてみましょう。


合同会社タコスキングダム|蛸壺の技術ブログ
合同会社タコスキングダム|蛸壺の技術ブログ


ご自身のGoogleアカウントでログインします。

合同会社タコスキングダム|蛸壺の技術ブログ


ログインすると、ブラウザからのリダイレクトに失敗します。
これは自作のコンテナの中から外部へ出した通信ですので、ホスト側のブラウザはDockerコンテナ内へ認証確認のレスポンスを戻すことがそもそもできません。
そこで、ブラウザにリダイレクトされたURL(図の枠で囲ったアドレス)をメモしておきます。
認証待ちのコンテナへレスポンスを受信させるために、トリッキーな方法ですが、同一のDockerネットワークを共有する別のコンテナを立ち上げます。
作業フォルダ内で別のターミナルを開き、同じDockerイメージから再びコンテナを起動し、アタッチします。

            #...新しいターミナルで
$ docker compose up -d && docker compose exec app bash
#...コンテナ内にアタッチ

        

そこで、Curlを使ってブラウザの変わりに先程メモしたURLにアクセスします。

            $ curl -v "http://localhost:36375/oauth2*****"
*   Trying 127.0.0.1:36375...
* Connected to localhost (127.0.0.1) port 36375 (#0)
> GET /oauth2callback?state=******** HTTP/1.1
> Host: localhost:36375
> User-Agent: curl/7.88.1
> Accept: */*
> 
< HTTP/1.1 301 Moved Permanently
< Location: https://developers.google.com/gemini-code-assist/auth_success_gemini
< Date: Mon, 07 Jul 2025 05:45:01 GMT
< Connection: keep-alive
< Keep-Alive: timeout=5
< Transfer-Encoding: chunked
< 
* Connection #0 to host localhost left intact

        

これで認証待ちにしていた方のターミナルを覗くと、

合同会社タコスキングダム|蛸壺の技術ブログ


というように認証が完了していればOKです。
なお、一度認証が済んだら、コンテナを停止しない限りは再ログインなしにGemini-CLIが使えます。

            $ yarn gemini

        

これで独自にカスタマイズしたNodeコンテナでもより柔軟にGemini-CLIが利用できるようになったと思います。




【無料ではじめる】Gemini CLI x Vibe Coding入門

Google AI StudioにアサインしてAPIキーを利用する



先程までで、Gemini-CLIの認証方法にGoogleアカウントを使うやり方を紹介していましたが、コンテナを起動するたびにブラウザを介してとても面倒なやり取りを行う必要が出てきます。
最初のうちは良いかもしれませんが、後々非常に煩わしい作業になること必至です。
またGemini-CLIの利用は基本的に無料ですが、使い込んで利用頻度が多くなると無料枠上限に達してしまいます。
より実務的な利用法を検討されている場合、無料枠を越えたら有料とはなるのですが、「Google AI Studio」でAPIを使う方式へ移行するほうが望ましいです。

参考|Google AI Studio

Google AI StudioのAPI(無料プラン)の発行はさほど時間を取ることはありません。
有料プラン版のAPIへアップグレードする場合には、Google Cloud Platformのアカウント登録と支払い方法の設定が必要になるので、必要とあらばそのときに検討されると良いでしょう。
無料プランのAPIを発行し、Gemini-CLIを使うところまで確認しておきましょう。

Google AI StudioでAPIキーを発行



まずはGoogleアカウントを使って
Google AI Studioのダッシュボード へログインするところからスタートです。
ログインできたらダッシュボードにある
[Get API key] をクリックします。


合同会社タコスキングダム|蛸壺の技術ブログ


次のページの
[APIキーを作成] もクリックします。

合同会社タコスキングダム|蛸壺の技術ブログ


APIの作成先となるGoogle Cloudのプロジェクトを選択、もしくはプロジェクトの新規作成を行います。

合同会社タコスキングダム|蛸壺の技術ブログ


ここでは既存のプロジェクトを指定しておきます。
しばらく待つとAPIが発行されます。

合同会社タコスキングダム|蛸壺の技術ブログ


これでAPIキーが無事発行されました。
なおこの時点では、Google Cloudプロジェクトで課金の請求先情報の設定をしていないので、無料プランのAPI扱いとなり、利用には制限が付きます。
APIが正常に発行されると、Google AI Studioのダッシュボードには紐付けされたGoogle Cloudプロジェクトが表示され、現在のAPIの利用状況と請求情報が確認できます。

合同会社タコスキングダム|蛸壺の技術ブログ


また、ダッシュボードの右下にある
[Open in Cloud Console] をクリックすると、Google Cloudプロジェクトのコンソール画面に飛ぶことができます。

合同会社タコスキングダム|蛸壺の技術ブログ


Google CloudプロジェクトにはAPIの設定などが確認できます。

合同会社タコスキングダム|蛸壺の技術ブログ


さらに、APIの有料プランへのアップグレードするための支払い方法の設定もこのコンソールから設定することができます。

合同会社タコスキングダム|蛸壺の技術ブログ


ここでは有料プランへのアップグレード手順は割愛します。


Nodeコンテナに設定を反映させる




では先程のAPIキーをコピーして、
.env ファイルに以下のように変数に反映させましょう。

            NODE_ENV=development
GEMINI_API_KEY=APIキーの値

        

この変数をコンテナ起動時に有効するため、
compose.yml も修正します。

            services:
  app:
    image: gemini-cli-dev:node24
    build: .
    container_name: gemini-cli-dev
    user: "node:node"
    environment:
      NODE_ENV: ${NODE_ENV}
      #👇追加
      GEMINI_API_KEY: ${GEMINI_API_KEY}
    volumes:
      - ./:/usr/src/app
    working_dir: "/usr/src/app"
    tty: true

        

これでGeminiで使う準備が整いました。
最後にDockerコンテナを立ち上げ、Gemini-CLIを実行してみましょう。

            $ docker compose up -d && docker compose exec app bash
#コンテナ内にアタッチ
$ yarn gemini

        
合同会社タコスキングダム|蛸壺の技術ブログ



これでいつでも認証済みの状態からGeminiを利用することが可能です。



【無料ではじめる】Gemini CLI x Vibe Coding入門

まとめ



今回はGemini-CLIをDockerコンテナの内部で利用する環境づくりについて考えてみました。
これでGemini-CLIのサンドボックス機能を使わなくても、独自にカスタマイズしたサンドボックス環境が柔軟に利用できるようになったはずです。
今後時間があればGemini-CLIの使い方などを気が向いたときに紹介していくかもしれません。