はじめに
こんにちは。データ戦略室データアーキテクトグループの櫻井です。今回は自分がクエリレビューでいただいたコメントを今後に活かせるよう、自分なりにコーディング環境を整える話になります。以前の投稿『【VScode × Github Copilot】脱・目検チェック!社内コーディング規約レビュー自動化への挑戦』の内容と重複する部分もあるのですが、ご了承いただけますと幸いです。また、以前の投稿も是非読んでみてください!よろしくお願いします!
背景
レバレジーズではGoogle CloudのサービスであるDataformを使用してデータの加工・変換プロセスを管理しています。Dataform上でクエリを実装するには必ずプルリクエストを出し、レビューを受けてからmergeする流れになっています。
コードを記述する際には作成者ごとに書き方がバラつかないようにチーム内でコーディング規約を設け、それを遵守するようにしています。『【VScode × Github Copilot】脱・目検チェック!社内コーディング規約レビュー自動化への挑戦』でも記載していますが、コーディング規約の内容に関するレビューは可能な限り自動化しようと取り組んでいます。しかし私があげるプルリクエストではコーディング規約以外で指摘された箇所もあり、その点は次回のプルリクエストでも気をつけるべき内容でした。何度も同じ指摘をするのはレビュアーにとって工数がかかりますし、私のテンションも下がります。なのですぐに改善できる内容は繰り返さないよう、いただいたコメントを今一度振り返り、今後のプルリクエストに活かせる状態を作りたいと考えました。
その際GitHubを開いて自分のプルリクエストを一から参照するのが面倒に感じたので、以下の流れでこれまでのプルリクエストでいただいたコメントをまとめました。
- プルリクエストコメントの抽出
GitHub CLIを使ってコメントを一括で取得します - コメントの分類
コーディング規約関連とそうでないものに分類 - レビューガイドラインの作成
今後も.sqlxを書く中で普遍的に注意する内容はmdファイルとしてまとめる - 検証用サンプルクエリの作成
作成したmdファイルが有効かを確認
やったこと
1. プルリクエストコメントの抽出
まずGitHub CLIを使って、自分が作成したプルリクエストに寄せられた全コメントを抽出しました。最初に自分が作成したプルリクエストの一覧を取得します。次に各プルリクエストに対してコメントとレビューを取得し、さらにコード行に対するレビューコメントも取得しました。これらをPythonスクリプトでまとめて処理し、プルリクエスト番号・タイトル・コメント種別・投稿者・本文・対象ファイルなどを含むCSVファイルとして出力しました。

結果、26件のプルリクエストから合計270件のコメントを抽出できました。
2. コメントの分類
次に、抽出したコメントを「コーディング規約に関するもの」と「それ以外」に分類しました。mdファイルにまとめたコーディング規約の内容をもとに、規約に関連するキーワードのパターンリストを作成しました。「インデント」「小文字」「with句」「エイリアス」「date_trunc」など、規約に記載されている項目を正規表現パターンとして定義します。各コメントの本文に対してこれらのパターンでマッチングを行い、1つでもマッチすれば「コーディング規約関連」、マッチしなければ「それ以外」に分類しました。

3. レビューガイドラインの作成
ざっくりとした分類ですが、結果、コーディング規約以外のコメントが180件見つかりました。これらを確認し、今後も.sqlxを書く上で必ずチェックする内容をmdファイルとしてまとめました。
主な項目:
- configとSELECT文の整合性
- テーブル設計・レイヤー構成(各レイヤーが参照していいデータセットなど)
- マスタテーブルの使用(ハードコーディング禁止)
- 論理削除の対応(deleted_at is null)
- CASE文のelseを必ず入れる
- 条件比較時はデータ型に合わせた比較をする(dateやdatetimeで比較)
4. 検証用サンプルの作成
作成したmdファイルが生成AIによるレビューで機能するか検証するため、全規約・全指摘に意図的に違反したサンプル.sqlxを作成しました。
このサンプルを違反内容のコメントアウトを削除した上で別の生成AIエージェントに読み込ませ、mdファイルを参照し修正させたところ、ほとんどの項目で修正できていたのでmdファイルも機能していそうです。

まとめ
感想として、自分がいただいたコメントを一度に見直すことで、忘れかけていた内容を振り返れたのが良かった点です。後で見返したら「何だこのミス!」ってなるのはあるあるですね。改善点としてはコメントの分類が正規表現での分類に留まっているので、厳密ではない点だと思います。クエリの内容も含めて分類するなどのやり方はあるかもしれません。 レビューコメントには、コーディング規約だけでは表現しきれないチームメンバーの知見と見返したくない自分の過去が詰まっています。これを可視化してドキュメント化することで、レビューの効率化だけでなく、生成AIを活用した事前チェックも可能になります。 勇気を出して過去にもらったコメントを、今一度振り返ってみてはいかがでしょうか?