🌀

Vim で SQL を素で編集してるの?

2023/12/15に公開

タイトルは釣りです。

この記事は Vim Advent Calendar 2023 16 日目の記事です。

はじめに

みなさんは SQL はどんな環境で編集しているでしょうか? Visual Studio Code?それとも Vim?まさか Vim/Neovim の素の状態で編集していたりしませんよね?

僕はしていました。

sqls (SQL Language Server)

以前、lighttiger2505 さんが開発した sqls に少しコントリビュートしていた頃がありました。

https://qiita.com/lighttiger2505/items/5782debc59ae163a4d81

https://github.com/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 だと以下の設定ファイルを用意します。

~/.config/sqls/config.yaml
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