Vegas Engineering by FORBIS 記事一覧
Vegas Engineering Blog

通販基幹の“裏側”を、設計から語る。

AI時代の通販基幹エンジン Vegas を支える設計・実装を、図とコードで解説する技術ブログ。時刻バージョニング、リアルタイム在庫引当、販促ルールエンジン、そしてAI連携まで。

Architecture第1回

無停止で「未来」をリリースする — 時刻バージョニング型アーキテクチャ

価格改定もキャンペーンも「未来の日付」で予約し、当日はシステムを止めずに自動で切り替える。通販基盤 Vegas を支える中核設計。

読了 8分
Architecture第2回

ロックなしで、正確に在庫を引き当てる — Valkey + Lua のアトミック在庫エンジン

賞味期限・ロット・安全在庫を考慮した引当を、ロックを使わずに正確に。単一スレッド実行のLuaでどう整合を守るか。

読了 8分
Architecture第3回

1つのゲートウェイに集約する — 同期・非同期・イベントを束ねる中央APIゲートウェイ

全リクエストを単一の入口に集約し、時刻で解決して実体を呼ぶ。冪等リトライまで含めた"通る道"の設計。

読了 7分
Architecture第4回

書きと読みを、分ける — CQRS と射影パイプラインで両立させる"速い検索"と"堅い更新"

更新は文書指向で堅く、検索は正規化データで速く。2つのモデルを射影でつなぐ設計。

読了 7分
Architecture第5回

定義でルールを組む — 条件×特典のカートリッジ型 販促ルールエンジン

販促を「条件」と「特典」の部品の組み合わせとして表現し、開発を待たずに施策を追加する。

読了 8分
Reliability第6回

二重処理は、こうして防ぐ — キュー可視性タイムアウトとリトライの整合、そして冪等キー

「同じ注文が2件できる」はなぜ起きるのか。可視性タイムアウトとリトライ時間の関係から、防ぎ方までを設計として整理する。

読了 7分
Data第7回

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

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

読了 7分
Architecture第8回

入荷に追従する在庫 — 予定在庫への"先引当"と、入荷時の自動再配置

まだ届いていない在庫に注文を引き当て、入荷が確定したら引当を自動で組み替える。欠品と機会損失を減らす仕組み。

読了 7分
AI第9回

AIに基幹を任せる — preview→confirm→履歴→revert で作る安全なエージェント連携

全操作がWebAPIだから、AIは受注から出荷まで実行できる。暴走させないための"試す・承認・記録・戻す"の設計。

読了 8分
AI第10回

細粒度サーバーレスは、AIと相性がいい — 疎結合×定義駆動が生む"AIが改善提案できる"開発体験

機能を小さく分け、完全に疎結合にすると、影響範囲が閉じるだけでなく、AIによる改善提案・試作までしやすくなる。

読了 7分
Architecture第11回

大きなデータを、キーで渡す — Lambda間の大容量ペイロード受け渡し設計

同期呼び出しにもペイロード上限がある。大きな入力を安全に渡すために、データはインメモリに退避し、鍵だけを手渡す。

読了 6分
Architecture第12回

業務を「1つの入れ子ドキュメント」で表す — LCデータモデルと簡易形式

受注も定期も、関連する項目を一つのドキュメントにまとめて整合を取る。そして、読むときは扱いやすい形に開く。

読了 7分
Architecture第13回

業務ルールを"関数"で差し込む — チェック関数(DCF)と導出関数(DDF)の設計

検証と派生計算を、コードの海に埋めず「差し替え可能な関数」として登録する。定義駆動の書き込みエンジンの心臓部。

読了 8分
Architecture第14回

状態遷移と、関連への波及 — 受注ライフサイクルの状態管理とイベント伝播

状態は遷移表に沿って変わり、変更は関連エンティティへ自動で波及する。その設計と、循環という落とし穴。

読了 7分
Architecture第15回

状態変更を、疎結合に伝える — Kafka(MSK)によるイベントハブ連携

在庫・債権・通知…。ひとつの状態変更に多くの後続が反応する。それをイベントで疎結合につなぐ。

読了 7分
Architecture第16回

Redis/Valkeyを、5つの役割で使い分ける — インメモリ活用の設計

キャッシュ、分散ロック、大容量受け渡し、ルーティング解決、在庫台帳。同じ技術を役割ごとに最適化して使う。

読了 7分
Reliability第17回

"同じ注文"の更新を直列化する — Redisロックとハンドオフ方式

同一エンティティへの同時書き込みを、ロックと待ちキューで安全に順序化する。競合と不整合を根本から防ぐ。

読了 7分
Architecture第18回

検索を"設定"で組む — SQLテンプレート+動的WHERE+一時表の設計

検索クエリを外部ファイル化し、条件で動的に組み立て、結果を一時表に置いてページングする。柔軟で速い検索基盤。

読了 7分
Performance第19回

本番規模で測る — DBベンチマークの落とし穴と、"相関×直積"という真のボトルネック

静的な見た目や1回の計測は、しばしば嘘をつく。計測の作法と、実際に効く2つのボトルネック、その定石を共有する。

読了 8分
Data第20回

移行データの落とし穴 — "起点"のつもりが"最新"に化ける参照ミスと、循環参照

一括生成した親子リンクの取り違えは、後段の連鎖処理を暴発させる。実際に「注文が突然消える」まで起きうる。防ぎ方を整理する。

読了 7分
Architecture第21回

バッチを、なくす — 項目別タイマー起動イベントで実現するバッチレス設計

「全件を舐めて対象を探す」夜間バッチをやめ、各項目が自分の発火を"予約"する。軽量ティッカーが到来分だけを起こす、スキャンしない設計。

読了 7分