🐋

C# プロジェクトで Gemini CLI を使う

に公開

C# プロジェクトで Gemini CLI のサンドボックス環境を構築する方法です。

sandbox.Dockerfile

  • ユーザー名 node は Gemini 側でハードコードされているので変更不可
  • Debian の方が軽くて良いです
    • 1 GB に収まります
    • ただし apt-get で .NET 環境のインストールが出来ないので対応する必要アリ
    • Ubuntu は 1.7 GB
  • 環境変数 BUILD_SANDBOX使いません
    • セットアップが特殊なのでコンテナイメージとして固めてしまいます
## ベースイメージとして最新のDebianを使用
#FROM public.ecr.aws/docker/library/debian:bookworm-slim

## .NET 環境を apt-get するなら必要
FROM ubuntu:latest

# 必要なパッケージ、Node.js、gemini-cli、uvをインストールし、不要ファイルを削除
# 各処理の内容を詳細にコメントしています
RUN set -eux; \
    \
    # 1. パッケージリストの更新とシステムのアップグレード
    apt-get update -y; \
    apt-get upgrade -y; \
    \
    # 2. 必要なパッケージのインストール
    apt-get install -y --no-install-recommends \
        curl \
        ca-certificates \
        git \
        npm \
        ; \
    \
    # # 3. Node.js 24.x のインストール(公式スクリプトを利用)
    ### curl -fsSL https://deb.nodesource.com/setup_24.x | bash -; \
    ### apt-get install -y --no-install-recommends nodejs; \
    npm install -g --omit=dev node; \
    \
    # 4. gemini-cli をグローバルインストール(dev依存は除外)
    npm install -g --omit=dev @google/gemini-cli; \
    \
    # 5. uv をインストール(公式スクリプトのためcurl | shを許容)
    export UV_INSTALL_DIR=/usr/local/bin; \
    curl -LsSf https://astral.sh/uv/install.sh | sh; \
    \
    # 6. 不要なキャッシュ・一時ファイル・npmキャッシュを削除し、イメージを軽量化
    apt-get clean; \
    apt-get autoremove -y; \
    rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* ~/.npm;

# .NET SDK
RUN set -eux; \
    \
    # Add Microsoft package signing key
    apt update; \
    apt install -y lsb-release; \
    ###curl -LO https://packages.microsoft.com/config/ubuntu/$(lsb_release -cs)/packages-microsoft-prod.deb; \
    curl -LO https://packages.microsoft.com/config/ubuntu/22.04/packages-microsoft-prod.deb; \
    dpkg -i packages-microsoft-prod.deb; \
    rm packages-microsoft-prod.deb; \
    \
    apt-get install -y dotnet-sdk-8.0; \
    # Clear caches
    apt-get clean; \
    apt-get autoremove -y; \
    rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* ~/.npm;

ENV DOTNET_CLI_UI_LANGUAGE=en
ENV DOTNET_NOLOGO=true
ENV DOTNET_SKIP_FIRST_TIME_EXPERIENCE=true

# uvのキャッシュディレクトリを環境変数で指定
ENV UV_CACHE_DIR=/tmp/gemini-cli-cache-uv

# user name is hardcoded in gemini-cli
RUN  useradd -m node
USER node

ビルド&実行方法

最後の . も必要です。-t gemini は好きな名前に変更可。

docker build -t gemini -f sandbox.Dockerfile .

RUN はキャッシュが効いてしまうので、Gemini CLI を更新したい場合は以下を実行します。

docker build --no-cache -t gemini -f sandbox.Dockerfile .

使うときは --sandbox-image-t で指定した名前を渡します。

gemini -s --sandbox-image gemini

参考

いつもありがとうございます。

https://zenn.dev/akring/articles/8189d65516245c

以上です。お疲れ様でした。

Discussion