概要
この記事では、以下の内容についてまとめています.
- SQLFluffの概要とインストール方法
- pre-commitのインストール方法
- コミット時に自動でSQL整形が走るようにする設定
SQLFluffとは?
SQLFluffはSQLのLintツールです。
dbtを作っている会社が開発しました。
2022年4月現在ではバージョン0.13.xのオープンβです。
個人的には、
- mysqlやBigQueryなど、いろいろなdialectに対して適用できる
- コマンドラインからサクッと使えて便利
といった面でいい感じだったので使っています。
SQLFluffのインストール
Pyhton3系のpipで入れます。
(仮想環境やPATH等は個々人の好みでやってください。)
$ pip install sqlfluff
インストールできたら動作チェックとしてversionを確認しましょう。
$ sqlfluff version
sqlfluff, version 0.13.0
pre-commitのインストール
pre-commitは、コミット時に型チェックやコード整形などpushする前の確認作業をローカルでサクッとできるので便利です。
まだインストールされてない場合はpipもしくはbrewで入れます。
$ pip install pre-commit
$ brew install pre-commit
インストールが終わったら、動作チェックとしてversionを確認しましょう。
$ pre-commit --version
pre-commit 2.18.1
pre-commitにSQLFluffを設定し、自動でSQL整形する
まずgitが走るプロジェクトのルートフォルダに.pre-commit-config.yaml
を作成します。
以下のようにコミット時にsqlfluffが走るように設定します。
repos:
- repo: https://github.com/sqlfluff/sqlfluff
rev: 0.13.0
hooks:
- id: sqlfluff-lint
args: [--dialect, mysql]
- id: sqlfluff-fix
args: [--dialect, mysql]
次に、pre-commitインストールをします
$ pre-commit install
pre-commit installed at .git/hooks/pre-commit
これで準備完了です。
コミットして整形されるか試す
サンプルとして適当なSQLファイルをルートフォルダに作ります
select
column_1,
column_2
, column_3
from sample_table;
作成したファイルをaddしてcommitします。
$ git add sample.sql
$ git commit -m "test"
sqlfluff-lint............................................................Failed
- hook id: sqlfluff-lint
- exit code: 65
== [sample.sql] FAIL
L: 2 | P: 3 | L003 | Expected 1 indentations, found 0 [compared to line 01]
L: 3 | P: 4 | L003 | Expected 1 indentations, found 0 [compared to line 01]
L: 4 | P: 7 | L003 | Expected 2 indentations, found 1 [compared to line 01]
L: 4 | P: 7 | L019 | Found leading comma. Expected only trailing.
All Finished 📜 🎉!
sqlfluff-fix.............................................................Failed
- hook id: sqlfluff-fix
- files were modified by this hook
==== finding fixable violations ====
== [sample.sql] FAIL
L: 2 | P: 3 | L003 | Expected 1 indentations, found 0 [compared to line 01]
L: 3 | P: 4 | L003 | Expected 1 indentations, found 0 [compared to line 01]
L: 4 | P: 7 | L003 | Expected 2 indentations, found 1 [compared to line 01]
L: 4 | P: 7 | L019 | Found leading comma. Expected only trailing.
==== fixing violations ====
4 fixable linting violations found
FORCE MODE: Attempting fixes...
Persisting Changes...
== [sample.sql] PASS
Done. Please check your files to confirm.
この時点で先程のサンプルのSQLファイルを確認すると
select
column_1,
column_2,
column_3
from sample_table;
いい感じになってますね!!
もう一度addしてコミットします。
$ git add sample.sql
$ git commit -m "test"
sqlfluff-lint............................................................Passed
sqlfluff-fix.............................................................Passed
1 file changed, 3 insertions(+), 8 deletions(-)
無事コミットできました。
参考
https://docs.sqlfluff.com/en/stable/index.html
公式Docsです。
https://zenn.dev/takimo/articles/918a51c9bdd486
SQLFLuffの基本だけではなく、ルールのカスタムについても書かれています。.sqlfluff
を設定するときにとても参考になります。