スポンサーリンク

はじめに

AWS CodeCommit環境において、SQLFluffAWS CodeBuildを組み合わせて、PR時にSQLのフォーマットチェックを自動化(CI)する仕組みを構築しました。その手順と設定のポイントをご紹介します。

解決したかった課題とアプローチ

課題:

  • レビューにおいて「ロジック」ではなく「フォーマットの揺れ」の指摘に無駄な工数がかかっている。

解決策:

  • 「機械的に直せるものは機械に任せる」方針に変更。
  • PR作成時に自動でフォーマットチェックを走らせ、ルール違反があればCIを落とす。
  • レビュアーは「CIが通った(見た目が整った)コード」のロジック確認にのみ集中する。
スポンサーリンク

実装ステップ

1. ルールブックの作成(.sqlfluff

まずは「プロジェクトのSQLはこう書く」というルールを明文化します。プロジェクトのルートディレクトリに.sqlfluffを作成します。

今回は私の強いこだわりである「末尾カンマ(trailing comma)の徹底」を設定しつつ、GROUP BYの指定は数字でも項目名でもOKとする柔軟なルールにしました。

[sqlfluff]
# お使いのDWHに合わせて変更(今回はRedshift)
dialect = redshift
templater = dbt
exclude_rules = None

[sqlfluff:templater:dbt]
project_dir = .

[sqlfluff:indentation]
tab_width = 4
indented_ctes = True

# AS句を必須にしてエイリアス漏れを防ぐ
[sqlfluff:rules:aliasing.table]
aliasing = explicit

[sqlfluff:rules:aliasing.column]
aliasing = explicit

# キーワードは大文字、識別子は小文字に統一して可読性アップ
[sqlfluff:rules:capitalisation.keywords]
capitalisation_policy = upper

[sqlfluff:rules:capitalisation.identifiers]
capitalisation_policy = lower

# ★最重要:カンマは必ず「末尾(trailing)」にする
[sqlfluff:rules:layout.commas]
line_position = trailing

# GROUP BY 1, 2 などの数字指定を許可する
[sqlfluff:rules:ambiguous.column_references]
group_by_and_order_by_style = implicit

ポイント: templater = dbt を指定することで、{{ ref('...') }} などのdbt特有のJinja記法でパースエラーが起きるのを防ぎます。

2. CIの実行指示書の作成(buildspec.yml

GitHub Actionsの ci.yml に相当するものを、AWS環境では buildspec.yml として作成します。これもルートディレクトリに配置します。

version: 0.2

phases:
  install:
    runtime-versions:
      python: 3.9
    commands:
      - echo "Installing SQLFluff and dbt-redshift..."
      # dbtプラグイン込みでインストール
      - pip install dbt-redshift sqlfluff-templater-dbt

  pre_build:
    commands:
      - echo "Checking versions and initializing dbt..."
      - sqlfluff --version
      - dbt --version
      - dbt deps

  build:
    commands:
      - echo "Running SQLFluff Lint..."
      # models/ 配下の全SQLをチェック。エラーがあればここでビルド失敗(CIが落ちる)
      - sqlfluff lint models/

3. AWS上でのCI/CDパイプライン構築

設定ファイルが準備できたら、AWSコンソールでこれらを動かす設定を行います。

  1. AWS CodeBuildの作成:
    • ソースとして対象のCodeCommitリポジトリを指定。
    • 環境は Amazon Linux 2 の標準イメージを選択。
    • Buildspecは「buildspec ファイルを使用する」を選択。
  2. Amazon EventBridgeでトリガー設定:
    • メンバーがPRを出した瞬間にCodeBuildを起動させるため、EventBridgeでルールを作成します。
    • 「CodeCommit Pull Request State Change」イベント(pullRequestCreatedpullRequestSourceBranchUpdated)をトリガーにして、先ほどのCodeBuildをターゲットに指定します。

運用方法とチームへの浸透

この仕組みを入れた後、チームメンバーには以下のようにアナウンスしました。

「PR作成時に自動でSQLのフォーマットチェックが走ります。失敗した場合は、手元で sqlfluff fix models/ を実行して自動修正してから再度レビュー依頼をしてください」

この fix コマンドが非常に優秀で、細かいインデントやカンマの位置をルール通りに自動で直してくれます。

おわりに

この仕組みを導入したことで、PRを開いた瞬間に「あ、カンマが前になってる…」と指摘するストレスから解放されました。レビュアーは純粋なデータモデリングや集計ロジックの正しさに集中できるようになり、結果的に自分の開発タスクの時間を守ることにも繋がっています。

「dbtの知見が偏っている」「レビューに時間がかかりすぎている」と悩んでいるチームには、SQLFluffによる自動チェックの導入を強くおすすめします!


この記事が気に入ったら『目黒で働く分析担当の作業メモ』ご支援をお願いします!

※OFUSEに飛びます


おすすめの記事