ElasticsearchのGemini CLI拡張機能(ツールとスキル付き)
GoogleのGemini CLIでElasticsearchのデータを検索、取得、分析するためのElasticの拡張機能(開発者およびエージェントのワークフロー向け)をご紹介します。
GoogleのGemini CLI用のElastic拡張機能のリリースを発表できることを嬉しく思います。これにより、ElasticsearchとElastic Agent Builderのパワーを、AI開発ワークフローに直接組み込むことができます。この拡張機能には、Elasticsearchを操作するための最近開発されたエージェントスキルもいくつか用意されています。
この拡張機能はオープンソースプロジェクトとしてこちらから利用できます。
Gemini CLIの概要とインストール方法
Gemini CLI は、GoogleのGeminiモデルを直接コマンドラインに取り込むオープンソースのAIエージェントです。ターミナルからAIと対話することで、コードの生成、ファイルの編集、シェルコマンドの実行、ウェブからの情報の取得などのタスクを実行できます。
一般的なチャットインターフェースとは異なり、Gemini CLIはローカル開発環境と統合されます。つまり、プロジェクトのコンテキストを理解し、ファイルを変更し、ビルドやテストを実行し、ワークフローをターミナル内で直接自動化することができます。開発者、サイト信頼性エンジニア(SRE)、コマンドラインのワークフローを離れることなくAI支援のコーディングと自動化を求めるエンジニアにとって役立ちます。
Gemini CLIは複数のパッケージマネージャーを使ってインストール可能です。最も一般的な方法はnpm経由です。
npm install -g @google/gemini-cliその他のインストール方法については、公式のインストールページを参照してください。
インストール後、以下のコマンドを実行してCLIを起動します。
gemini図1に示すような画面が表示されます。

図1: Gemini CLIのスクリーンショット。
Elasticsearchを構成
Elasticsearchインスタンスを実行する必要があります。モデルコンテキストプロトコル(MCP)サーバーを使用するには、Kibana 9.3以降もインストールする必要があります。Elasticsearchクエリ言語 (ES|QL) スキル (esql) を使用するためにKibanaは必要ありません。
Elastic Cloudで無料トライアルを有効化するか、start-localスクリプトを使ってローカルにインストールできます。
curl -fsSL https://elastic.co/start-local | shこれにより、ElasticsearchとKibanaがコンピュータにインストールされ、Gemini CLIの設定に使用するAPIキーが生成されます。
APIキーは前のコマンドの出力として表示され、 elastic-start-localフォルダ内の.envファイルに保存されます。
オンプレミスのElasticsearchを使用している場合(例えば、start-local)、MCPでElastic Agent Builderを使用するには、大規模言語モデル(LLM)を接続する必要があります。さまざまなオプションを理解するには、このドキュメントページをご覧ください。
Elastic Cloud(またはサーバーレス)を使用している場合は、LLM接続が事前構築されています。
Elasticsearch拡張機能をインストールしてください
次のコマンドを使用して、Gemini CLI用のElasticsearch拡張機能をインストールできます。
gemini extensions install https://github.com/elastic/gemini-cli-elasticsearchGeminiを開き、以下のコマンドを実行することで、拡張機能が正常にインストールされたことを確認できます。
/extensions listElasticsearch拡張機能が利用可能になっているはずです。
MCP統合を使用するには、Elasticsearch 9.3以降のバージョンがインストールされている必要があります。KibanaからMCPサーバーのURLを取得する必要があります。
MCPサーバーのURLは、[エージェント] > [すべてのツールを表示] > [MCPの管理] > [MCPサーバーのURLをコピー] から取得できます。
URLは次のようになります:https://your-kibana-instance/api/agent_builder/mcp
ElasticsearchエンドポイントのURLが必要です。これは通常、Kibana Elasticsearchページの最上部に表示されます。Elasticsearchをstart-localで実行している場合、 start-local .envファイルのES_LOCAL_URLキーにエンドポイントが既に存在します。
APIキーも必要です。Elasticsearchをstart-localで実行している場合、 start-local .envファイルには既にES_LOCAL_API_KEYが含まれています。それ以外の場合は、こちらに記載されているように、Kibanaインターフェースを使用してAPIキーを作成できます。
Kibanaでは、[スタック管理] > [セキュリティ] > [APIキー] > [APIキーの作成] の順に操作します。
API キーには読み取り権限のみを設定し、ここに記載されているように
feature_agentBuilder.read権限を有効にすることをお勧めします。エンコードされたAPIキーの値をコピーしてください。
シェルで必要な環境変数を設定してください。
export ELASTIC_URL="your-elasticsearch-url"
export ELASTIC_MCP_URL="your-elasticsearch-mcp-url"
export ELASTIC_API_KEY="your-encoded-api-key"サンプルデータセットをインストールする
Kibanaから入手可能なeCommerce ordersデータをインストールできます。このデータベースには、eコマースWebサイトからの4,675件の注文に関する情報を含むkibana_sample_data_ecommerceという単一のインデックスが含まれています。各注文について、次の情報があります。
顧客情報(名前、ID、生年月日、メールなど)。
注文日。
注文ID。
商品(価格、数量、ID、カテゴリー、割引、その他の詳細を含む全商品のリスト)
SKU。
合計金額(税抜、税込)。
合計数量。
地理情報(都市、国、大陸、場所、地域)。
サンプルデータをインストールするには、Kibanaの統合ページを開き(検索トップバーで「Integration」を検索)、Sample Dataをインストールしてください。詳細については、こちらのドキュメントを参照してください。
この記事の目的は、Gemini CLIをElasticsearchに接続し、kibana_sample_data_ecommerceインデックスとやり取りするのがいかに簡単かを示すことです。
Elasticsearch MCPの使用方法
Geminiで以下のコマンドを使用して接続状況を確認できます。
/mcp list図2に示すように、 elastic-agent-builderが有効になっているはずです。

図2:ツール一覧が表示されたelastic-agent-builder MCPサーバー。
Elasticsearchはデフォルトのツールセットを提供しています。詳細はこちらをご覧ください。
これらのツールを使用して、Elasticsearchと対話し、次のような質問をすることができます。
Give me the list of all the indexes available in Elasticsearch.How many customers are based in the USA in the kibana_sample_data_ecommerce index of Elasticsearch?
質問に応じて、Geminiは利用可能なツールの一つ以上を使って回答を試みます。
/elasticコマンド
Gemini CLIのElasticsearch拡張機能では、さらに /elasticコマンドを追加しました。
/helpコマンドを実行すると、利用可能なすべての/elasticオプション(図3)が表示されます。

図3:利用可能な /elastic コマンド。
これらのコマンドは、elastic-agent-builder MCPサーバーの特定のツールを直接実行したい場合に便利です。例えば、以下のコマンドを使用すると、 kibana_sample_data_ecommerceのマッピングを取得できます。
/elastic:get-mapping kibana_sample_data_ecommerceこれらのコマンドは、どのツールを呼び出すかをGeminiモデルに頼るのではなく、基本的に特定のツールを実行するためのショートカットです。
Elasticsearchスキルの使用方法
この拡張機能には、Elasticsearchで利用可能なElasticsearchクエリ言語であるES|QL用のエージェントスキルも付属しています。エージェントスキル は、Gemini CLIのようなAIコーディングエージェントに特定のタスクに合わせたカスタム指示を提供するオープンフォーマットです。段階的開示と呼ばれる概念を採用しており、最初のシステムプロンプトにスキルの簡単な説明のみを追加します。エージェントにElasticsearchへのクエリなどのタスクを実行するように依頼すると、リクエストが関連するスキルと照合され、詳細な指示が動的に読み込まれます。これは、トークン予算を効率的に管理すると同時に、AIが必要とする正確なコンテキストを提供する方法です。
esqlスキルは、Gemini CLIがES|QLクエリを直接クラスターに対して書き込み、実行するように設計されています。ES|QLは強力なパイプクエリ言語で、データ調査、ログ分析、アグリゲーションを非常に直感的に行うことができます。このスキルを有効にすると、ES|QLの構文を調べる必要はなくなり、Gemini CLIにデータについて自然言語で質問するだけであとはエージェントが処理します。
実行は、ターミナルで実行されるシンプルなcurlコマンドを使用して行われます。これは、Elasticsearchが豊富なREST APIを提供し、システムをあらゆるアーキテクチャに容易に統合できるためです。
esqlスキルが提供するもの:
インデックスとスキーマの検出:エージェントは、スキルに搭載されたツールを使用して、利用可能なインデックスを一覧表示し、フィールドマッピングを取得できます。例えば、eCommerce データセットのクエリを書く前に、エージェントは
kibana_sample_data_ecommerceでスキーマチェックを実行して、taxful_total_priceやcategoryのような利用可能なフィールドを理解することができます。シームレスな自然言語翻訳:スキルはエージェントに単なるリファレンスマニュアルにとどまらず、ユーザーの意図を解釈するための具体的なガイドを提供します。「サービス別にグループ化された平均応答時間を表示して」といった自然言語によるリクエストを入力すると、エージェントはスキルのバンドルされたパターンマッチングを使用して、入力された言葉を即座に正しいES|QLアグリゲーション、フィルタ、コマンドに変換します。
自動修正: クエリが失敗した場合(例:タイプミスマッチや構文エラーなど)、スキルは生成されたクエリとElasticsearchのエラーを正確に返します。これにより、エージェントは即座にクエリを修正して再試行でき、介入する必要がありません。
esqlスキルはelastic-agent-builder MCPサーバーのツールとしても利用できるため、このサーバーを一時的に無効にする必要があります。以下のコマンドを使用して無効にすることができます。
/mcp disable elastic-agent-builderそうすれば、Gemini CLIに次のようなプロンプトを入力するだけで済みます。
Find the top 5 product categories by total sales revenue in the kibana_sample_data_ecommerce indexエージェントは以下を実行します:
esqlスキルの必要性を認識します。kibana_sample_data_ecommerceのスキーマを確認してください。FROM kibana_sample_data_ecommerce | STATS total_revenue = SUM(taxful_total_price) BY category.keyword | SORT total_revenue DESC | LIMIT 5のようなES|QLクエリを構築します。Elasticsearch APIに対してクエリを実行します。
最終的な答えを端末に直接表示します。
ここでは、前回の質問に対するGeminiからの回答例を報告します。
───────────────────────────────────────────────────────────
> Find the top 5 product categories by total sales revenue in the kibana_sample_data_ecommerce index ───────────────────────────────────────────────────────────
✓ Activate Skill "esql": Interact with Elasticsearch using ES|QL and curl. Use when querying, managing indices, …
Skill esql activated. Resources loaded from /home/user/.gemini/extensions/elasticsearch/skills/esql:
Showing up to 200 items (files + folders). /home/user/.gemini/extensions/elasticsearch/skills/esql/ ├───SKILL.md
└───references/
├───esql-reference.md
├───generation-tips.md
└───query-patterns.md
✦ I will start by exploring the mapping of the kibana_sample_data_ecommerce index to identify the fields for product category and sales revenue. Then, I will construct and execute an ES|QL query to determine the top 5 product categories by total sales revenue.
✓ Shell curl -s "${ELASTIC_URL%/}/kibana_sample_data_ecommerce/_mapping" -H "Authorization: ApiKey $(printenv ELAS… {
"kibana_sample_data_ecommerce": {
"mappings": {
"properties": {
"category": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword"
}
}
},
"currency": {
"type": "keyword"
},
✦ Okay, I have the mapping. The category is products.category.keyword and sales revenue is taxful_total_price. I'll now execute the ES|QL query to get the top 5 categories by revenue.
✓ Shell curl -s -X POST "${ELASTIC_URL%/}/_query" \ -H "Authorization: ApiKey $(printenv ELASTIC_API_KEY)" \ -H …
{
"took": 62,
"is_partial": false,
"completion_time_in_millis": 1772805644164,
"documents_found": 4675,
"values_loaded": 12084,
"start_time_in_millis": 1772805644102,
"expiration_time_in_millis": 1773237644087,
"columns": [
{
"name": "total_revenue",
"type": "double"
},
{
"name": "products.category.keyword",
✦ The query for top 5 product categories by revenue was successful. I'll format the returned JSON values into a user-friendly list.
✓ Shell
Top 5 product categories by total sales revenue:
1. Men's Clothing: 149393.91
2. Women's Clothing: 135099.91
3. Women's Shoes: 105479.17
4. Men's Shoes: 91797.92
5. Women's Accessories: 60830.31
✦ I've found the answer; now I'll format it for clarity.
✓ Shell
Here are the top 5 product categories by total sales revenue:
| Rank | Category | Total Revenue |
|------|-----------------------|---------------|
| 1 | Men's Clothing | 149,393.91 |
| 2 | Women's Clothing | 135,099.91 |
| 3 | Women's Shoes | 105,479.17 |
| 4 | Men's Shoes | 91,797.92 |
| 5 | Women's Accessories | 60,830.31 |
✦ I've formatted and presented the answer. I'm finished.
───────────────────────────────────────────────────────────Geminiモデルが最終的な応答を生成する際にどのような手順を踏むかは非常に興味深い点です。ここでは、モデルの推論プロセスにおけるスキルの影響が明確に見て取れます。モデルがスキルを使用する必要がある、またはシェルコマンドを実行する必要があると初めて認識したとき、ヒューマン・イン・ザ・ループ方式を使用して許可を要求します。
スキーマの発見、クエリの生成、実行といった面倒な作業をesqlスキルが処理することで、回答を得るための仕組みではなく、回答そのものに集中できるようになります。必要なデータが、適切な形式でターミナルに直接表示されます。構文を記述したり、別のアプリケーションに切り替えたりする必要は一切ありません。
まとめ
この記事では、最近リリースしたGemini CLI用のElasticsearch拡張機能を紹介しました。この拡張機能を使用すると、GeminiおよびElastic Agent Builderが提供するElasticsearch MCPサーバー(バージョン 9.3.0 以降で利用可能)と/elasticコマンドを使用してElasticsearchインスタンスとやり取りできます。
さらに、この拡張機能には、ユーザーの自然言語からのリクエストをES|QLに変換する esqlスキルも含まれています。このスキルは、MCPサーバーが使用できない場合に特に役立ちます。なぜなら、基本的な通信はターミナルで実行されるシンプルなcurlコマンドによって行われるためです。Elasticsearchは、あらゆるプロジェクトに簡単に統合できる豊富なREST APIセットを提供します。これは特にエージェント型AIアプリケーションの開発時に有用です。
Gemini CLI拡張機能の詳細についてはこちらのプロジェクトリポジトリをご覧ください。




