【30】そのコードに触れてはならない!
ステージングサーバでのシステムテストに入ってから、自分の書いたコードに問題が見つかり、それを知らせるメールがテストマネージャから届く、そんな経験はプログラマなら誰もがしていると思います。そのメールを見た時にプログラマか最初に思うことは、「すぐにそっちへ行って直させてくれ——どこが悪いかはわかっているから」ではないでしょうか。
「プログラマがステージングサーバを触ってもいいじゃないか」そう考えるのは一見、間違ってはいないように思えます。しかし、大局的にとらえるとやはりそれは間違いなのです。なぜでしょうか。
Web システム開発プロジェクトの環境は、次のようにアーキテクチャ分割されているのが普通です。
- 開発者のマシン上の、ローカル開発 / ユニットテスト環境
- 統合テストを手動、あるいは自動で行う開発サーバ
- 品質保証(QA)チームや顧客が受け入れテストを行うステージングサーバ
- 本番環境
もちろん、実際にはこれですべてではなく、他にもソースコード管理(SCM)や問題管理システム(ITS)などのサーバやサービスなどが色々と関わるのですが、おおまかには上のとおりと考えていいでしょう。上記のように分割されている場合、開発者は——たとえ上級開発者であっても——決して、開発サーバより後の環境に触れるべきではありません。開発の大半は、開発者のローカルマシンで行われます。開発者はローカルマシン上で自分に合った IDE や仮想マシンを利用し、その他にも独自のツールを使うなど個々に工夫して、良いコードを書くために最善を尽くします。
SCM へチェックイン後は(自動であれ手動であれ)開発サーバに配備させて、そこで必要に応じてテスト、修正を行うことになります。そのテストにより、全体が問題なく機能するか確認するのです。ここで注意すべきなのは、チェックイン以降は、開発者は基本的にはプロジェクト進行の「傍観者」になるということです。
コードをパッケージングして、QA チーム向けのステージングサーバに配備するのは、ステージングマネージャの仕事です。開発者が開発サーバより後の開発環境にアクセスすべきではないのと同様、QA チームおよび顧客は、開発サーバ上のものには手を触れるべきではありません。あくまで受け入れテストができる状態が整ってからリリースし、配備するのです。たとえば「開発サーバ上のシステムをちょっと見てくださいませんか?」と顧客に頼んではなりません。そのプ口ジェクトでコードを書いている人間が 1 人だけであれば話は違ってきますが、普通は他にもコーディングをしている人がいるはずです。全員が「いつユーザに見られても大丈夫」という状態でいるとは限りません。開発サーバとステージングサーバの両方にアクセスでさるのは、リリースマネージャだけにすべきです。
そして、たとえどんなことがあっても、開発者は本番環境に触れてはなりません。問題が起きた場合でも、それを修正するのは基本的に運用チームの仕事であり、仮に開発者が修正にあたるにしても、それは運用チームからの依頼であるべきです。そして修正を SCM へチェックインした後で、彼らが SCM からパッチを作成して運用するのです。私がプログラマとして経験した中でも「最悪」と言える事件は、誰か(まあ、それは私、なんですが……)が、この「必ず SCM へのチェックインして SCM からパッチを作る」というルールを守らなかったために起きたものでした。たとえシステムのどこかが壊れても、本番環境でそれを修理しようなどと考えてはいけません。