はじめに
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]
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はデータアナリスト、データ分析環境に関わる方に非常に便利なツールだと思います。