Vegas Engineering by FORBIS 記事一覧
← 記事一覧へ戻る
Data ・ 第7回

すべての変更を、記録する — 項目単位の差分履歴(監査ログ)の設計と活用

「いつ・誰が・どの項目を・どう変えたか」を差分で残す。監査・復旧、そしてAI操作の追跡までを支える土台。

Vegas 開発チーム ・ 2026-07-03 ・ 読了 7分

WHYなぜ項目単位の差分なのか

基幹エンジンでは、受注・顧客・在庫といったデータが日々書き換わります。「最終状態」だけを保持すると、ある値がなぜその値になったのかを後から説明できません。そこで採るのが、変更を「項目単位の差分(変更前→変更後)」として残す設計です。レコード全体を丸ごとコピーするのではなく、実際に動いた項目だけを差分として抽出することで、履歴は軽く、かつ「何が変わったか」が一目で読み取れます。

この差分に、実行者・日時・処理セッションIDを添えれば、「いつ・誰が・どの項目を・どう変えたか」が一件のレコードに閉じます。これが監査ログの最小単位になります。

FLOW共通の更新経路で生成する

要は、履歴を「書き込みのついで」に作るのではなく、すべての書き込みが必ず通る共通経路の中で生成することが肝心です。個々の業務ロジックが履歴生成を各自で実装すると、書き漏れや形式のばらつきが必ず生じます。

更新 書き込み要求 差分抽出 前→後を比較 履歴ストア 追記(不変)
図:すべての書き込みが共通経路を通り、差分を抽出して履歴ストアへ追記する

KEY保存キーとマスキング

履歴レコードは、業務単位ID(受注IDなど)と時刻を組み合わせたキーで保存します。こうしておくと、同じ業務単位の変更が時系列で自然に並び、「この受注に何が起きたか」を時間軸で辿れます。個人情報などマスキング対象の項目は、差分の値そのものを伏せて記録する配慮も入れられます。変更があった事実と実行者は残しつつ、中身は保護する、という監査とプライバシーの両立です。

項目A 前 → 後 項目B 前 → 後 実行者 ・ 処理セッションID 日時 ・ 業務単位ID
図:差分項目の配列に、実行者・日時・セッションIDというメタ情報を添えて一件に閉じる

USE五つの活用

audit-record.jsonJSON
{
  // 業務単位ID + 時刻 をキーに時系列で並ぶ
  "bizId": "ORDER-000000",
  "timestamp": "2026-07-03T09:15:22.481Z",
  "userId": "agent:vegas-bot-01",   // 人でもAIでも同じ枠に
  "sessionId": "sess-7f3a...c19",
  "rgstType": "upd",                 // add / upd / del
  "diffs": [
    { "field": "qty",   "before": 1,      "after": 3 },
    { "field": "status","before": "hold", "after": "ship" },
    { "field": "tel",   "before": "****",  "after": "****" }  // マスキング対象は値を伏せる
  ]
}

TRADEOFF増え続けるコストと引き換えに

追記型の履歴は、放っておけば無限に増えます。保持ポリシー(いつまで残すか、どこへアーカイブするか)、検索を支えるインデックス設計、そしてストレージコストの見積もりが前提として必要です。差分だけに絞る、マスキングで肥大化を抑える、といった工夫はここに効きます。一方で「どの時点も、どの操作単位でも再現できる」監査性は、事故対応やコンプライアンスの局面で明確な資産になります。増分のコストを払ってでも持つ価値がある、という判断が設計の分かれ目です。

TAKEAWAY

すべての書き込みを共通経路に通し、項目単位の差分に実行者・日時・セッションIDを添えて追記する。この一貫した記録が、監査・復旧・AI操作の追跡と改善までを同じ土台で支える。コストは保持ポリシーとインデックス設計で制御する。