staging 環境とは何か?
staging 環境とは、変更が実際のユーザーに届く前に、現実的な条件下でテストするために使われる production のほぼ複製です。
staging はソフトウェアデリバリのドレスリハーサルです。実用的な範囲でできるだけ production を忠実に再現し、最終チェックが現実的なものに対して行われるようにして、開発者のノート PC の外でしか現れない問題を捉えます。
何であるか
staging 環境は production と同じソフトウェア、構成、そしておおよそ同じデータの形を動かしますが、実際の顧客には使われません。production リリースの前、deployment pipeline における最後のゲートであり、変更が production に近い設定で機能することを確認する場所です。
どう使われるか
- 候補となる build を自動的に staging へ deploy する。
- それに対して smoke test と受け入れチェックを実行する。
- リスクの高い変更は人間が手動で検証する。
- 合格したら同一の artifact を production へ昇格させる。
例
新しい checkout フローが staging に deploy されます。自動化された end-to-end テストが購入を通しで実行し、QA エンジニアがエッジケースをクリックして回ります。ローカルでは決して現れなかった構成の問題がここで表面化し、修正され、その後にのみ変更が production へ昇格され、実際の顧客はそのバグを見ずに済みます。
なぜ重要か
staging は環境に依存する種類のバグを捉えます。欠けた config、実サービスとの integration の問題、現実的なデータ下でのパフォーマンスなどです。それらを staging で捉える方が、ユーザーと収益に影響する production で捉えるよりはるかに安価です。
production に近い状態を保つ
staging 環境は production に似ている限りにおいてのみ有用です。drift、異なる config、古いデータ、欠けたサービスは、バグをすり抜けさせます。両方の環境を Infrastructure as Code で定義することは、それらを整合させる一般的な方法です。
重要なポイント
- staging はリリース前の最終チェックのための production に近い環境である。
- ユーザーより先に環境依存のバグを捉える。
- その価値は production に近い状態を保てるかどうかに依存する。