ふくふくHukuhuku Inc.
EP.06Foundation 13分公開: 2026-05-10

本番運用5年、チーム3人で回せる構成のために決めた7つのこと

5年継続のクライアント案件でたどり着いた、運用負荷を最小化する設計判断の集大成。SNS拡散狙いの代表記事。

#運用#アーキテクチャ#ベストプラクティス
シェア

メディア大手のクライアント案件で、私たちは5年以上同じデータ基盤を運用してきました。チーム3人体制(うち1人は0.5人月)で、9業界・30万DAU規模のWebアクセスログを毎日処理しています。今回は、その期間で「これは決めて良かった」「これは早めに決めるべきだった」という7つの判断をまとめます。

決定 1:「ジョブはすべて冪等」を絶対ルールに

再実行で結果が変わるジョブは、いずれ必ず人間を起こします。最初は面倒でも、INSERT ではなく MERGE / UPSERT、ファイルは同名上書き、結果テーブルは TRUNCATE → INSERT。冪等にすると、夜間障害時の対処が「とりあえずもう一回回す」だけで済むようになります。

決定 2:環境分離は最小2層、最大3層

devPR ごと spin upサンプル1%データCIで自動破棄staging本番データの10%スキーマ=本番main マージ後production100%データstaging通過後のみ手動承認+自動デプロイ
環境構成(5年経って落ち着いた形)

決定 3:データの「源泉」を明文化する

「このカラムの値はどこから来てる?」を辿れる状態にしておくのが、運用5年の安心感に直結します。 の lineage 機能で source → staging → mart → の経路がワンクリックで見える状態を維持します。

決定 4:CIの実行時間を「2分以内」に死守

が10分超えると、開発者は PR を出すのを嫌がるようになります。差分実行(dbt の state:modified+)、テストの並列化、不要なdocs生成のスキップで、私たちのプロジェクトは2分以内をキープしています。

決定 5:エラー文言を「次の人が分かる」に揃える

エラー文言テンプレート

[severity] [pipeline_name] [step_name]: 何が起きたか / 何が原因か / 誰がやるべきか の4要素を必ず含める。例: "[L2] sales_daily / dbt_test: amount NULL率 5% 超過 / Salesforce APIのレート制限の可能性 / 朝会で確認"

決定 6:「人にしか分からない」を作らない

5年の間に、メンバー入れ替えは2回ありました。新メンバーが1週間で立ち上がるために、Onboarding チェックリスト(30項目)を維持しています。「Slackで先輩に聞く」を撲滅するのが、属人化排除の本質です。

決定 7:月次で必ず「何を捨てたか」を記録

新規追加だけでなく、廃止したテーブル・廃止したジョブ・廃止したダッシュボードも記録します。3年経つと「いつから動いているか分からない」「誰が何のために作ったか分からない」モノが必ず出てきます。月次で棚卸しして、不要なものは確実に消す。これが運用負荷を線形に保つ秘訣です。

に「運用負荷見える化」を任せる

プロンプト例(Claude Code)
この dbt プロジェクトと過去6ヶ月のジョブ実行ログから、運用負荷の見える化レポートを生成してください。

## 出力
1. 上位5モデル:実行時間が長い/コスト高い
2. 上位5モデル:失敗率が高い
3. 上位5モデル:誰も参照していない(lineage で下流が無い)
4. CI実行時間の月次推移
5. 「廃止候補」のサジェスト(過去90日参照ゼロ)

## 入力
@dbt_project/
@logs/dbt-run-results-*.json
@bigquery/info_schema_jobs_export.csv
想定される実行結果(例示)
## 運用負荷見える化レポート(2026-06)

### 1. 実行時間 TOP5
| モデル | 平均時間 | 月次コスト |
|---|---|---|
| fct_user_actions | 18分 | $48 |
| int_session_enrichment | 12分 | $32 |
| ... |

### 2. 失敗率 TOP5
| モデル | 失敗率 | 主原因 |
|---|---|---|
| stg_salesforce__leads | 8% | API レート制限 |
| ... |

### 3. 参照ゼロ TOP5(廃止候補)
- `legacy_user_segments` - 過去90日参照ゼロ、最終更新 2024-08
- `temp_q4_analysis` - 一時用、消し忘れ
- ... 5モデル合計で月 $87 / 月20分の実行時間を削減可能

### 4. CI実行時間
2026-01: 1.8分 → 2026-06: 2.4分(+0.6分)
理由: モデル数 +12%、テスト数 +18%
推奨: state:modified+ の deferred-state 設定見直し

### 5. アクション
`scripts/cleanup_unused.sh` 生成完了。dry-run で5モデル削除候補。

5年の振り返り:もし最初に戻るなら

もし5年前に戻れるなら、最初の3週間で「命名規約」「環境分離」「冪等性」「Runbook」の4つを完璧に固めます。それ以外は走りながら直せます。最初に固めなかったツケが、その後の5年でどれだけのコストになるかは、想像以上です。

次回予告

EP.07 では、運用5年で必ず突き当たる「コスト最適化」のテーマ。で月予算を読みやすくする実装パターンと、年間 $10万 削減した実例を共有します。

シェア

この記事の感想を教えてください

あなたの 1 クリックで、本当にこの記事は更新されます。「もっと詳しく」「続編希望」が一定数集まった記事は、 ふくふくが 実際に内容を拡充したり続編記事を公開 します。 送信したリアクションはお使いのブラウザに記録され、再カウントされません。

シリーズの外も探す:

まずは、現状を聞かせてください。

要件が固まっていなくて大丈夫です。現状診断と方針提案までを無料でお手伝いします。

無料相談フォームへ hello [at] hukuhuku [dot] co [dot] jp