LoginSignup
3
2

More than 1 year has passed since last update.

SQLリンター SQLFluff をチームのコーディング規約に合わせて設定してみる (.sqlfluff)

Last updated at Posted at 2022-02-13

はじめに

SQLFluffの設定をチームのコーディング規約に合わせるときに、対応するルールを見つけるのが大変だったので、対応表と.sqlfluffファイルの設定値を共有したいと思います。
注意:SQLFluffの説明、基本的な使い方は扱いません。
SQLFluff
SQLFluff公式ドキュメント

コーディング規約とSQLFluffルールの対応表

ルール番号はSQLFluff Rules ReferenceのSpecific Rulesの番号に対応しています。設定値は.sqlfluffに記載するパラメータです。

項目 規約 ルール番号 設定値(ある場合)
全般 予約語の大文字は使用禁止 L010 capitalisation_policy = lower
全般 予約語は左揃え L003, L050
全般 インデントはtab(スペース4つ分) rules tab_space_size = 4
select カラムが複数あるときは改行すること(1つなら改行は不要) L036
select カンマはカラムの前につける L019 comma_style = leading
select カンマのあとにスペースを1つ入れる L008
select 極力アスタリスクの使用を禁止 該当なし
select エイリアスをつける際はasをつけること L012 aliasing = explicit
from エイリアスをつける際はasをつけること L011 aliasing = explicit
join joinはインデントする indentation indented_joins = True
join onはインデントする indentation indented_using_on = True
join エイリアスをつける際はasをつけること L011 aliasing = explicit
with with句内はインデントをする L003
with with句の次のselectは一行あける L022
group by ディメンションとなるカラムはカラム名で記載すること
(1, 2のような番号での記載禁止)
L054 group_by_and_order_by_style = explicit

チームで利用している.sqlfluffの設定

チームで現在使用しいている.sqlfluffの設定値です。SQLFluffはデフォルトでこのように設定されています。
デフォルトと異なる設定だけ記載すれば良いのですが、デフォルトと同じ設定でも分かりやすさのために記載を残しているものもあります。

.sqlfluff
[sqlfluff]
dialect = bigquery
templater = jinja
sql_file_exts = .sql,.sql.j2,.dml,.ddl
exclude_rules = L031

[sqlfluff:indentation]
indented_joins = True
indented_using_on = True

[sqlfluff:rules]
tab_space_size = 4
max_line_length = 100
indent_unit = space
comma_style = trailing
allow_scalar = True
single_table_references = consistent
unquoted_identifiers_policy = all

[sqlfluff:rules:L010]
capitalisation_policy = lower

[sqlfluff:rules:L011]
# Aliasing preference for tables
aliasing = explicit

[sqlfluff:rules:L012]
# Aliasing preference for columns
aliasing = explicit

[sqlfluff:rules:L014]
# Unquoted identifiers
extended_capitalisation_policy = consistent

[sqlfluff:rules:L016]
ignore_comment_lines = True

[sqlfluff:rules:L019]
comma_style = leading

[sqlfluff:rules:L054]
# GROUP BY/ORDER BY column references
group_by_and_order_by_style = explicit

まとめ

チームではデータマート生成処理等の主要なクエリをGitHubで管理しており、プルリクでクエリがコーディング規約に合っているか確認するのも、指摘するのも労力がいるなと感じていましたが、SQLFluffを導入したことでだいぶ楽になりました。現在は、プルリクに合わせてGitHub Actionsで自動でSQLFluffが実行されるようにしています。
SQLFluffはデータアナリスト、データ分析環境に関わる方に非常に便利なツールだと思います。

3
2
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
3
2