メインコンテンツへスキップ

Gemini CLI を使い倒すためにドキュメントを読む

· loading · loading ·
kiitosu
著者
kiitosu
画像処理やデバイスドライバ、データ基盤構築からWebバックエンドまで、多様な領域に携わってきました。地図解析や地図アプリケーションの仕組みにも経験があり、幅広い技術を活かした開発に取り組んでいます。休日は草野球とランニングを楽しんでいます。
目次

はじめに
#

主に cline を使い、gemini cligemini code assist をたまに使っていました。 cline はVSCode拡張なので、画面が狭いよなー。って思ってました。(windowはfloatingできるので、それでもいいのですが)

最近 gemini cli が一番いい感じがして統一したくなってきたので、よく調べてみようと思います。

ちなみに Gemini Code Assist はなんか相性が悪い感じがしてあまり使っていません。

個人的に知れてよかったこと
#

  • プロジェクト設定のたたき台が作れて /init 便利
  • web_fetch とか read_file とか 許可無しで行けて "autoAccept": true 便利
  • ! でシェルモードに入れて ls とかできて便利
  • Geminiの出力をコピーできる /copy 便利
  • /settingssettings.json の編集に便利(一部設定だけしか対応してない)
  • カスタムコマンド便利そう(まだ使ったことない)
  • IDE連携する場合、今のところVSCodeの組み込みターミナルからは逃れられなくて残念

Geminiとは
#

2025/08/22現在の内容です

オープンソースのAIエージェントであり、ターミナルで動作します。

なぜ Gemini を選ぶのか。
#

  • 無料枠が多い:googleの個人アカウントで、1分辺り60リクエスト、位置インチあたり1000リクエストできる。
  • 1Mトークンを扱える強い Gemini 2.5 Pro が使える。
  • ビルドインツールが豊富
    • Google Search grounding
    • file 操作
    • シェルコマンド
    • web フェッチ
  • MCP機能拡張もできる
  • オープンソースです

インストール
#

ここは割愛します

リリースについて
#

  • Preview UTCで毎週火曜日の23:59に新しいプレビューリリースがあります。問題があるかもしれませんが、tag をつけることでインストールできます。
npm install -g @google/gemini-cli@preview
  • Stable UTCで毎週火曜日の20:00にリリースされます。先週の preview リリースにバグフィックスが入ったものです。
npm install -g @google/gemini-cli@latest
  • Nightly UTCで毎日00:00にリリースされます。main ブランチのコードを使っていて未検証の問題等を含みます。
npm install -g @google/gemini-cli@nightly

📋️ キーとなる機能
#

コードの理解と生成
#

  • 大規模なコードに対する問い合わせと変更をする
  • マルチモーダルな力でPDFやスケッチなどの画像から新しいアプリを作ります
  • 自然言語で問題を解決します

自動化と統合
#

  • プルリクエストを出したr複雑なリベースをしたりなどのタスクを自動化できます
  • imagen等のようにMCPサーバーで新しい力を追加できます
  • ワークフローのためにスクリプトで非対話的に動作できます

高度な機能
#

  • リアルタイムの情報を得るために、Google 検索を組み込んで検索します
  • 複雑なセッションを保存して再開するための会話チェックポイント
  • プロジェクトの動作をカスタマイズするためのカスタムコンテキストファイル(GEMINI.md)

Github統合
#

Gemini CLI GitHub ActionでGemini CLIをGitHubワークフロー見組み込みます

  • プルリクエストのレビュー:コンテキスト情報を加味した自動コードレビュー
  • イシューの選別:コンテンツの内容を解析して優先度ラベルを自動付与
  • 好きな時にアシスタント: イシューやプルリクエストで @gemini-cli でメンションするとデバッグ、説明、タスクの委譲などができる
  • カスタムワークフロー:チームニーズ居合わせたスケジュール及びオンデマンドのワークフロー実行

🔐 認証オプション
#

ニーズに合った認証方法を選択します。 こちらに詳細な情報があります。

1. OAuthログイン(Google Accountを使う)
#

個人開発及びGemini Code Assistライセンスを持っている方に最適。

  • メリット
    • 1分間あたり60、一日あたり1000回のリクエストが無料
    • Gemini 2.5 Proは1Mトークンのコンテキストウィンドウを持てる
    • API keyの管理が不要。Googleでログインするだけで良い。
    • いつでも最新のモデルに更新される

2.Gemini API Keyを使う
#

モデルを指定したり、有料アクセスができる方に最適。

  • メリット
    • 一日あたり100回は Gemini 2.5 Proが使える
    • モデル選択:Geminiの任意のモデルを選択できる
    • 使った分だけ課金される

Vertex AI
#

企業チームや製品ワークロードに最適。 メリット

  • 高度なセキュリティとコンプライアンス
  • スケーラブル
  • GCPと連携できる

📚️ ドキュメント
#

いっぱいあります!

Getting Started
#

コア機能
#

ルールと拡張
#

高度なトピック
#

設定とカスタマイズ
#

気になるところだけ読み込みます
#

コマンドリファレンス
#

/ @ ! で始まる特別なコマンドが組み込まれています。

スラッシュコマンド
#

組み込みコマンド
#

CLI自体のメタレベルなコントロールを提供します。

  • /bug
    • GeminiのGitHubにバグ報告をします。
  • /chat
    • 会話の記録や再開ができます。
    • サブコマンド
      • save:会話を記録します。<tag>を付ける必要があります。
        • /chat save <tag> のように使用します
        • /chat save でマニュアル保存した記録と自動で保存されるチェックポイントは異なります。
          • チェックポイントは .gemini/settings.json を使って設定するか gemini --checkpointing で有効化できます(デフォルトは無効です)。save は会話ログを戻る。チェックポイントはファイルを戻す。という違いがあります。
      • list:で保存された記録の一覧を見られます
        • /chat save list のように使用します
      • resume:会話の状態を戻します。
        • /chat resume <tag> のように使用します
      • delete:会話の状態を削除します。
        • /chat delete <tag> のように使用します
  • /clear
    • ターミナル上の表示がクリアになります。セッション情報については設定に応じて残ります。
  • /compress
    • チャットのコンテキストをサマライズします。これによりコンテキストを圧縮しトークンを節約します。
  • /copy
    • Gemini CLIの出力をクリップボードにコピーする
  • /directory (or /dir)
    • 複数ディレクトリをサポートするワークスペースディレクトリを管理する
      • /add
        • ワークスペースにディレクトリを追加する。パスは絶対パスでも相対パスでもあるいはホームディレクトリからのパスでも可。
        • /directory add <path1>, <path2> のように使用します
        • サンドボックスプロファイルを使う場合は無効なコマンドとなります。サンドボックスを使う時は --include-directories を使ってセッションを開始する必要があります。
      • show
        • /directory によって追加された、あるいは --include-directories で指定された全てのディレクトリが表示されます。
        • /directory show のように使用します
  • /editor
    • エディタを選択するダイアログを表示できます
  • /extensions
    • 全ての拡張機能のリストを表示します
  • /help (or /?)
    • コマンドヘルプを表示します
  • /mcp
    • 設定済みの MCPサーバの一覧を表示します
      • desc or descriptions
        • MCPサーバ及びツールの詳細を表示します
      • nodesc or nodescriptions
        • ツールの説明を表示せず名前だけ表示します
      • schema
        • ツールの設定パラメータのためのJSONスキーマを表示します。
  • /memory
    • AIの指導コンテキスト(GEMINI.md から読み込まれた階層的メモリ)を管理します。
      • add
        • AIに覚えておいてほしいことを伝えます
        • /memory add <覚えておいてほしいこと> のように使用します
      • show
        • メモリの内容を表示できます。これによりコンテキストのチェックができます。
      • refresh
        • 最新の GEMINI.md からデータを再読込します。
  • /restore
    • ツール実行前に戻します。
    • /restore [tool_call_id] のように使用します。tool call id がない場合は利用可能なチェックポイントを表示します。
  • /settings
    • Gemini CLIの設定を表示/変更するためのエディタを表示します。.gemini/setting.json を設定するのと同様ですが、検証とガイダンスを含みエラーを回避できます。
  • /stats
    • 現在のセッションの統計情報が觀られます。トークンの利用状況やキャッシュによるトークンの節約、セッションにかかった時間などです。
  • /theme
    • Gemini CLIのテーマを変更できます
  • /auth
    • 認証方法を変更するダイアログを開きます
  • /about
    • Gemini CLIの実行情報を表示します。issueを登録するときなどに使います。
  • /tools
    • 現在使用できるツールを表示します。desc で詳細な説明付き nodesc で説明無しの名前だけ、を指定できます。
  • /privacy
    • プライバシ規約を表示し、サービス向上のためのデータ収集に同意するかどうか選択ができます
  • /quit (or /exit)
    • Gemini CLIを終了します。
  • /vim
    • Gemini CLIでvimのような操作ができるようになります。トグルでON/OFFできます。
  • /init
    • 現在のディレクトリを解析して GEMINI.md ファイルを生成します。

カスタムコマンド
#

好みのプロンプトを保存して再利用できる仕組み。~/.gemini/commands/<project>/.gemini/commands/ のコマンドを利用できます。同じ名前のコマンドがある場合はプロジェクトのコマンドが使われます。

コマンドはディレクトリをネームスペースファイル名をコマンド名として定義されます。

  • ~/.gemini/commands/test.toml は /test コマンドになる
  • /.gemini/commands/git/commit.toml は /git:commit コマンドになる

特徴

  • .toml ファイルフォーマットである必要がある
  • prompt の記載が必要
  • オプションで description を追加すると /help で表示できる
  • 引数をつけられるる
  • デフォルト引数も設定できる
  • シェルコマンドを実行できる

アットマークコマンド
#

ファイルやディレクトリ及びgitの情報をGeminiとのプロンプトのコンテキストに含められます。 例

  • @path/to/your/file.txt 何が書かれてる?
  • @src/my_project/ ディレクトリのコードをサマって
  • @README.md って何?

シェルモードとパスするーコマンド
#

! プレフィクスをつければGemini CLIで直接システムのシェルに触ることができます。 ! だけを実行するとシェルモードに入れます。 シェルモードでは環境変数 GEMINI_CLI=1 が設定されます。

メモリ管理
#

save_memoryfact を記録できます。 save_memory(fact="Your fact here.") のように使います。

重要な事実を保存するだけに使用され、会話履歴などを残すものではありません。

IDE統合
#

VSCodeのターミナルでgeminiコマンドを叩くか、Cmd+Shift+P or Ctrl+Shift+P でコマンドパレットを開いた後に Gemini CLI: Run をすると組み込みターミナルでGemini CLIが起動します。

/ide enable でide統合を有効化 /ide disable でide統合を無効化 /ide status でide統合の状態を確認

できます。

:::message 残念ながらVSCode上のターミナルからじゃないと Gemini CLIは起動できないようです。むむむ・・・これだったらClineのままでもいいのか?

  • Message: IDE integration is not supported in your current environment. To use this feature, run Gemini CLI in one of these supported IDEs: [List of IDEs]
    • Cause: You are running Gemini CLI in a terminal or environment that is not a supported IDE.
    • Solution: Run Gemini CLI from the integrated terminal of a supported IDE, like VS Code.

:::

設定ガイド
#

設定層と順番
#

小さい数字は大きな数字に上書きされます。(数字が大きいほうが優先度が高い)

  1. アプリにハードコードされた設定
  2. 現在のユーザ向けのグローバル設定(~/.gemini/settings.json)
  3. プロジェクトごとの設定(/.gemini/settings.json)
  4. システム全体の設定(情シスが全社員の設定を管理するなどに役立つ)
  5. 環境変数 .env で設定されるなど
  6. コマンドラインで渡された設定

システム設定ファイルの場所は以下。GEMINI_CLI_SYSTEM_SETTINGS_PATH で上書きできます。

  • /etc/gemini-cli/settings.json (Linux)
  • C:\ProgramData\gemini-cli\settings.json (Windows)
  • /Library/Application Support/GeminiCli/settings.json (macOS).

設定項目
#

  • contextFileName (文字列及び文字列配列)
    • GEMINI.mdAGENTS.md などのコンテキストファイルの名前を指定します。
    • デフォルトは GEMINI.md です。
  • bugCommand (オブジェクト)
    • /bug コマンド実行時のデフォルトURLを指定します
  • fileFiltering (オブジェクト)
    • git連携できるファイルを検索機能のフィルタ
    • デフォルトは "respectGitIgnore": true, "enableRecursiveFileSearch": true
    • "respectGitIgnore": true.gitignore に記載のディレクトリは検索しない
    • "enableRecursiveFileSearch": false@ でファイル検索を再帰的に行わない
  • coreTools (文字列配列)
    • "ReadFileTool" 等のコアツールの利用を明示的に指定し、それ以外を制限するホワイトリスト。デフォルト全許可。
  • excludeTools (文字列配列)
    • こっちはブラックリスト。デフォルト全許可(指定なし)。
  • allowMCPServers (文字列配列)
    • 同じく MCPServer のホワイトリスト
  • excludeMCPServers (文字列配列)
    • こっちはブラックリスト。デフォルト全許可(指定なし)。
  • autoAccept (ブール値)
    • 安全だと思われるツールを自動実行するかどうか

    • 例) "autoAccept": true :::message 「autoAccept」で許可されるものをGemini CLIにきいてみました

      「安全だとされているツール」という場合、それはユーザーのシステムに副作用(変更)を与えないツールを指します。

      私の操作において、ユーザーの明示的な確認なしに自動実行することが「安全」だと考えられるのは、基本的に読み取り専用のツールです。

      autoAcceptで安全だと考えられるツール(読み取り専用)
      #

      これらのツールは、ファイルシステムや外部の状態を変更しないため、予期せぬシステムへの影響を与えるリスクが非常に低いです。

      • list_directory: ディレクトリの内容をリストするだけです。
      • read_file: ファイルの内容を読み取るだけです。
      • search_file_content: ファイルの内容を検索するだけです。
      • glob: ファイルパスを検索するだけです。
      • save_memory: 私自身の内部メモリに情報を保存するだけで、ユーザーのシステムには影響を与えません。
      • google_web_search: ウェブ検索を行うだけで、ユーザーのシステムには影響を与えません。
      • web_fetch: 指定されたURLから情報を取得するだけで、ユーザーのシステムには影響を与えません。 2025-09-02修正。web_fetchは自動実行されませんでした。

      autoAcceptで安全ではないツール(変更を伴う可能性のあるツール)
      #

      これらのツールは、ユーザーのシステムに不可逆な変更を与えたり、外部に影響を与えたりする可能性があるため、常にユーザーの明示的な確認が必要であり、autoAcceptは推奨されません。

      • write_file: ファイルを新規作成したり、既存のファイルを上書きしたりします。
      • replace: ファイルの内容を書き換えます。
      • run_shell_command: 任意のシェルコマンドを実行します。これにより、ファイルの削除、システムの変更、外部への通信など、あらゆる操作が可能になります。

      重要な注意点: たとえ読み取り専用のツールであっても、その出力内容が機密情報を含んでいたり、ユーザーの意図しない情報開示につながる可能性はゼロではありません。そのため、どのようなツールを実行する場合でも、ユーザーがその目的と結果を理解していることが最も重要です。 :::

  • theme (文字列)
    • 例: "theme": "GitHub"
  • vimMode (ブール値)
    • 例: "vimMode": true
  • sandbox (ブール値あるいは文字列)
    • true あるいは "docker" の時に gemini-cli-sandbox を使います。
  • toolDiscoveryCommand (文字列)
    • ツールを検索するシェルクスクリプトを追加します。
    • 例: "toolDiscoveryCommand": "bin/get_tools" bin/get_tools はツールのパスを返すスクリプトのパスを書くようです
  • toolCallCommand (文字列)
    • toolDiscoveryCommand で見つかったツールを使うためのスクリプトのパスを指定
  • mcpServer (オブジェクト)
    • MCPサーバへの接続設定 設定例)
    "mcpServers": {
      "myPythonServer": {
          "command": "python",
          "args": ["mcp_server.py", "--port", "8080"],
          "cwd": "./mcp_tools/python",
          "timeout": 5000,
          "includeTools": ["safe_tool", "file_reader"],
      },
      "myNodeServer": {
          "command": "node",
          "args": ["mcp_server.js"],
          "cwd": "./mcp_tools/node",
          "excludeTools": ["dangerous_tool", "file_deleter"]
      },
      "myDockerServer": {
          "command": "docker",
          "args": ["run", "-i", "--rm", "-e", "API_KEY", "ghcr.io/foo/bar"],
          "env": {
          "API_KEY": "$MY_API_TOKEN"
          }
      },
      "mySseServer": {
          "url": "http://localhost:8081/events",
          "headers": {
          "Authorization": "Bearer $MY_SSE_TOKEN"
          },
          "description": "An example SSE-based MCP server."
      },
      "myStreamableHttpServer": {
          "httpUrl": "http://localhost:8082/stream",
          "headers": {
          "X-API-Key": "$MY_HTTP_API_KEY"
          },
          "description": "An example Streamable HTTP-based MCP server."
      }
    }
    
  • checkpointing (オブジェクト)
    • checkpointを有効/無効化し会話のリストアを可能にする
    • デフォルト:{"enabled": false}
  • preferredEditor (文字列)
    • diffを見る時のエディタを設定します
  • telemetry (オブジェクト)
    • ログとメトリクスの送信先を設定します
  • usageStatisticsEnabled (オブジェクト)
    • Google で開発用途に使うデータのアップロードの設定
  • hideTips (ブール値)
    • CLIに表示されるTipsの表示を隠す
  • hideBanner (ブール値)
    • 起動時に表示される GEMINI の表示を隠す
  • maxSessionTurns (数字)
    • この数字を超えるとチャットは止まります。デフォルトは -1 で無限
  • summarizeToolOutput (オブジェクト)
    • Gemini CLIがツールを実行した際に出力される結果を、自動的に要約するかどう かを設定するためのオプションです。便利そうですが、現在は run_shell_command の出力のみサポートしているそうです
  • excludedProjectEnvVars (文字列配列)
    • 特定の環境変数をプロジェクトの .env ファイルからロードされる対象外にします。
    • 例)
      "excludedProjectEnvVars": ["DEBUG", "DEBUG_MODE", "NODE_ENV"]
      
  • includeDirectories (文字列の配列)
    • ワークスペースのコンテキストに含めたいパスを指定します。
    • 例)
      "includeDirectories": [
          "/path/to/another/project",
          "../shared-library",
          "~/common-utils"
      ]
      
  • loadMemoryFromIncludeDirectories (ブール値)
    • /memory refresh コマンドの動作を制御します。true の場合は上記で追加された全てのディレクトリのGEMINI.mdが読み込まれ、false の場合は現在のディレクトリのGEMINI.mdのみが読み込まれます
  • chatCompression (オブジェクト)
    • 自動あるいはマニュアルでチャット履歴の圧縮がされた時の設定
    • 会話履歴が contextPercentageThreshold を超えたら圧縮が実行されます
  • showLineNumbers (ブール値)
    • コードブロックに行番号を表示するかどうかを設定します
  • accessibility (オブジェクト)
    • screenReader とかのアクセシビリティに関する設定

環境変数と .env ファイル
#

Gemini CLIは自動的に .env ファイルを読み込みます。読み込む順番は以下。

  1. 現在のディレクトリの .env
  2. 1がない場合は rootまで .env ファイルを見つけるまで親を遡ります。rootは .git フォルダあるいはホームフォルダです
  3. 2もない場合は ~/.env を探します

さいごに
#

ひととおりドキュメントを読んでみました。 いくつか便利な使い方がわかりました。 徐々にclineからgemini cliに移行していきたいと思います。

Reply by Email

関連記事

HugoのGettingStartedやってみた。Github Pagesで静的サイトを公開する
· loading · loading
オープンテーブルフォーマットの相互運用について
· loading · loading
オープンテーブルフォーマットとは
· loading · loading