全国オンライン対応受付 平日 9:00-18:00
お問い合わせ

開発記録 / DX経営ゲーム制作記 / Vol.4 本番運用とトラブル

記事 17

ステージングと本番の同一性をどう管理するか

「ステージングで動いたのに、本番で動かない」——これはシステム開発者が最も嫌いな状況の一つだ。この問題を防ぐために、ステージング環境と本番環境の「同一性管理」を徹底している。

2026-06-02 公開

「ステージングで動いたのに、本番で動かない」——これはシステム開発者が最も嫌いな状況の一つだ。この問題を防ぐために、ステージング環境と本番環境の「同一性管理」を徹底している。


4つの環境が同時に動いている

現在のサーバー構成はこうだ。本番(個人編)https://dxgame.jp port8000、本番(チーム編)https://team.dxgame.jp port8001、ステージング(個人編)https://staging.dxgame.jp port8002、ステージング(チーム編)https://staging-team.dxgame.jp port8003。全て同じEC2サーバーの上で動いている。


「同一性」を何で確認するか

コードファイルのmd5sum比較——本番とステージングの主要ファイルのハッシュ値を比較する。DBスキーマ比較——テーブル構造・カラム数・型を自動比較する。Pythonパッケージ比較——pip freezeの出力を比較する。これら3つの確認を自動化した。


「LEGACYカラム」問題

完璧な同一性管理ができない場合がある。本番DBにはlinked_game_idとindividual_company_idという2つのカラムが残っている。コードからは削除済みだが、本番DBのみに残るカラムだ。テストスクリプトはこの差異を「LEGACY(既知の差異)」として記録し、エラーとして扱わない。既知の差異は管理された差異だ。

md5sumによる管理と「差異が出た具体例」

「ステージングと本番のコードが本当に同じか」を確認する方法として、主要Pythonファイルのmd5sumハッシュ値比較を自動化している。実際に差異が出た事例を記録しておく。

差異事例1:hotfixを本番に直接適用した後

研修前日の深夜、ステージングで確認する時間がなく、本番に直接hotfixを適用した。翌朝、テストスクリプトが「turn_engine.pyのmd5sumが一致しない」と報告した。hotfixの内容をステージングにも適用することで解消したが、「どこで差が出たか」が一瞬で分かった。

差異事例2:ステージング用デバッグコードを消し忘れた

ステージングで調査用にprint文を数行追加して、そのまま本番にデプロイしてしまった。md5sum比較でファイルの差異が検出された。printで残った調査コードを削除してステージングに再デプロイし、本番にも反映することで解消した。デバッグコードの混入はセキュリティリスク(内部情報がログに出力される)でもあり、早期発見できたのはテストの価値だった。

「管理された差異」の扱い

本番DBにのみ存在するLEGACYカラム(linked_game_idとindividual_company_id)は、既知の差異として管理している。テストスクリプトの設定ファイルに「KNOWN_LEGACY_COLUMNS」としてリストアップし、この差異が検出されても「警告」として表示するが「FAIL」にはしない。

「知らない差異」は問題だが、「知っている差異」は管理の対象だ。この区別が、自動テストをうるさくなく、かつ正確に機能させるポイントだ。


*次回は「GitHub Actionsで5分で死活監視を作った」*

EC2直接編集で本番だけファイルが変わっていた事件

ステージングと本番の管理で、一番反省した出来事を記録する。

深夜に本番環境で小さなバグが発覚した。研修開始まで12時間。ステージングでテストする時間を節約するため、本番EC2に直接SSHでログインしてturn_engine.pyを直接編集した。1行の修正だ。動作確認してすぐに眠った。

翌朝、run_checks.pyを走らせると「turn_engine.pyのmd5sumが不一致」が出た。「昨夜本番を直接編集したからだ」と気づいた。ステージングには修正が反映されていない。本番だけ変わっている。

この状態は管理として危険だ。「本番にだけ存在するコード変更」が生まれると、次にステージングからデプロイしたとき、このhotfixが上書きされて消える。デプロイするたびにhotfixを再適用しなければならなくなる。

以降のルールとして「本番への直接編集は禁止。緊急でもステージングで確認してからデプロイする」を徹底した。確認時間が増えるが、「管理されていない差異」が生まれるリスクを排除できる。

デバッグコードの混入事案も経験した。ステージングで調査用にprint文を追加してそのまま本番デプロイしてしまったことがある。md5sum比較でファイルの差異が検出され、デバッグコードを削除してから再デプロイした。本番ログへの内部情報露出を早期に防げた事例だ。md5sum監視がなければ、直接編集やデバッグコード混入はいつまでも見えないリスクとして残っていた。

*シンプルシステム株式会社 代表 伊藤勝彦*