LoginSignup
0
0

More than 1 year has passed since last update.

SQLFluffをpre-commitで設定して、コミット時に自動でSQLを整形する

Last updated at Posted at 2022-04-23

概要

この記事では、以下の内容についてまとめています.

  • 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が走るように設定します。

.pre-commit-config.yaml
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ファイルをルートフォルダに作ります

sample.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ファイルを確認すると

sample.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を設定するときにとても参考になります。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0