🌟

GeminiCLIを使いこなそう!

に公開

Gemini CLIを使いこなそう!

Gemini CLIとは?
Gemini CLI(Command Line Interface)は、Google Geminiをコマンドラインから操作するためのオープンソース・ツールです。これにより、GeminiのAI機能をターミナルを通じて利用できるようになります。

Gemini CLIを以下のようなタスクに利用できます

コード生成:Gemini CLIにはコード生成エージェント(Geminiベース)が含まれているためアプリの開発、編集、テスト、デプロイなどのタスクに使えます

マルチステップタスクの実行:Gemini CLIに含まれている様々のツールを利用しマルチステップタスクを実行可能です。

グーグル検索:Gemini CLIにはグーグル検索ツールが含まれているため、コンソールの中から検索が可能です。

OSツールの実行:自然言語でOSツール(curl, grep, sed, pythonなど)のコマンドライン・ツールを利用し様々なタスクを実行

インストール

Gemini CLIをインストールするにはNodejs18+が必要です。Nodejsがインストールされたら以下のコマンドでGemini CLIをインストールします

npm install -g @google/gemini-cli

以下のコマンドでバージョン更新することができます

sudo npm update -g @google/gemini-cli

以下のコマンドを利用しGemini CLIを起動します

gemini

認証

Gemini CLIを利用するにはGemini APIへのアクセスが必要で、そのため事前に認証しておきます。認証は3つの方法があります

Googleで認証:コンソールで/authを実行すると認証のオプションが出ます、オプションの中から「Login with Google」を選定します。その後ブラウザでGoogleの認証画面が表示され、ログイン完了したらコンソール側も認証完了となります。これで認証完了ですが実際にGemini CLIを使うにはGoogle Cloudのプロジェクトを指定することが必要です。一旦コンソールの画面に戻り、以下のコマンドを実行しプロジェクトを指定します(.envファイルに指定も可能)

export GOOGLE_CLOUD_PROJECT=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

API Keyで認証:API keyで認証するにはAPI Keyが必要となります。aistudio.google.comからAPI Keyを発行することが可能です。API Keyが発行されたらコンソールで以下のようにAPI Keyを設定します。

export GEMINI_API_KEY=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

Vertex AIで認証:VertexAI経由GeminiAPIを利用するには以下のステップが必要です
まずは以下のコマンドを利用しGoogle Cloudにログインします

gcloud auth application-default login

その後以下のように環境変数そ設定します

export GOOGLE_GENAI_USE_VERTEXAI=true export GOOGLE_CLOUD_PROJECT=クラウドプロジェクト名 export GOOGLE_CLOUD_LOCATION=us-central1

Gemini CLIのオプション

認証が終わりましたらGemini CLIを利用し始めます。まずはGeminCLIに「/」を入力すると以下のように利用できるオプションが表示されます。

オプションを利用するには、/docs,/editorなどのオプションを入力します

オプション 解説
/about CLIのバージョンを表示する
/auth 認証を行う、認証方法を変更
/bug バグレポートを作成する
/chat チャット履歴を管理
/clear チャット履歴をリセット(削除)
/compress チャット履歴を圧縮(サマライズ)する
/docs ドキュメントを開く
/editor エディターを設定
/help ヘルプ
/mcp MCPサーバやツールを利用する
/privacy プライバシーポリシーを確認する
/quit Gemini CLIを終了 (Ctrl+C+Cでも可能)
/stats セッション情報を表示
/theme 画面テーマを変更
/tools 含まれているツールを確認

主要なオプションの説明

ここまでがGemini CLIの紹介とセットアップ方法でした、ここからGemini CLIを使って見よう!
今回の以下の5つのタスクをやりながらGemini CLIでできることを学んで行きます

  • タスク1:簡単なグーグル検索をしてみる
  • タスク2:簡単なゲームを作ってみる
  • タスク3:インタネットからファイルをダウンロードしそのファイルの上に操作する
  • タスク4:スポーツスコアを取得
  • タスク1:簡単なグーグル検索をしてみる

タスク1:簡単なグーグル検索をしてみる

コンソール画面からグーグル検索し天気情報を確認できます

翔平大谷選手のレコードを調べてみたら、正しく返って来た!

タスク2:簡単なゲームを作ってみる

今回は三目並べ(Tic-Tac-Toe)ゲームを作って見ようと思います。まずひGeminiに必要な細かいプロンプトを作成してもらいます。

プロンプト:

以下の要件を満たす三目並べ(Tic-Tac-Toe)ゲームを開発してください。HTML、CSS、JavaScriptの各ファイルに分割し、JavaScriptはゲームロジックの大部分を単独で処理するようにしてください。

1. 全体要件

* プレイヤーは人間1人、コンピューター1人の対戦形式とする。  
* ゲーム終了時(勝敗が決まった場合、または引き分けの場合)は、画面上に「GAME OVER」と表示し、勝者の名前(「Xの勝利!」「Oの勝利!」または「引き分け!」)も併記すること。  
* 新しいゲームを開始するための「リセット」ボタンを設けること。

2. HTML (`index.html`)

* 基本的なページ構造を作成してください。  
* ゲームボードは、9つのマス目(セル)で構成されるようにしてください。各セルはクリック可能で、プレイヤーのマーク(XまたはO)が表示されるようにします。  
* ゲームの状態(現在のプレイヤーのターン、ゲーム結果など)を表示する要素を設けてください。  
* ゲームをリセットするためのボタンを配置してください。  
* CSSファイルとJavaScriptファイルを適切にリンクしてください。

3. CSS (`style.css`)

* ゲームボードとマス目が視覚的に分かりやすいようにスタイルを設定してください。  
  * マス目には枠線をつけ、クリック可能な領域であることがわかるようにする。  
  * XとOの表示は、見やすいように適切なフォントサイズと色を設定する。  
* ゲームの状態表示、および「GAME OVER」メッセージが目立つようにスタイルを設定してください。  
* レスポンシブデザインを考慮し、様々な画面サイズで適切に表示されるようにしてください。

4. JavaScript (`script.js`)

JavaScriptファイルがゲームロジックの全てを処理することを強く要請します。

#4.1. ゲームの状態管理

* ゲームボードの状態を管理する配列またはオブジェクト(例: `['', '', '', '', '', '', '', '', '']`)を定義してください。  
* 現在のプレイヤー(XまたはO)を追跡する変数を定義してください。初期値はXとする。  
* ゲームが終了したかどうか(勝敗が決まったか、引き分けか)を追跡するブール値を定義してください。

#4.2. ゲームの初期化

* ページ読み込み時にゲームボードを初期化する関数を作成してください。  
  * 全てのマス目を空にする。  
  * 現在のプレイヤーをXに設定する。  
  * ゲーム終了フラグをリセットする。  
  * ゲーム結果表示をクリアする。

#4.3. プレイヤーの操作

* マス目をクリックした際のイベントリスナーを設定してください。  
* クリックされたマス目が空の場合のみ、現在のプレイヤーのマークを配置し、ボードの状態を更新する。  
* マークを配置した後、以下の処理を実行する。  
  * 勝敗判定関数を呼び出す。  
  * 勝敗が決まっていない場合、プレイヤーを交代する(XからO、OからXへ)。

#4.4. コンピューターの思考ロジック

* コンピューター(O)が手番の時に呼び出される関数を作成してください。  
* コンピューターは、空いているマス目の中からランダムに選択してマークを配置するシンプルなロジックを実装してください。(将来的に難易度を上げることも考慮できるが、最初はランダムで十分です)  
* コンピューターがマークを配置した後、勝敗判定を行い、勝敗が決まっていない場合はプレイヤーを人間に戻す。

#4.5. 勝敗判定

* 現在のボードの状態に基づいて勝敗を判定する関数を作成してください。  
* 以下の勝利条件をチェックする。  
  * 3つの行  
  * 3つの列  
  * 2つの対角線  
* 勝利条件を満たすプレイヤーがいる場合、そのプレイヤーの勝利とする。  
* 全てのマス目が埋まり、かつ勝利条件を満たすプレイヤーがいない場合、引き分けとする。  
* 勝敗または引き分けが決まった場合、ゲーム終了フラグをtrueに設定し、「GAME OVER」メッセージと結果を表示する。

#4.6. ゲーム終了時の処理

* ゲームが終了した場合(勝敗が決まったか、引き分けか)は、それ以上マス目をクリックできないようにする。  
* 「GAME OVER」というテキストと、その下に「Xの勝利!」「Oの勝利!」または「引き分け!」というメッセージを表示する。

#4.7. リセット機能

* 「リセット」ボタンがクリックされた際に、ゲームを初期状態に戻す関数を呼び出す。

プロンプトをそのままGemini CLIに入力

ここから何回かユーザから実行許可をもらいながら進めます。ゲーム生成完了したのでゲームを試してみる!ゲーム実行成功したが簡単すぎたので難しさレベルを設定してもらいたい。

ゲームに3つのレベールを設定できるようにしたいのでGemini CLIにその指示します。指示すると以下のように働きはじめて、ゲームファイルを編集していきます。

ゲーム編集終わったのでゲームを再実行!
見事!ちゃんとレベールを選べれるようになっている、難易度「高」を設定するとゲームが大分難しくなった!

タスク3:インタネットからファイルをダウンロードしそのファイルの上に操作する

Gemini CLIにURLダウンロード機能が入っているため、URLをローカルにダウンロードしその上で何か操作することが可能です。以下のようなマルチステップタスクを実行します。サイトによってUAを正しく設定しないとアクセスできない場合があります、その場合がビルトインツールではなくOSのCurlのようなツールを利用します。CurlとかだとUAを自由に設定できます。

ちゃんと言われたどおりに実行してくれました!

タスク4:スポーツスコアを取得

自分はクリケットが結構好きでhttps://www.espncricinfo.com から最新スコアを確認しています。Gemini CLIを利用しそのスコアを取得し表示させます

以下のようにプロンプトを入力します

ちゃんと最新スコアを持ってこれている

タスク5:複数のニュースサイトからニュースを収集

以下のようなプロンプトを実行し主要なニュースサイトへアクセスしニュースを収集します。これは複数のステップでタスクを実行して行く必要があります

以下を順番に実行してください
1)https://www.nikkei.comをダウンロードしそのファイルの中から主要なニュース見出しを抽出
2)https://news.yahoo.co.jpをダウンロードしそのファイルの中から主要なニュース見出しを抽出
3)https://mainichi.jp/をダウンロードしそのファイルの中から主要なニュース見出しを抽出
4)抽出されたすべてのニュース見出しを表示

これも指示どおりタスクを実行し正しい結果が表示されています

タスク1ータスク5で既に気づいていると思いますが、Gemini CLIはコードツールだけではないです。Gemini CLIがエージェントのように動いて、ユーザの目的を理解し、様々なツールを利用し目的達成をするため動き出す。

Gemini CLIツールのリスト

Tool 解説
ReadFolder 現在のフォルダ配下にあるフォルダの中身を読み込む
ReadFile ファイルを読み込むテキスト, 画像(PNG, JPG, GIF, WEBP, SVG, BMP), PDF を対応
SearchText grepを利用しテキストの検索
FindFiles globを利用しファイルを検索
Edit ファイルを編集する(既存のソースコードの編集)
WriteFile ファイルを書き込む
WebFetch インターネットへアクセスしウェブページの取得
ReadManyFiles 複数のファイルを読み込む
Shell シェルコマンドを実行
Save Memory データを変数として保管、コンテキストとして利用
GoogleSearch グーグルを検索

Discussion