1. 📖 はじめに

この Codelab では、Gemini CLI の基本を学習し、ソフトウェア開発ワークフローでコードレビューとセキュリティ分析の拡張機能を使用します。
学習内容
- Gemini CLI の設定方法
- Gemini CLI を構成する方法
- Gemini CLI 拡張機能をインストールする方法
- コードレビューとセキュリティ分析に Gemini CLI 拡張機能を利用する方法
- Gemini CLI 用に MCP を構成する方法
- CI/CD で Gemini CLI を検査する方法
必要なもの
- Chrome ウェブブラウザ
- Gmail アカウント
- 課金アカウントが有効になっている Cloud プロジェクト
2. 🚀 ワークショップの開発環境のセットアップを準備しています
ステップ 1: Cloud コンソールでアクティブなプロジェクトを選択する
Google Cloud コンソールのプロジェクト選択ページで、Google Cloud プロジェクトを選択または作成します(コンソールの左上部分を参照)。

クリックすると、次の例のように、すべてのプロジェクトのリストが表示されます。

赤いボックスで示されている値はプロジェクト ID であり、この値はチュートリアル全体で使用されます。
Cloud プロジェクトに対して課金が有効になっていることを確認します。これを確認するには、左上のバーにあるハンバーガー アイコン ☰ をクリックしてナビゲーション メニューを表示し、[お支払い] メニューを見つけます。


[お支払い / 概要] タイトル(クラウド コンソールの左上部分)に [Google Cloud Platform Trial Billing Account] が表示されている場合は、このチュートリアルでプロジェクトを使用する準備が整っています。そうでない場合は、このチュートリアルの最初に戻って、トライアルの課金アカウントを利用します。

ステップ 2: Cloud Shell について理解する
チュートリアルのほとんどの部分で Cloud Shell を使用します。Google Cloud コンソールの上部にある [Cloud Shell をアクティブにする] をクリックします。承認を求めるメッセージが表示されたら、[承認] をクリックします。


Cloud Shell に接続したら、シェル(またはターミナル)がアカウントで認証済みかどうかを確認する必要があります。
gcloud auth list
次の出力例のように、個人の Gmail が表示されていれば問題ありません。
Credentialed Accounts
ACTIVE: *
ACCOUNT: alvinprayuda@gmail.com
To set the active account, run:
$ gcloud config set account `ACCOUNT`
表示されない場合は、ブラウザを更新して、プロンプトが表示されたら [承認] をクリックしてください(接続の問題により中断されることがあります)。
次に、シェルがすでに正しい プロジェクト ID に構成されているかどうかを確認する必要があります。ターミナルの $アイコンの前に()内の値が表示されている場合(下のスクリーンショットでは値は "your-workshop-project")、この値はアクティブなシェル セッション用に構成されたプロジェクトを示しています。

表示された値がすでに正しい場合は、次のコマンドをスキップできます。正しくない場合や欠落している場合は、次のコマンドを実行します。
gcloud config set project <YOUR_PROJECT_ID>
手順 3: Cloud Shell エディタに慣れ、アプリケーションの作業ディレクトリを設定する
これで、コーディング作業を行うようにコードエディタを設定できます。これには Cloud Shell エディタを使用します。
[エディタを開く] ボタンをクリックします。Cloud Shell エディタ
が開きます。
次のように Cloud Shell エディタのインターフェースが表示されます。

次に、操作するデモ リポジトリのクローンを作成します。まず、エディタのターミナルを開く必要があります。メニューバーの [Terminal -> New Terminal] をクリックするか、Ctrl + Shift + C を使用して、ブラウザの下部にターミナル ウィンドウを開きます。

ターミナルで次のコマンドを実行します。
git clone https://github.com/alphinside/gemini-cli-code-analysis-demo.git code-analysis-demo
次に、Cloud Shell エディタの上部のセクションに移動して、[File->Open Folder] をクリックし、ユーザー名ディレクトリを見つけて、クローンされたリポジトリ ディレクトリ code-analysis-demo を見つけて、[OK] ボタンをクリックします。これにより、選択したディレクトリがメインの作業ディレクトリになります。この例では、ユーザー名は alvinprayuda であるため、ディレクトリ パスは次のようになります。


Cloud Shell エディタの作業ディレクトリは次のようになります。

次のフェーズに進みます
3. 🚀 セットアップと構成
ローカル システムに Gemini CLI をインストールする手順は次のとおりです。
- システムに Node バージョン 20 以降がインストールされていることを確認します。
- 次のいずれかの方法で Gemini CLI を有効にします。
- グローバル パッケージとしてインストールする
# Install as an executor
npm install -g @google/gemini-cli
# then run it from terminal
gemini
- または、ソースから直接実行して、常に最新バージョンを取得する
npx https://github.com/google-gemini/gemini-cli
初回実行時には、いくつかの質問が表示されます。IDE(VSCode など)から実行すると、次の質問が表示されます。

認証方法の選択肢が表示されます。

次のように、いくつかのオプションがあります。
- [Google でログイン] を選択すると、ブラウザで Google 認証ページが開きます。このページで承認するだけで済みます。
- Gemini API キーを使用する場合は、AI Studio ページでキーを作成し、変数 GEMINI_API_KEY を設定した .env ファイルを作業ディレクトリに作成する必要があります(または、コマンドラインで
export GEMINI_API_KEY="your-api-key"コマンドを実行します)。 - Vertex AI を使用する場合は、以前に設定したプロジェクトが必要です。また、.env ファイルを作成し、GOOGLE_CLOUD_PROJECT と GOOGLE_CLOUD_LOCATION を設定する必要があります。
これらの認証方法を変更する場合は、Gemini CLI から /auth コマンドを実行するか、構成ファイルを編集します。構成ファイルを直接編集する場合は、Linux では $HOME/.gemini/settings.json にあります。security 型と auth 型が表示され、編集できます。
{
"security": {
"auth": {
"selectedType": "vertex-ai" # or "gemini-api-key" or "oauth-personal"
}
}
}

4. 🚀 基本的なコマンドと組み込みツール
Gemini CLI を操作して、詳細を確認しましょう。使用できる基本的なコマンドを探している場合は、/help と入力して、使用可能なすべてのコマンドを表示できます。

/help
次のような出力が表示されます。
Gemini CLI は AI エージェントであるため、ユーザーから指定されたタスクを解決するためのツールが装備されています。組み込みツールを確認するには、/tools コマンドを実行します。

/tools
次のような出力が表示されます。

Gemini CLI には、ファイルの読み取りと書き込み、ウェブ検索など、いくつかの機能があることがわかります。これらのツールのうち、潜在的なリスクがあるため、デフォルトでユーザーの確認が必要なものがいくつかあります。
それでは、実際に Gemini CLI でこれらのプロンプトを実行してみましょう。

Find top 10 OWASP security issue and write it down to owasp.md
GoogleSearch ツールが呼び出され、後で WriteFile を使用して結果が書き込まれます。IDE を使用している場合は、提案を承認するか拒否するかを選択するオプションが差分として表示されます。ここで、Gemini CLI がファイルの書き込み権限を求めていることがわかります。

5. 🚀 拡張機能
AI エージェントで特定のタスクの出力を改善するには、適切なプロンプトの作成、適切なツール統合による適切なコンテキスト エンジニアリングの管理などが課題となります。
Gemini CLI 拡張機能は、外部ツールに接続できる事前パッケージ化された簡単にインストール可能なプロンプトとインテグレーションです。各拡張機能には、ツールを効果的に使用する方法に関する組み込みの「ハンドブック」が含まれており、次のコンポーネントで構成できます。
- カスタム スラッシュ コマンド
- MCP の構成
- コンテキスト ファイル

セキュリティ拡張機能のインストール
たとえば、このチュートリアルでは、code-review 拡張機能と security 拡張機能をインストールする方法について説明します。
次のコマンドをターミナルから実行して、security 拡張機能をインストールします。
gemini extensions install https://github.com/gemini-cli-extensions/security
次の質問が表示されます。Enter キーを押して受け入れます。
Installing extension "gemini-cli-security". **Extensions may introduce unexpected behavior. Ensure you have investigated the extension source and trust the author.** This extension will run the following MCP servers: * securityServer (local): node /home/alvinprayuda/.gemini/extensions/gemini-cli-security/mcp-server/dist/security.js This extension will append info to your gemini.md context using GEMINI.md Do you want to continue? [Y/n]: Extension "gemini-cli-security" installed successfully and enabled.
コードレビュー拡張機能をインストールする
次に、code-review 拡張機能をインストールします。次のコマンドを実行します。
gemini extensions install https://github.com/gemini-cli-extensions/code-review
完了したら、Gemini CLI を再度実行します。
gemini
/extensions コマンドを実行すると、これらの 2 つの拡張機能がすでにインストールされていることがわかります。

/extensions
それでは、先ほどクローンしたサンプル リポジトリで実際に実行してみましょう。
6. 🚀 インタラクティブ モード - コード セキュリティ分析拡張機能アプリケーション
セキュリティ拡張機能は、リポジトリのセキュリティを強化するために構築されたオープンソースの Gemini CLI 拡張機能です。この拡張機能は、コード変更を分析してさまざまなセキュリティ リスクと脆弱性を特定する新しいコマンドを Gemini CLI に追加します。
まずデモ リポジトリを準備します。次のコマンドを実行して、セキュリティ リスクのある変更がすでに適用されているブランチに切り替えます。
git checkout refactor/analysis-demo
その後、ターミナルで Gemini CLI を実行します。
gemini
次に、拡張機能を実行しましょう。

/security:analyze
これにより、長時間実行プロセスが開始されます。このプロセス中に、次のように mkdir などの特定のオペレーションを実行する権限を求める中断が複数回発生します。

これは、ユーザーが Gemini CLI で実行される内容を認識できるようにするための保護メカニズムです。チュートリアルの残りの部分については、常に許可する(オプション 2)ことができます。
この拡張機能は長時間実行されるプロセスを呼び出します。.gemini_security ディレクトリ内にプランニング ファイルが作成されるのを確認できます。また、どのプロセスが完了したかどうかのチェックリストを確認できます。以下に例を示します。

タスクの完了には時間がかかります。待っている間に、 Github リポジトリでこれらの拡張機能のソースを確認できます。この URL には、これらのセキュリティ スキャン プロセスをすべて実行するために使用されるプロンプトが表示されます。

ご覧のとおり、Gemini CLI としてプロンプトをスキャンして 2 回のチェック(Reconnaissance Pass とより詳細な Investigation Pass)を行うことで、このスキャンを実行します。
Gemini CLI で次のプロンプトが表示された場合は、オプション 2 を選択してループ検出を無効にできます。

Gemini CLI に続行を求める

continue
これは、生産性の低いツールの呼び出しループが無限に続くのを防ぐためのメカニズムであり、今後も改善が続けられます。
完了すると、インタラクティブ ターミナルにレポートが表示されます。これを簡単にするため、Gemini CLI に security-analysis.md に書き込むよう指示します。

write the result to security-analysis.md file
これで、ファイルに書き込まれた結果を検査できます。
7. 🚀 非インタラクティブ モード - コードレビュー拡張機能アプリケーション
code-review 拡張機能は、コードの変更を分析してさまざまなコード品質の問題を特定する新しいコマンドを Gemini CLI に追加します。
この拡張機能は Gemini CLI の非インタラクティブ モードで実行できます。つまり、Gemini CLI シェルを入力しなくても、すべてのプロセスを実行できます。非インタラクティブ モードで Gemini CLI を実行するには、次のコマンド パターンを使用します。
gemini "put your command here"
ただし、非インタラクティブ モードで実行すると、ユーザー権限を必要とするツール操作が無効になるため、--yolo フラグを追加してすべてのアクションを自動承認し、非インタラクティブ モードですべてのツールを有効にする必要があります。
次のコマンドで code-review 拡張機能を実行します。
gemini "/code-review" --yolo -e code-review > code-review.md
このコマンドは、Gemini CLI 出力の結果を code-review.md ファイルに書き込みます。ここで -e フラグに注目してください。このフラグは、セッション中に有効にする拡張機能を制御します。ここでは、code-review 拡張機能のみを有効にし、他の拡張機能を無効にします。
しばらく時間がかかりますが、完了すると、次のような結果が Markdown ファイルに書き込まれます。
Here are the results of the code review.
While the recent changes to rename `get_products` and `get_product` to `GetProducts` and `GetProduct` are minor, the codebase has some inconsistencies in its naming conventions. For instance, other functions like `create_product` use `snake_case`, while the newly renamed functions use `PascalCase`. For better code quality and readability, I recommend using a consistent naming convention throughout the project.
More importantly, I have identified several security vulnerabilities in the `main.py` file. Here is a summary of the findings:
### 1. SQL Injection
* **Severity**: High
* **Location**:
* `main.py:99` in `get_products_by_category`
* `main.py:146` in `search_products`
* `main.py:372` in `get_user_transactions`
* `main.py:438` in `adjust_inventory_by_query`
* **Description**: The endpoints directly use f-strings to construct SQL queries, making them vulnerable to SQL injection attacks. An attacker could manipulate the input to execute arbitrary SQL commands, potentially leading to data breaches or unauthorized modifications.
* **Recommendation**: Use parameterized queries or an ORM to handle database interactions. This will ensure that user input is properly sanitized and prevent SQL injection attacks.
### 2. Server-Side Request Forgery (SSRF)
* **Severity**: High
* **Location**: `main.py:265` in `fetch_url`
* **Description**: The `fetch_url` endpoint allows users to specify an arbitrary URL, which the server then requests. This can be exploited to make requests to internal services or local files, leading to information disclosure or other security breaches.
* **Recommendation**: Implement a whitelist of allowed domains or protocols to restrict the URLs that can be requested. Additionally, you can disable redirects and use a timeout to limit the impact of an attack.
### 3. Information Exposure
* **Severity**: Medium
* **Location**: `main.py:423` in `get_environment_variables`
* **Description**: The `get_environment_variables` endpoint exposes all environment variables to the user. This can include sensitive information such as API keys, database credentials, and other secrets.
* **Recommendation**: Remove this endpoint or restrict access to it to authorized users. If you need to expose some environment variables, do so selectively and avoid exposing sensitive information.
8. 🚀 Model Context Protocol のサポート
拡張機能の説明で前に確認したように、Gemini CLI は MCP サーバー(Model Context Protocol を介してツールとリソースを提供するアプリケーション)に接続できます。この接続により、Gemini CLI は、MCP サーバーをローカル環境と API などの外部サービスへのブリッジとして使用して、外部システムやデータソースとやり取りできます。

独自の MCP サーバー設定を行う場合は、.gemini/settings.json ファイルを変更して、次の構成を追加する必要があります。
{
...
# Previous settings above if any
"mcpServers": {
"server_name": {
# MCP server configurations here
}
}
}
このチュートリアルでは、GitHub アカウントとの接続を構成して、以前のレポートデータを GitHub に push します。
Github MCP サーバーの構成
まず、Gemini CLI プロジェクト構成ファイルを作成しましょう。次のコマンドを実行します。
mkdir -p .gemini && touch .gemini/settings.json
次に、.gemini/settings.json ファイルを開き、次の構成を入力します。
{
"mcpServers": {
"github": {
"httpUrl": "https://api.githubcopilot.com/mcp/",
"headers": {
"Authorization": "your-personal-access-token"
},
"timeout": 5000
}
}
}
ここで独自の Github 個人用アクセス トークンが必要になるため、独自の Github アカウントをすでに所有していることを確認してください。
GitHub にログインして [Settings] に移動します。

次に、下にスクロールして [開発者向けの設定] を見つけてクリックします。

[Personal access tokens] を選択し、[Tokens (classic)] を選択します。


個人用アクセス トークンの名前を指定し、repo スコープを確認します。

下にスクロールして [Generate Token](トークンを生成)ボタンをクリックします。
[Generate new token button] をクリックし、[Generate new token (classic)] を選択します。生成されたトークンをコピーして、.gemini/settings.json に書き込みます。

したがって、.gemini/settings.json は次の例のようになります。
{
"mcpServers": {
"github": {
"httpUrl": "https://api.githubcopilot.com/mcp/",
"headers": {
"Authorization": "ghp-xxxx"
},
"timeout": 5000
}
}
}
次に、接続を確認します。次のコマンドを実行して Gemini CLI を起動します。
gemini
次に、/mcp コマンドを実行すると、Github MCP がすでに正しく構成されていることがわかります。

/mcp
次に、次のコマンドを送信して、この MCP 接続をテストします。

Aggregate the findings from @code-review.md and @security-analysis.md into a single report and ensure no duplicates issues reported. Post this report as a comment on the relevant pull request for the current git branch on GitHub and display the pull request URL for manual review
ここで @code-review.md と @security-analysis.md の表記に注意してください。これは、Gemini CLI に渡すファイルを参照する方法です。このコマンドは、両方のファイルの内容を読み取り、Github MCP 接続を使用してこのブランチに関連する Pull Request にコメントを push します。その後、プルリクエストの URL で確認できます。

9. 💡CI/CD ワークフローの Gemini CLI
GitHub ユーザーは、run-gemini-cli GitHub アクションを利用して、Gemini CLI を CI/CD パイプラインに簡単に埋め込むことができます。重要な日常的なコーディング タスクの自律エージェントとして機能するだけでなく、作業を迅速に委任できるオンデマンドのコラボレーターとしても機能します。
これを利用して、GitHub リポジトリ内で Gemini を会話形式で直接使用し、pull リクエストのレビュー、問題のトリアージ、コードの分析と変更などを行うことができます。
この統合の例は、この pull リクエストで確認できます。この例では、ランナー内で Gemini CLI Security 拡張機能を利用し、Pull Request の作成時にレビューを提供します。




10. 💡その他の Gemini CLI 拡張機能を試す

https://geminicli.com/extensions で、他の拡張機能を確認することもできます。他の便利なツールもぜひお試しください。
11. 🧹 クリーンアップ
この Codelab で使用したリソースについて、Google Cloud アカウントに課金されないようにするには、次の手順を行います。
- Google Cloud コンソールで、[リソースの管理] ページに移動します。
- プロジェクト リストで、削除するプロジェクトを選択し、[削除] をクリックします。
- ダイアログでプロジェクト ID を入力し、[シャットダウン] をクリックしてプロジェクトを削除します。