環境差異(開発・検証・本番)を管理する
「開発環境では動いたのに本番環境で動かない」というトラブルの多くは、環境ごとの差異が原因です。開発・検証・本番の環境をなぜ分け、どう揃えておくべきかを整理します。
なぜ環境を分けるのか
システム開発では通常、開発者が変更を試す「開発環境」、リリース前に動作確認を行う「検証環境」、利用者が実際に使う「本番環境」を分けて用意します。開発中の未完成な変更が、確認もされないまま利用者の目に触れてしまう事態を防ぐのが目的です。
「環境差異」が引き起こす問題
環境を分けていても、それぞれの構成(ソフトウェアのバージョン、設定値、連携する外部サービスなど)が揃っていないと、「検証環境では問題なかったのに、本番環境でだけ不具合が起きる」という事態が起こります。原因が環境差異にあると気づくまでに時間がかかることも多く、対応が後手に回りがちです。
環境を揃えるためにできること
構成をコードで管理する :IaC(Infrastructure as Code)入門で扱うように、環境の構成をコードとして記述しておけば、同じコードを各環境に適用することで構成の一致を保ちやすくなります。
設定値を環境ごとに切り分ける :接続先のデータベースやAPIキーなど、環境によって異なる値は、コードに直接書き込まず、環境変数のような形で外部から与える設計にしておきます。
本番相当のデータで検証する :検証環境のデータ量や種類が本番と大きく異なると、本番特有の不具合(データ量が多いことによる処理遅延など)を検証段階で見つけられません。個人情報を含む場合は、マスキングした本番相当のデータを使うといった配慮も必要です。
外部連携・通知系の扱いを把握しておく :メール送信や外部システムとの連携を、本番環境でのみ実際に実行し、検証環境では送信せずにモックへ置き換えている場合もあります。この場合、環境を揃えていても本番で動かして初めてわかる問題が残ることになります。どこまでが検証環境で確認できていて、どこからが本番でしか確認できないのかを、あらかじめ把握しておくことが大切です。
小規模なシステムでの現実的な落としどころ
環境を3つ以上厳密に分けるだけの予算や体制がない場合もあります。その場合でも、最低限「検証用の環境を1つ持つ」ことが、本番環境で初めて動作確認をするリスクを大きく減らします。委託先に開発を任せている場合も、検証環境が用意されているか、そこでどこまで確認してからリリースしているかを確認しておくとよいでしょう。