検証環境 本番環境 違い
ステージング環境という言葉は、ソフトウェア開発に携わっていてもあまり聞き慣れない方もいるかもしれません。この記事では、ソフトウェア開発プロセスにおける、各種の環境(≒多くの場合、独立したサーバー環境)の違いについて触れてみます。目次システム開発において、「ステージング環境」とは、本番環境に条件を限りなく近づけた「最終テスト用に用いる、本番環境と類似のテスト環境」を指します。特に、ウェブシステムなどの継続的な保守・改修が行われるシステムにおいては、本番環境へデプロイ(リリース)直前に、その最終検証をできるだけ精密に、慎重行うため、本番環境の類似環境を用意し、実際の本番デプロイ作業やデプロイ後の状態を検証します。このような環境が「ステージング環境」と呼ばれ、しばしば以下のような目的で利用します。次々に新しい変更やバグ修正が加えられる開発環境やテスト環境では、時に本番と条件の乖離が生じがちです。そのような環境とは別に、安定していて、かつ、極限まで本番環境に近い類似環境を最終検証に利用することによって、本番デプロイ時に環境条件の違いなどに起因する予期せぬ動作不良がおこるリスクをできるだけ下げることが目的となります。また、本番環境を模して、安定しているということで、意思決定者(顧客、上司など)のためのレビュー用の環境として適している側面もあります。チームや、開発システムの規模によって異なりますが、最も基本的な環境の分け方は、以下の4つと言えると思います。 ※「検証(テスト)」は、しばしば英語で「Quality Assurance」と言われるので「QA環境」と呼ぶ事もあります。開発環境は、基本的にはあなたの手元のパソコンの環境の事が多いでしょう。ただし、もしチームで開発をしていれば、複数の人同士で、開発した機能を共有し合ったりコードを統合して動作確認をしたりするための統合開発環境を、リモートに用意することもあると思います。逆にそのような必要がなければ、ローカル環境で変更を統合し、直接検証環境へデプロイしてテストを開始すれば、それで事足りる事も少なくないでしょう。開発し終わった、リリース予定の機能をテストするための環境です。開発環境と検証環境を分けて置くことで、テスト中のシステムの状態を変更することなく、平行して別の開発を進めることができます。このような環境の分離は、特に「テスト担当者」と「開発者」が別れている場合に、よく発生します。逆に、チームの規模が小さければ、これらの環境を分ける必要は必ずしもないかもしれません。開発の規模がもっと大きければ、開発環境や検証環境はチーム内に1つだけではなく、複数用意するかもしれません。同時に別々にリリース予定の機能を並行して開発したり、複数のテスト担当者が、同じタイミングで別の機能をテストしたりするからです。また、近年の開発手法(アジャイル開発)では、システムは自動テストを含むように開発され、このような検証環境を使って継続的なテストを自動で常に走らせておくことも、一般的だと思います。前述の通り、ステージング環境は、基本的には本番とほぼ同一の状態を擬似的に再現する事が意図されています。これによって「テスト環境では動いたのに、本番にリリースしたら、不具合が起きた・・」などのリスクを極限まで下げる事が主な目的です。ですので、もしシステムが、データベースなどの他のサービスに依存している場合は、それらの付随サービスの状態を、本番に近づければ近づけるど、そのリスクは下がります。ウェブサーバーを利用するようなウェブシステムの開発では、本番と完全に同一のサーバー環境を再現し、本番と同一の(もしくは、完全な複製の)データベースに接続するような環境を用意する事になります。本番にデプロイした状態を擬似的に作れますので、プロジェクトのオーナー(あなたの顧客か、上司だと思います。)にレビューを依頼するのに適しているかもしれません。ステージング環境の構築は、近年は仮想化やクラウド環境への以降が一般化し、同一の環境を用意するのが、かなり容易になっています。「Virtual Box 」と「ステージング環境としての目的に限らず、チームメンバー全員が同一な開発環境を構築するような場合は、このような仮想環境は非常に重宝します。ここが最後の環境です。同時に、ここにデプロイすることが、開発のゴールでもあります。ウェブサービスであれば、世の中のエンドユーザが(もしくは、顧客が)使い始める事になります。本番環境までのいくつかのステップで、もうあなたは十分にテストしたと思えるかもしれません。(もしくは、今回時間がなくて、あまり検証できなかったかもしれません・・・。)どちらだとしてもしても、もし本番へのデプロイの後、本番環境で何か大きな問題が発生すれば、それは文字通り、緊急自体となります。エンドユーザがすでに利用を始めてしまうからです。「表示されない」「クラッシュした」「お金を払ったのに機能が動かない」怒ったエンドユーザが一斉にTwitterに文句を書き込み始めるかもしれません。もしくは、クライアントがかんかんに怒って電話してくるかもしれません。ウェブサービスの運用経験があれば実際に経験した方も多いと思いますが・・・、昼でも夜でも、緊急の対応が必要になります。システムの規模が大きければ大きいほど、なにか実際に損害が発生したときの被害は深刻になります。できるだけ被害を最小に抑えなければ行けません。多くの場合、これはビジネスです。「予期できなった問題」だと思っても、発生してしまった損失は帰ってこないのです。もし深刻な問題が発生してしまったら、なぜその問題を事前に予想できなかったのか?何がいけなかったのか、どうすれば同じような問題の発生を防げるのか?原因を明らかにし、それを防ぐ指針を見つけて、あなたの環境構成や、デプロイまでのフローにフィードバックし、改善を行うする必要があるはずです。本番環境での「予期せぬ出来事」に関しては、私自身、いろいろな過去の失敗が思い出されます。とにかく、あなたの努力の結晶である開発内容を、本番へのデプロイをスムーズに達成して、気持ちよく眠りにつけるよう、しっかりとリスクを下げられる環境構成を考えたいものです。冒頭でも述べましたが、開発システムに最適な環境構成は、開発規模によって違う思います。チーム規模ではなく、個人的なレベルの開発では、作業に関わる人も少ないので、小さな構成にすることで、開発コストが下がります。例えば、あなたが個人的に、ウェブサービスを開発するときの環境構成は以下のようなものかもしれません。上記の場合、基本的に開発者はあなた一人です。手元で開発して、ある程度ローカル環境でテストを済ませた機能を、ステージング環境にデプロイし、最終テストを行います。そしてテストし終わったステージング環境の状態を、そのまま顧客に最終チェックしてもらいます。正しくテストを行えるように、必要があれば本番のデータをステージング環境に複製します。(データに依存しない機能であれば、データのシンクはケアしなくて良いはずです。)最終テストと顧客のレビューが終われば、晴れて本番にデプロイする、という流れです。安心して眠りにつけるよう(ここ大事です)、しっかりテストしてくださいね。ウェブサイトの開発ではよく用いられるWordpressですが、当サイトでも過去にWordpressのステージング環境に関して、記事を作成しています。手前味噌ながら、ご参考まで。開発内容によって、最適な環境構成が違うと思いますので、追ってもうすこし網羅的に更新する予定です。ステージング環境に関する解説記事(英語)です。 以上、ステージング環境についてでした。「WWWクリエイターズへようこそ!