はじめに #
主に cline
を使い、gemini cli
と gemini code assist
をたまに使っていました。
cline
はVSCode拡張なので、画面が狭いよなー。って思ってました。(windowはfloatingできるので、それでもいいのですが)
最近 gemini cli
が一番いい感じがして統一したくなってきたので、よく調べてみようと思います。
ちなみに Gemini Code Assist
はなんか相性が悪い感じがしてあまり使っていません。
個人的に知れてよかったこと #
- プロジェクト設定のたたき台が作れて
/init
便利 web_fetch
とかread_file
とか 許可無しで行けて"autoAccept": true
便利!
でシェルモードに入れてls
とかできて便利- Geminiの出力をコピーできる
/copy
便利 /settings
がsettings.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
ordescriptions
- MCPサーバ及びツールの詳細を表示します
nodesc
ornodescriptions
- ツールの説明を表示せず名前だけ表示します
schema
- ツールの設定パラメータのためのJSONスキーマを表示します。
- 設定済みの MCPサーバの一覧を表示します
/memory
- AIの指導コンテキスト(
GEMINI.md
から読み込まれた階層的メモリ)を管理します。add
- AIに覚えておいてほしいことを伝えます
/memory add <覚えておいてほしいこと>
のように使用します
show
- メモリの内容を表示できます。これによりコンテキストのチェックができます。
refresh
- 最新の
GEMINI.md
からデータを再読込します。
- 最新の
- AIの指導コンテキスト(
/restore
- ツール実行前に戻します。
/restore [tool_call_id]
のように使用します。tool call id がない場合は利用可能なチェックポイントを表示します。
/settings
- Gemini CLIの設定を表示/変更するためのエディタを表示します。
.gemini/setting.json
を設定するのと同様ですが、検証とガイダンスを含みエラーを回避できます。
- Gemini CLIの設定を表示/変更するためのエディタを表示します。
/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_memory
で fact
を記録できます。
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.
:::
設定ガイド #
設定層と順番 #
小さい数字は大きな数字に上書きされます。(数字が大きいほうが優先度が高い)
- アプリにハードコードされた設定
- 現在のユーザ向けのグローバル設定(~/.gemini/settings.json)
- プロジェクトごとの設定(
/.gemini/settings.json) - システム全体の設定(情シスが全社員の設定を管理するなどに役立つ)
- 環境変数
.env
で設定されるなど - コマンドラインで渡された設定
システム設定ファイルの場所は以下。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.md
やAGENTS.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
: ウェブ検索を行うだけで、ユーザーのシステムには影響を与えません。2025-09-02修正。web_fetch
: 指定されたURLから情報を取得するだけで、ユーザーのシステムには影響を与えません。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
の出力のみサポートしているそうです
- Gemini CLIがツールを実行した際に出力される結果を、自動的に要約するかどう
かを設定するためのオプションです。便利そうですが、現在は
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
ファイルを読み込みます。読み込む順番は以下。
- 現在のディレクトリの
.env
- 1がない場合は rootまで
.env
ファイルを見つけるまで親を遡ります。rootは.git
フォルダあるいはホームフォルダです - 2もない場合は
~/.env
を探します
さいごに #
ひととおりドキュメントを読んでみました。
いくつか便利な使い方がわかりました。
徐々にcline
からgemini cli
に移行していきたいと思います。