dbtテスト
staging・marts・ダッシュボードビュー全て、実BigQueryでパス
Loading project...
設計者・実装者・運用者(単独)
1人
2026年7月開始。P0〜P3を計画前倒しで完了、記事2本(9月期限)が残り
自分自身の運用履歴 — 5つの個人リポジトリにまたがる188件のコミット・公開記事20本・ローカルで集計した学び/セッション記録(取り込み対象は個人リポジトリと個人ログのみ。許可リストで明示的に限定) — を、問い合わせ可能な証拠に変換する個人用データ基盤です。Terraformで管理されたBigQuery 3層構造に加え、公開コーパスに質問できるCloud Run上のRAG APIも備えます。全構成をGCP無料枠だけで運用する設計 — dbtテスト71件パス、自動テスト144件パス、既知質問の検索精度5/5を実測しています。(コミット・記事件数は2026-08-13時点)
自分の運用履歴 — 188件のコミット・公開記事20本・ローカルに残した学び/セッションの記録 — は能力の裏付けになっていたが、散らばったローカルファイルとしてしか存在せず、見知らぬ第三者が検証できる形ではなかった。技術者の読者は検証できない主張を割り引いて評価する — 「信じてほしい」は「このクエリを叩いてみて」に負ける。必要だったのは、もっと大きなアプリではありません。自分の運用履歴を、見知らぬ第三者が自分で動かし・問い合わせ・検証できる形に変換する手段でした — しかも金をかけずに。
Terraformで管理する3層のBigQuery基盤 — raw(正であるローカルのgit履歴・Markdownファイルの忠実な複製)・staging・marts(いずれもdbt Coreで構築・テスト) — が、非公開のLooker Studio証拠ダッシュボードと、Bearer認証で保護されたCloud Run上のRAG API(エンドポイントURLは非公開)の両方に流れ込みます。APIは公開済み記事コーパスをGeminiでチャンク化・埋め込みし、BigQueryのブルートフォースVECTOR_SEARCHで質問に回答します(クエリ単位のバイト上限・単一インスタンス・日次リクエスト上限で課金の上限を機械的に固定)。無料枠のあらゆる制約 — 禁止操作リスト・¥1,000予算アラート・リージョン固定 — は後付けで足さず、最初からの設計入力でした。
自分の運用履歴 — 188件のコミット・公開記事20本・ローカルに残した学び/セッションの記録 — は能力の裏付けになっていたが、散らばったローカルファイルとしてしか存在せず、見知らぬ第三者が検証できる形ではなかった。技術者の読者は検証できない主張を割り引いて評価する — 「信じてほしい」は「このクエリを叩いてみて」に負ける。必要だったのは、もっと大きなアプリではありません。自分の運用履歴を、見知らぬ第三者が自分で動かし・問い合わせ・検証できる形に変換する手段でした — しかも金をかけずに。
Terraformで管理する3層のBigQuery基盤 — raw(正であるローカルのgit履歴・Markdownファイルの忠実な複製)・staging・marts(いずれもdbt Coreで構築・テスト) — が、非公開のLooker Studio証拠ダッシュボードと、Bearer認証で保護されたCloud Run上のRAG API(エンドポイントURLは非公開)の両方に流れ込みます。APIは公開済み記事コーパスをGeminiでチャンク化・埋め込みし、BigQueryのブルートフォースVECTOR_SEARCHで質問に回答します(クエリ単位のバイト上限・単一インスタンス・日次リクエスト上限で課金の上限を機械的に固定)。無料枠のあらゆる制約 — 禁止操作リスト・¥1,000予算アラート・リージョン固定 — は後付けで足さず、最初からの設計入力でした。
無料枠の制約は回避すべき制限ではありません。仕様そのものです。そして見栄えの良いデモより正直さを取る — コーパスがBigQueryのANNベクトルインデックスの最低要件(5,000行・10MB以上)に届かないなら、隠さずREADMEに書いてブルートフォース検索を出す。コードを書く前に誤った前提を捕まえる方が、書いた後に捕まえるより安い — 着工前レビューで、無料サンドボックスの60日テーブル失効期限とDML制限の組み合わせが、import前提の移行計画を静かに壊すと判明。設計を「Terraformでソースから作り直す」に変え、「importして祈る」にはしなかった。
禁止操作リスト(ストリーミング挿入・GKE・常時起動VM)を文書化し、¥1,000の予算アラート・リージョン固定(BigQuery=USマルチリージョン、GCS/Cloud Run=us-central1)で全コンポーネントをGCP恒久無料枠内に収める — READMEの費用内訳表で1行ずつ検算済み。
実装前レビューで、無料サンドボックスの60日テーブル失効期限とDML操作不可の組み合わせが、「サンドボックスのデータをそのままimportする」という素朴な移行計画を静かに壊すと判明。対処は、ローカルのgit/Markdownを正のデータとして扱い、Terraformで全てを作り直すこと — その場のパッチでなく設計判断として。
Airflow/Dagster・GKE・Kafka・専用ベクトルDB・Dataformは検討のうえ不採用 — それぞれ理由付きで(週1バッチロードに指揮者は不要/BigQuery自体がベクトル検索を担う/dbtが業界標準の変換層)。採用した技術と同じくらい、不採用にした技術も見える形で残す。
Cloud Run上のFastAPIが公開済み記事コーパス(2026-08-13時点で20記事→290チャンクに分割、うち286件を埋め込み・検索可能化。無料枠のレート制限で毎回一部チャンクが欠落する現象を複数回の実行で再現確認し、隠さずロード台帳に記録・Gemini埋め込み・BigQuery VECTOR_SEARCH)への質問に答える。ブルートフォース検索は呼び出しごとにテーブル全体をスキャンするため、真の防御はリクエスト制限でなく、クエリ単位のバイト上限(maximum_bytes_billed)・単一インスタンス上限・日次リクエスト上限 — いずれも無料枠の数値上限に対して検算済み。
「動くはず」でなく物理的証拠で各フェーズを検収しながら進めた。無料のBigQueryサンドボックスでデータモデルを課金前に検証 → Terraform移行で全てを作り直しリポジトリを公開 → dbt Coreで型付き・テスト済みの変換層(dbtテスト71件パス)とLooker Studioダッシュボードを追加 → Cloud Run上のRAG API(Gemini埋め込み+BigQuery VECTOR_SEARCH)で閉じた。リポジトリ公開は出荷前に独立監査を経た。本番デプロイでは監査の発火を一度取り逃がし、稼働後の棚卸しで気づいて遡及監査を実施 — そこでCritical(重大)指摘を1件発見・是正した。ゲートの取り逃がし自体を記録に残している。
staging・marts・ダッシュボードビュー全て、実BigQueryでパス
ローダー・dbt・RAG APIをテスト駆動で構築、全件パス
既知質問ベンチマークでtop-1正解ヒット(類似度0.71〜0.84)
禁止操作リスト・¥1,000予算アラート・クエリ単位の上限で全構成をGCP恒久無料枠内に収める設計。トライアルクレジット失効(2026-10-27)後の実請求額は今後の確認事項(未確認)