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\" } }'5.3 検索を実行する (Search)
最も頻繁に使う検索リクエストです。
# 全件検索
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 ライフを始めてみてください!


