🎄

テキストファイルに対してSQLを発行できるツール「q」& vimから使う「vimq.vim」の紹介

2021/12/11に公開

Applibot Advent Calendar 2021」 11日目の記事になります。

はじめに

今回は、CSV/TSVにSQL発行して操作したいという話から、
vimをインターフェースとしたcsv/tsvへのクエリ発行のプラグイン紹介までしていきます。

最初にまとめとして何を紹介するのか載せておきます。

今回紹介するものまとめ

↓ こういうプラグインを作ってみました(vimq.vim)

demo

CSVにSQL発行して操作したい話

CSVやTSVなどのテキストファイルに対して
ちょっとしたクエリを書いてデータ抽出したいな、と思うことがあります。

例えば、マスターデータなどのデータをバージョン管理するために
GitにCSVやTSVで登録されているとします。

過去のバージョンのデータに対してクエリを書くためには
一旦Gitから過去のデータ持ってきて,DBへそのデータを投入し、DBへ接続して...のような手間が発生します。

上でいった例はかなり極端ですが、ここまではないにせよ、
気軽にクエリを投げれると嬉しいなと言う場面が何回かありました。

これを解決するために
一つの手段としてCSV/TSVなりのテキストデータへそのままクエリがかけることできれば
嬉しいなと思っていました。

ちょこっとデータ抽出して調べてみたいな...というときに、
クエリが書けると手軽なのでそういうツールを探してみます。

テキストファイルに対してSQL操作を可能にするツール

CSVやTSVなどのテキストファイルに対してSQL発行し、データ抽出できるツールを探して見るといくつかありました。

どれを使っても簡単なデータ抽出であれば満たせそうだったので、
とりあえずstar数が一番多い(2021/12/03現在) qを使ってみようと思いました。

q

色々調べていて思ったんですが、「q」はgooglability低すぎて検索大変でした...。

概要

テキストファイルに対してクエリを投げることができるツールになります。

導入

macの方はbrew install qで完了します。

実践

使い方もかなりシンプルなため、ここで詳細を語るのは割愛しようと思います。

https://github.com/harelba/q

基本的に「q」コマンドの後に文字列を引数としてクエリを書くことで結果を得ることが出来ます。

vimで使いたい

vimで今開いているファイルに対してサクッとクエリ書きたい、と思うのは
至極当然の流れだと思うのでプラグイン作ってみました。

https://github.com/yuucu/vimq.vim

vimをインターフェースとして、入力をqに渡し、
結果を受け取り表示するだけのプラグインです。

vim-plug使っている方は

Plug 'yuucu/vimq.vim'

で導入完了するので使ってみてください!

使い方

For Current Buffer

今開いているファイルに対してクエリをかける場合は、ハイフン(-)を使用します。

下のcsvをいくつか例を紹介します。

user_id, hp, attack, speed
1, 10, 10, 10
2, 20, 20, 20
3, 30, 30, 30
4, 40, 40, 40

select * from -

1

:Vimq select * from -

select user_id, hp, attack from - where hp > 20

2

:Vimq select user_id, hp, attack from - where hp > 20

For File

ファイルパスを指定してクエリをかけることも出来ます。

select * from ./user.csv

3

:Vimq select * from ./path/to/your_file

おわりに

ここまで読んでいただきありがとうございました!

初めてvim-plugin開発したのですが、
自分の思うような挙動を実現できてすごく嬉しいし楽しかったので
また何か作りたいという気持ちです!

以上、「Applibot Advent Calendar 2021」 11日目の記事でした!

Discussion