ぼくは明日、昨日のじぶんに頼りたい

明日のためのメモです。

SQLをいい感じに補完してほしい

SQLを書くときにテーブル名やカラム名を全部入力したり、タイポが怖くてコピー&ペーストしたりと今更ですが効率悪いことしてるなと思ったのでツールを見直そうと思いました。
実際はそこまで酷くはないのですが。

やりたいこと

  • テーブル名やカラム名などの補完をしてほしい
    • SQLキーワードは大文字になってほしい
  • 定義情報を簡単にみたい
  • できれば複数のデータベース(PostgreSQL, MySQL)に対応したい

試したツール

Googleで「sql 補完」を検索して5ページぐらいをざっくり見ました。 検索結果を少し考慮しつつ私の気持ちで候補を決めます。

  • pgAdmin 4
    • 個人的にPostgreSQLは割と使うことがあるので専用ツールですが許します。
  • DBeaver
    • 検索結果にあり、少し使ったことがある状況。
  • A5:SQL MK-2
    • 検索結果にあり、Windows環境が主なので候補に入ります。
  • DataGrip
    • 検索結果にあり、有償ツールの凄さか気になるので試します。
  • sqls
    • 検索結果にあり、Go Conferenceで見て気になってました(だいぶ経ってるが)

gocon.jp

評価の方法は、以下で書いたSQLの書き心地で決めます。
基本的にSELECT系のみというか色々試してたら時間がないのでSELECT系のみです。

tmfmym.hatenablog.com

pgAdmin 4

www.pgadmin.org

試したバージョン:pgAdmin 4 v6.7

普段はPostgreSQLを使うことが多いので、GUIのクライアントにpgAdmin 4が入っていたりするので使ってます。
ただ、SQLを実行させるために使うだけでここでたくさん書くことはなかったです。
今回試したバージョンはデスクトップアプリになってました(言い方あってるのか)。ブラウザで起動するものを使っていたので少しびっくりしました。バージョンを定期的に上げよう。勝手に上げられないことも多いですが。

使ってみて

「Query Tool」を使います

  1. デフォルトで「Ctrl + Space」で補完が行われます
  2. selで「SELECT」に補完できます
  3. froで「FROM」に補完でき、FROMの後はテーブルやスキーマやVIEWが補完候補となります
  4. FROMでテーブルなどが決まればカラム名は補完できる
    • テーブル名.カラム名は想定されてないっぽく、テーブル名.カラム名したいときはテーブル名までは書かないといけない
  5. 補完されない
    • latで「LATERAL」は補完できない
    • ASで別名つけたもののカラム名は補完できない
    • おまけでUNIONの後は、selで「SELECT」は補完できない
  6. 定義情報は補完時やホバーなどでは見られない

デスクトップアプリになって補完されるまでが早くなった気がしました。
関係ないけど、ERD Toolが増えてDBを右クリックのGenerate ERDでER図がとりあえず作成された。

DBeaver

dbeaver.io

試したバージョン:Community Edition 22.0

以下の設定でSQLキーワードは大文字、テーブル名などは小文字で補完できる形になった。

  • Preferences -> Editors -> SQL Editor
    • Code Completion
      • Insert caseはDefaultのままにする
      • Insert space after table/column namesをオフに変更する
    • Code Editor
      • Auto formatのConvert keyword caseをオフにしないと小文字になる
    • Formatting
      • Keyword caseをUpperに変更する

フォーマットの調整に時間がかかってしまいました。

使ってみて(pgAdmin 4との差分)
  • FROMでテーブル名.カラム名も問題ない感じ
  • ASで別名つけたもののカラム名は補完できる(サブクエリはできないみたい)
  • UNIONの後のselで「SELECT」は補完できる
  • 定義情報はカラムだと型やNot Nullかなどは補完時に確認できる

感覚的にはpgAdminより良いと思われる。

A5:SQL MK-2

a5m2.mmatsubara.com

試したバージョン: 2.17.1

DBeaverと同様に設定の微調整が必要でした。

  • オプション -> SQL整形
    • キーワードの大文字/小文字変換を大文字に変更する
使ってみて(DBeaverとの差分)
  • 補完時に定義情報はカラムだと型はみることできましたが、Not Nullかやデフォルト値はみれなかった
    • 逆にコメントを見られる

DataGrip

www.jetbrains.com

コード補完-機能 | DataGrip

使ってみて

個人でしかもホビー利用だとお高いですよね。ということでフォーマット系はひとまず気にせず。

  • latで「LATERAL」は補完できる
  • 補完時に定義情報はカラムだと型はみることできましたが、Not Nullかやデフォルト値はみれなかった
    • 補完時ではないがカラム名をホバーすると定義情報(alterなんちゃらやコメント)を確認できる
  • ASで別名つけたもののカラム名は補完できる(サブクエリも)

他のツールで届かなかった痒いところに届きました。補完もIDE使ってる感覚です。

sqls

github.com

VSCodeで使います。

GitHub - lighttiger2505/vscode-sqls: This extension adds language support for the SQL to VS Code.

Install sqls

$ go install github.com/lighttiger2505/sqls@v0.2.20

gccが必要でした(私の環境はWindowsです)
Download | tdm-gcc

$ mkdir -p ~/.config/sqls/
$ cat <<EOF > ~/.config/sqls/config.yml
# Set to true to use lowercase keywords instead of uppercase.
lowercaseKeywords: false
connections:
  - alias: test
    driver: postgresql
    proto: tcp
    user: postgres
    passwd: password
    host: 127.0.0.1
    port: 15432
    dbName: postgres
EOF

とりあえず上の感じでconfig配置すれば動きました。
あと、説明に書いてるようにsqlの拡張子のファイルに書く感じです。
(Open any *.sql file in VS Code. The extension is now activated.)
lowercaseKeywordsでtrue/falseいじってみましたが、selectなどのSQLキーワードが大文字にならず。

使ってみて(pgAdmin 4、DBeaverとの差分)
  • DBeaverと同じくFROMでテーブル名.カラム名も問題ない感じ
  • DBeaverと同じくASで別名つけたもののカラム名は補完できる(サブクエリはできないみたい)
  • DBeaverと同じく定義情報はカラムだと型は補完時に確認できる
    • sqlsだとホバー時にも定義情報みれる
  • DBeaverと同じくUNIONの後のselで「SELECT」は補完できる

設定等を理解できていないのですが、以下を解決できればVSCodeで使えるので一番良いかなと思っています。

  • SQLキーワードを大文字にしたい
  • config.ymlの切り替え

これから使おうと思ったツール

適当な項目で適当に順位をつけてみました。
(スコアって書いてるのは順位を合計しただけなので、小さいほうが良い)

補完 定義情報確認 複数DB対応 コスト スコア
pgAdmin 4 5 5 5 1 16
Dbeaver 2 2 1 1 6
A5:SQL MK-2 2 4 1 1 8
DataGrip 1 1 1 5 8
sqls 2 2 1 1 6

個人的な感想としては、(DataGrip) > sqls > DBeaver > A5:SQL MK-2 > pgAdmin 4 といった感じです。
DataGripがさすがに有償ですし、雰囲気違う感がありました。でも、そんな君SQL書かないよねと。
普段割と使っているエディタ(VSCode)上で実行できるといいと思ったので、もう少しsqlsの設定等を調べつつ使ってみたいなと思いました。