ENGLISH

コーディング環境/テスト環境/本番環境の分離

開発と本番を分離した環境の構築


開発と本番の分離は、甘く見てるととんでもない目に合う。しかも、開発環境と本番環境で全く同じソースコードが動くことが肝心。以前のプロジェクトで、本番用にコンパイルするためにパラメータを書き換えなければならない仕組みだったことがあるが、面倒くさいしミスを誘発するし、良いことは一つもなかった。
オンプレでの開発なら物理的にサーバー分けてLANも物理的に分けて開発すれば完ぺきに分離できるし、本番・開発で同じモジュール使ってテストできる。
今回は GCP + Firebase の環境でこれを実現する。

コーディング環境:
コーディング~UTまでの工程については、アプリ担当者のPC上で実施する方針。
開発言語は JavaScript / Python なので、開発環境は VIsual Studio Code で決まり。
UT 用のツールも充実しているので、HTML の確認から、Python、JavaScript、それぞれの確認が PC で完結する。nodeserver 動かして動作確認したり、Debugger for Chrome で JavaScript をステップ実行できたりと、至れり尽くせり。
唯一、ローカルのWEBサーバーでは CGI を呼び出せないので、JavaScript と Python の連携については、テストサーバーで実施する。

テスト環境(検証環境):
Github のウエブフックを使って Github にプッシュされたら Master の内容をテスト用のWEBサーバーに自動デプロイする仕組みにしている。
また、サーバーで発生した CGI (Python) のログはアプリ担当者に情報提供するために開発サーバー上にWEBページを作って公開している。
これにより、アプリ担当者がサーバーにログインすることを禁止できる。
アプリ担当者にサーバーへのログインを許しているプロジェクトもあると思うが、ログイン禁止にすることを強くお勧めする。システムを守るためには、開発担当者に勝手なことをさせないのが必須だ。(あくまでも個人的な感想です)

本番環境:
本番環境へのデプロイは手動で実施している。プログラムが完璧に完成していても、ユーザーへの告知とか、プロモーションの準備とか、人間系の事情でリリースのタイミングが変わるから。
本番の CGI (Python) のログも開発サーバー同様アプリ担当者に公開している。

本番と開発の使い分け:
当プロジェクトでは、JavaScript(ブラウザ)からの DB へのアクセスは禁止している(アクセスは全部拒否 allow read, write: if false;)。DB へのアクセスはバックエンド(CGI つまり Python)からサービスアカウントのキーファイルを使って管理者権限でアクセスしている。
このため、開発サーバーの CGI で実行された時と本番サーバーの CGI で実行した時で使用するキーファイルを変える必要がある。また、複数のプロジェクト毎に Firebase のプロジェクトを分けているので、これらも使い分ける必要がある。
あらかじめFirebase のプロジェクト名と本番・開発のマトリックスを作ってサーバーに保存しておく方法でコントロールしている。

詳しくはこちらをご覧ください。複数の Firebase project を使い分ける方法
次の記事:サーバーのセキュリティ