複数社が関わるプロジェクトでは、自チームが直接関与していない箇所で発生した問題であっても、結果として全体に影響が及ぶことがあります。
今回は、同一プロジェクト内の他社チームによるリリースミスが原因で大規模な障害が発生し、弊社チームも緊急対応に巻き込まれた事例について振り返ります。
発生した現象
障害が判明した後、弊社チームにも技術サポートおよび障害対応の要請が入りました。
ユーザーからの問い合わせに対応するため、急遽、専用の新規ページおよび機能を実装する必要が生じ、通常計画には存在しない作業が発生しました。
この対応は短期間での実装が求められたため、約10日間にわたり休日返上、日付変更後まで作業を行う状況となりました。
その結果、本来予定していた他業務に十分なリソースを割くことができず、チーム全体のスケジュールにも大きな影響が生じました。
想定される原因
本障害の直接原因は他社チームの成果物に含まれていた不備でしたが、プロセス面ではいくつかの問題が考えられます。
まず、開発後のチーム内成果物レビューが十分に機能していなかった可能性があります。
実装・動作確認後の社内レビューで問題を検出できていなかったことから、レビューが形骸化していた、あるいは実施自体が省略されていた可能性が否定できません。
ただし、実際の運用状況の詳細は確認できていません。
次に、受入時レビューの段階でも検出されなかった点です。
当該プロジェクトでは、複数社の成果物を集約した後に客先チームが受入確認やコードレビューを行う体制でしたが、開発環境向けのドライバコードがそのままリリース対象に含まれていたことに、誰も気づかなかった状態でした。
さらに、リリース後の動作確認においてNGケースが十分に考慮されていなかったことも影響したと考えられます。
決済周辺の処理に変更が入っていたにもかかわらず、異常系を含めた確認が徹底されておらず、リリース直後に問題を検知できませんでした。
その結果、発見が遅れ、被害が拡大し、問い合わせ対応用の機能を急造する必要が生じました。
対策について
本件は他社チーム起因の障害であり、弊社チームでは従来から以下を実施していました。
- 実装および動作確認後の社内レビュー
- 受入時のチームレビュー
- 正常系・異常系を含めたテストケースによる検証
そのため、本障害を契機とした開発プロセスの変更は特に行っていません。
結論
結果として、自身のチーム側では新たな対策の追加はありませんでした。
既存のレビュー・テスト体制は継続しつつ、緊急対応による影響を最小限に抑えることに注力しました。
この経験から学んだこと
今回の経験から強く感じたのは、「人の確認」に依存した仕組みには限界があるという点です。
レビューが二重に行われていたとしても、ヒューマンエラーが連続すれば問題はすり抜けてしまいます。
大規模システムでは、人の注意力だけに頼る運用は現実的ではありません。
そのため、アプリケーションが開発環境か本番環境かを確実に判別できる仕組みを、設計段階から組み込む必要性を認識しました。
例えば、環境識別用の設定ファイル(.env 等)を用いて実行環境を明示的に判定する、開発環境専用コードは「開発環境の場合のみ実行可能な条件分岐」に必ず入れる、といったルールです。
このような仕組みが存在すれば、仮にレビューをすり抜けたとしても、本番環境で開発用コードが動作する事態そのものを防げます。
今回の障害は自チームが直接引き起こしたものではありませんでしたが、システムはチーム単位ではなく“全体で一つ”として動きます。
だからこそ、属人的なチェックではなく、環境差異をシステム側で強制的に制御する設計が不可欠である――その重要性を改めて認識する出来事となりました。
大規模開発においては、「人が気を付ける」ではなく、「間違えられない仕組みを作る」。
この視点こそが、安定運用の鍵になると感じています。

