Vim で SQL を素で編集してるの?
タイトルは釣りです。
この記事は Vim Advent Calendar 2023 16 日目の記事です。
はじめに
みなさんは SQL はどんな環境で編集しているでしょうか? Visual Studio Code?それとも Vim?まさか Vim/Neovim の素の状態で編集していたりしませんよね?
僕はしていました。
sqls (SQL Language Server)
以前、lighttiger2505 さんが開発した sqls に少しコントリビュートしていた頃がありました。
既に public archive になってしまっていますが、機能として実用的なままです。コントリビュートしていた頃は、あくまで OSS としての興味の方が大きく、如何に機能的にしていくかだけ着目していたため、常用はしていませんでした。
あらためて常用してみる
sqls の導入
Vim から sqls を使う為には Language Server が使える環境が必要です。僕は Vim 使いなので vim-lsp と vim-lsp-settings を使います。vim-lsp-settings が入っているならインストールは簡単。SQL ファイルを開いて以下を実行。
:LspInstallServer sqls
以降は SQL ファイルを開けば勝手に sqls が起動します。
sqls の使い方
sqls はデータベースを接続していない状態だと、単なる文法チェッカーにしかなりません。
これはこれで便利ですが、sqls をちゃんと使うにはデータベースに接続する必要があります。UNIX だと以下の設定ファイルを用意します。
lowercaseKeywords: false
connections:
- alias: sqlite-memory
driver: sqlite3
dataSourceName: ":memory:"
- alias: my-postgresql-server
driver: postgresql
host: my-postgresql-server
port: 5432
user: postgres
passwd: postgres
dbName: example
params:
sslmode: "verify-full"
この設定ファイルには2つの接続が書かれています。SQLite3 はメモリデータベースなので、CREATE TABLE したものだけが扱えます。PostgreSQL の方は接続すると、そのデータベースに存在するテーブルやカラムの情報が補完候補として扱えます。
接続を切り替えるには :SqlsSwitchConnection
を実行します。
また接続後に同じ接続の中でのデータベースを切り替えるには :SqlsSwitchDatabase
を実行します。
書いた SQL を実行する際は SqlsExecuteQuery
を実行して下さい。
sqls の何が良いか
SQL はコンパイルという過程がありません。linter はありますが、実際にデータベースに接続して確認してくれるものも稀です。なので実行時にエラーが発覚するのもそれほど珍しくありません。特にプレースホルダ($1
)が混じった SQL だと一度実行してみるのも難しくなります。誤記があれば気付け無いまま動作確認になってしまいます。
編集段階から実際のテーブル情報で補完する、これが最適解だと僕は思います。
おわりに
データベース用の Language Server、sqls の導入方法、使い方、便利さをお伝えしました。雑に実装してしまいがちな SQL でも sqls の様なツールを使う事でバグを減らす事ができるはずです。皆さんも使って見て下さい。
lighttiger2505 さん、よければメンテナさせて貰うのでご連絡下さい。
Discussion