LoginSignup
3
1

More than 5 years have passed since last update.

Elasticsearch API を emacs buffer から呼ぶ

Last updated at Posted at 2018-12-18

Elastic stack AdventCalendar 19 日 になります。

Kibana の DevTools でクエリを実行するのと同じことを emacs の中から実行する話です。

はじめに

elastic emacs というキーワードでグーグル検索をすると、上位に Classmethod さんのインタビュー記事が出てきます。

Elasticの中の人に聞いてみた(開発チーム編)

この中で開発環境について、こんなくだりがあります。

CM「開発ツールにはどのようなものを利用していますか?」
Ryanさん「エディターはIntelliJ、Eclipseを利用しているメンバーが多い。中にはEmacs使いもいる。Emacs使いは開発だけではなく、メールなどの業務も全てEmacsでこなしている(笑)」

emacs でメールを読み書きしている私はとても親近感を感じます(笑)。

閑話休題

Elastic Stack はオープンソースのプロジェクトですので、 github でソースコードが公開されています。

試しに elastic/elasticsearch を見てみると、一番上のディレクトリに.dir-locals.el というファイルがあり、emacs の java-mode のカスタマイズが設定されています。もしかするとインタビューで話題になっていた方が、このファイルの主なんじゃないかと勝手に想像してます。その dakroneさんのリポジトリには elasticsearchを emacs から操る es-mode が公開されています。(ありがたや〜)

本編

前置きが長かったですが、本編は短いです。

An Emacs major mode for interacting with Elasticsearch

この es-mode を emacs に追加すると、Kibanaの Dev Tools でクエリを書いて実行するように、emacs buffer から RestAPI を実行できるようになります。

こんなふうに↓ Elasticsearch のクエリをファイルに列挙しておき、実行したいクエリの上にカーソルを置き、そこで Ctrl-c を 2 回押すと、結果の json が別の buffer に表示されます。

sample.es.gif

Kibana の DevTools に比べて何か利点があるか?と自問自答してみると、

クエリをファイルに保存しておけば、DevTools にコピペしなくても、すぐ実行でき、エディタの中で完結している、といったところでしょうか。

org-mode

また、emacs には org-mode という、独自の markdown 的な仕組み(モード)があります。es-mode がセットアップされた状態で、org-mode内でクエリを実行すると、同じファイルのRESULTS というブロックが生成され、そこに結果を返してくれます。

検索クエリとその結果を記録しておきたい場合は org-mode の中で es-mode を使うほうが便利でしょう。

sample.org.gif

↑の gif にもでていますが、json の結果を jq で処理したものを RESULTS で取得することもできます。

#+BEGIN_SRC es :jq ._source.title
GET demo/doc/1?pretty
#+END_SRC
#+RESULTS
: "hello elastic"

es-mode のセットアップについて

公式のREADMEを見てください。

とはいえ、emacs のバージョンや環境によって、うまくセットアップできない場合もあるかもしれません。お試しで es-mode 使うためのDockerfile をつくってみました。コンテナのなかで動いている emacs なので、以下の2点に注意してください。

  • endpoint は http://localhost:9200 になっていたら変更する必要があります。endpoint は .emacs ファイルの中で指定することができます。
  • Elasticsearch もループバック以外のネットワークからもつながるようになっている必要があります。
3
1
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
1