もはや常識だと思うが、ウェブシステム開発にあたって3つの環境はそれぞれ独立して用意しておくといい。(独立といっても同じサーバにあっても構わないこともある。)
- 開発サーバ: 開発者用テスト環境
- ステージングサーバ: 顧客用レビュー環境
- プロダクションサーバ: 本番環境
開発サーバ
開発者がコミットした内容を開発者が反映し、開発者がテストする環境。基本的に顧客や運用チームに見せることはない。
ローカル開発環境とは別に用意するのがポイント。「ローカルだと動くんだけど」病にいち早く気がつくために重要。ローカルはしばしば、開発者がライブラリへのリンクや各種設定を無意識のうちに行なっていて、そのためローカルでは動くがサーバでは動かないということがある。
この病の典型的な例としては次のようなものがある。
- Case-Insentive環境(ローカル)で動くが、Case-sensitive環境(リモート)で動かない。パスを指定したファイル名の大文字小文字など。
- コミット漏れ。
- コードベースで管理されていないライブラリへのリンク
開発サーバは、個人によるプロジェクトであろうが、チームによるプロジェクトであろうが、ローカル環境とは独立した環境として用意しておくことが望ましい。
ステージングサーバ
ステージングは、運用担当や実際のユーザ(すなわち顧客)がテストを行う環境。ステージングには、開発サーバでテストが完了した機能・特徴が提供(デプロイ)される。
ステージングでのテストはデバッグのためのテストではなく(デバッグは既に開発サーバで完了していなければならない)、要件を満たしているか、実際の運用をするにあたって支障がないかなどを確認・レビューする。このレビューの結果、顧客からフィードバックが行われることがある。
プロダクションサーバ
プロダクションは、システムが製品として提供され、運用担当や実際のユーザ(顧客)がシステムを利用する本番環境。ステージングでテスト(レビュー)が完了した機能・特徴が提供される。