CLI から Elasticsearch を自在に操る! curl 操作ガイド

Tech blog cover with futuristic UI graphics over a cityscape; Japanese title about manipulating Elasticsearch via CLI and curl guide (curl 操作ガイド). BLOG

Elasticsearch は強力な REST API を備えており、ほぼすべての操作を HTTP リクエストで行うことができます。 Kibana の Dev Tools も便利ですが、CLI の王者 curl を使いこなすことで、シェルスクリプトによる自動化や、リモートサーバーでのデバッグ効率が飛躍的に向上します。 本記事では、初心者がまず覚えるべき基本コマンドから、現場で役立つ Tips までをまとめました。

※本記事では、Windows 11 上の PowerShell から curl.exe を実行する環境を想定しています。

1. 事前準備:curl.exe の導入

Windows の PowerShell には curl というコマンドが存在しますが、これは Invoke-WebRequest という別のコマンドレットへの エイリアス(別名) です。 これは Elasticsearch の複雑な JSON リクエストを送る際に挙動が異なるため、本記事では 本家 curl.exe を使用します。

インストール方法

  • 1: curl for Windows から最新版(例: curl-8.19.0_6-win64-mingw.zip)をダウンロード。
  • 2: 任意のフォルダ(例: C:\curl-8.19.0_6-win64-mingw)に展開します。
  • 3: (推奨)展開先の bin フォルダを環境変数 PATH に追加しておくと、フルパスを入力せずに実行できて便利です。

2. 共通オプションと「神オプション」

Elasticsearch へのリクエストで頻用するオプションは以下の通りです。

オプション説明
-u [user]:[pass]認証情報の指定。
-H “Content-Type: application/json”JSON データを送る際に必須。
-X [METHOD]GET, POST, PUT, DELETE などのメソッド指定。
–cacert [path]自己署名証明書(SSL)を使用している場合にパスを指定。
?pretty必須級。 レスポンスの JSON を整形して表示します。

※認証情報を -u user:pass の形式ではなく、API Key を渡す方法もあります。

3. 効率化の鍵:PowerShell 関数を作る

毎回長いパスや認証情報を打つのは苦行です。PowerShell の $PROFILE (C:\Users\ユーザー名\Documents\WindowsPowerShell\Microsoft.PowerShell_profile.ps1) に以下の変数および関数を登録してしまいましょう。

$ESURL = "https://localhost:9200"

function wincurl {
    # 展開したパスに合わせて書き換えてください
    $CURL_DIR = "C:\curl-8.19.0_6-win64-mingw"
    & $CURL_DIR\bin\curl.exe -u elastic:password -H "Content-Type: application/json" --cacert C:\certs\ca\ca.crt $args
}

これで、次のようにスッキリとしたコマンドで操作が可能になります。

wincurl -X GET "$ESURL/?pretty"

4. クラスターの状態を確認する

まずは Elasticsearch が正常に稼働しているか確認しましょう。

4.1 疎通確認

wincurl -X GET "$ESURL/?pretty"

正常であれば、クラスター名や Elasticsearch のバージョンを含む JSON が返ってきます。

4.2 クラスターの健康状態(ヘルスチェック)

wincurl -X GET "$ESURL/_cluster/health?pretty"

status 項目に注目してください:

  • green: すべてのシャードが割り当て済み(快調)
  • yellow: プライマリは動いているが、レプリカが未割り当て
  • red: 一部のデータにアクセス不能

5. インデックスとドキュメントの操作 (CRUD)

5.1 データの登録 (Index)

PowerShell で JSON を書く際は、全体をシングルクォーテーションで囲んで、JSON内のダブルクォーテーションを \ でエスケープする必要があります。

wincurl -X PUT "$ESURL/my_index/_doc/1?pretty" -d '{ \"user\": \"user1\", \"message\": \"Elasticsearch curl test\" }'

5.2 データの更新 (Update)

_update エンドポイントを使い、doc 要素で囲んで指定します。

wincurl -X POST "$ESURL/my_index/_update/1?pretty" -d '{ \"doc\": { \"message\": \"Updated by curl\" } }'

最も頻繁に使う検索リクエストです。

# 全件検索
wincurl -X GET "$ESURL/my_index/_search?pretty"

# クエリ指定(Match Query)
wincurl -X POST "$ESURL/my_index/_search?pretty" -d '{ \"query\": { \"match\": { \"message\": \"Elasticsearch\" } } }'

6. 知っておくと便利な Tips

6.1 インデックス一覧を表示する (cat API)

GUI がなくても、現在のインデックス数やドキュメント数を把握できます。?v をつけるとヘッダーが表示されます。

wincurl -X GET "$ESURL/_cat/indices?v"

出力例:

health status index    uuid                   pri rep docs.count docs.deleted store.size pri.store.size
green  open   my_index sFNfkveMQRejftl7xenW1Q   1   1          1            0      4.5kb          2.2kb
...

6.2 複雑な JSON はファイルから読み込む

コマンドラインに長い JSON を書くのが限界に達したら、-d ‘@filename’ を使いましょう。

query.json にクエリーを記載しておきます(ダブルクォーテーションをエスケープする必要はありません)。

{
  "query": {
    "match": {
      "message": "Elasticsearch"
    }
  }
}

-d ‘@filename’ を使ってクエリーを渡す例。

wincurl -X POST "$ESURL/my_index/_search?pretty" -d '@query.json'

※注 @filename の部分は、シングルクォーテーションで囲む必要があります。

まとめ

curl は Elasticsearch API の構造を理解するための最短ルートです。コマンドが「手になじむ」ようになると、スクリプトによる一括処理や、Kibana が使えない環境でのトラブルシューティングが圧倒的に楽になります。

まずは _cluster/health を叩くところから、あなたの CLI ライフを始めてみてください!