Upgrade to Pro — share decks privately, control downloads, hide ads and more …

セマンティックレイヤーが欲しかった現場に、BigQuery Graph/Measure と A...

Sponsored · SiteGround - Reliable hosting with speed, security, and support you can count on. →
Avatar for a1008u a1008u
September 15, 2026

セマンティックレイヤーが欲しかった現場に、BigQuery Graph/Measure と AI が来た話

【データ横丁 LTフェス 登壇資料】
「最新のBigQuery GraphやMeasureを試したい!でも構文を手書きするのは面倒だから、AIに丸投げしよう!」
……そう意気込んだ現場を待ち受けていたのは、プロンプトの指示を平気ですり抜ける「確率論のAI」という残酷な壁でした。
本発表では、非決定論的なAIコーディングを「決定論の壁(Linter / CI / AST / YAML構造化コメント)」で包囲し、AIがルールを破らず自律修正する開発環境(ハーネス)を泥臭く構築した実践知をお話しします。
「AIのために書くな。同僚のエンジニアのために書け。」
人に優しい設計こそが、最強のAIハーネスだった——そんな現場の奮闘記です。

Avatar for a1008u

a1008u

September 15, 2026

More Decks by a1008u

Other Decks in Programming

Transcript

  1. 【データ横丁 LTフェス】BigQuery Graph/Measure と AI の話 セマンティックレイヤーが欲しかった現場に、 BigQuery Graph/Measure と

    AI が来た話 株式会社インタースペース データ戦略推進室 a1008u (@eeemptyyy) 株式会社インタースペース データ戦略推進室 1
  2. 【データ横丁 LTフェス】BigQuery Graph/Measure と AI の話 自己紹介 (Who am I?)

    a1008u ▪X: @eeemptyyy ▪所属: 株式会社インタースペース データ戦略推進室 ▪利用技術: Google Cloud、dbt、Python ほか 株式会社インタースペース データ戦略推進室 2
  3. 【データ横丁 LTフェス】BigQuery Graph/Measure と AI の話 AIで爆速導入を狙った現場の、期待と現実 期待:AIでサボりたかった ▪BigQuery Graphを試したい

    ▪GQLや集計定義の手書きは辛い ▪「AIに書かせれば一瞬のはず」 現実:確率論にボコボコにされる ▪命名規則を平気ですり抜ける ▪「最後はselect *で」を勝手に加工 ▪レビューで時間蒸発、ハーネスゼロ! 株式会社インタースペース データ戦略推進室 3
  4. 【データ横丁 LTフェス】BigQuery Graph/Measure と AI の話 基本はデフォルト。独自ルールはカスタムで。 車輪の再発明はしない 全体の8割は公式ルールを そのまま使って固定する。

    ▪構文やインデントは公式に任せる ▪AIが破る急所だけを自作する ▪ここから自作ASTとYAMLの世界へ! 株式会社インタースペース データ戦略推進室 3大Linterと独自ルールの境界 ▪SQLFluff (SQL構文) 構文担保 ➔ 自作ASTで最終SELECT強制 ▪yamllint (設定・スキーマ) 書式検証 ➔ コメントYAMLパース ▪dbt-project-evaluator (設計) 公式ルールでDAG循環や孤立モデルを検査 5
  5. 【データ横丁 LTフェス】BigQuery Graph/Measure と AI の話 AST(抽象構文木)はいいぞ 文字列検索の限界 正規表現だとコメントや改行に騙される。 構文木なら構造そのものを捕まえられる。

    ▪最終クエリのノードをピンポイント特定 ▪DISTINCTやWHEREの混入を物理的に弾く ▪AIがどう小細工しても100%見抜く 現場での実践例(最終SELECT検証) -- [NG] AIが勝手に書きがちな例 select distinct * from final where is_active = 1; -- [OK] ASTが強制する正解 select * from final; ASTノードによる判定: ▪ select_clause_modifier ➔ 即座に遮断 ▪ where_clause の存在 ➔ 即座に遮断 株式会社インタースペース データ戦略推進室 6
  6. 【データ横丁 LTフェス】BigQuery Graph/Measure と AI の話 構文木はどう「異常」を見抜くのか 余計な「枝」を一発検知 構文木を展開すると、正解の木には生えていない 余計な枝が一目瞭然になる。

    ▪distinctノード: 生えた瞬間に即アウト ▪whereノード: 末尾に生えたら即アウト 文字の並びではなく「木の形」を見るから、改行 やスペースを弄ってもすり抜けない。 株式会社インタースペース データ戦略推進室 7
  7. 【データ横丁 LTフェス】BigQuery Graph/Measure と AI の話 エラーに「次の一手」を埋め込む ダメ出しだけじゃ直らない 単に「違反」とだけ返すとAIは迷走する。 何がダメで、どう直すかをセットで返す。

    ▪ダメな例: 形式が不正です ➔ 直し方が分からずAI迷走 ▪現場の例: ここをこう直せ ➔ 修正指示を読んでAIが一発自己修正! 株式会社インタースペース データ戦略推進室 現場のLinter出力とAIの自律修正 L: 35 | Rule_MartsFinal_L001 [事象] 最終SELECTでは '*' のみ指定可能です。 [次の一手] 列の加工は上流CTEで行い、 末尾は 'select * from final' に修正してください。 -- ➔ AIがエラー指示を読んで即座に自律修正! select * from final; 8
  8. 【データ横丁 LTフェス】BigQuery Graph/Measure と AI の話 コメントのYAMLパースは必須 コメントをポエムにするな 自然言語で書かせるから ブレて機械テストができない。

    ▪外せばそのままYAML コメントを自然言語のポエムにしない ▪CIで機械検証 yaml.safe_load() で自動テスト ▪文脈が固定されAIも迷わない 株式会社インタースペース データ戦略推進室 現場の記述例 & パースサンプル /* meta: model: marts_monthly_sales grain: [target_month, merchant_id] dimensions: [target_month, merchant_id] measures: [sales_amount, order_count] */ # CIでコメントをYAMLパースして決定論テスト spec = yaml.safe_load(extract_comment(sql)) assert spec["meta"]["grain"] == ["target_month", "merchant_id"] 9
  9. 【データ横丁 LTフェス】BigQuery Graph/Measure と AI の話 AIのために書くな。 同僚のエンジニアのために書け。 利害は完全に一致する 「同僚が読みやすいコード」を目指して整えた規

    約は、AIにとっても最強の足場だった。 ▪エンジニア コードが読みやすくレビュー爆速 ▪AI 文脈が固定されハルシネーション激減 ▪結論 人に優しい規約こそ、最強のAI足場! 株式会社インタースペース データ戦略推進室 10
  10. 【データ横丁 LTフェス】BigQuery Graph/Measure と AI の話 こうして、ハーネスの土台ができてきた やっとスタートラインに立てた 完璧には程遠いけれど、AIがルールを破らず動く 「足場」はようやくできた。

    ▪公式ルールで全体の8割をカバー ▪現場の急所だけ自作ASTで塞ぐ ▪AIが暴走しない開発環境が整った! さあ、いよいよ本丸の導入へ……! 株式会社インタースペース データ戦略推進室 11
  11. では、BigQuery Graph / Measure は ――次回でーす!! 【データ横丁 LTフェス】BigQuery Graph/Measure と

    AI の話 ハーネス作りに全力を注ぎすぎました。次回こそ本番導入編をやります! 株式会社インタースペース データ戦略推進室 12