ENGLISH
コーディング環境/テスト環境/本番環境の分離
開発と本番を分離した環境の構築
開発と本番の分離は、甘く見てるととんでもない目に合う。しかも、開発環境と本番環境で全く同じソースコードが動くことが肝心。以前のプロジェクトで、本番用にコンパイルするためにパラメータを書き換えなければならない仕組みだったことがあるが、面倒くさいしミスを誘発するし、良いことは一つもなかった。
オンプレでの開発なら物理的にサーバー分けてLANも物理的に分けて開発すれば完ぺきに分離できるし、本番・開発で同じモジュール使ってテストできる。
今回は GCP + Firebase の環境でこれを実現する。
- データベースを分離 データベースはAPIKEY で識別されるので、Firebase のプロジェクトをテスト用と本番用それぞれ用意して使用した。
- サーバー(クラウドのインスタンス)は本番と開発で分離せず WEBアプリ開発の場合、アプリ担当者がサーバーにOSレベルでログインする必要は無いのでサーバーを分ける意味は無い
- WEBサーバーを分離 サーバー上にWEBサーバーを複数立てて、本番と開発を分離
- 開発中のソース管理 Github を使用しているが、管理はアプリ担当者にお任せ。ブランチ・プルリクエスト等どの様に管理しているかは知らない。アプリ担当とインフラ担当の授受は「Github の Master にコミットされたもの 」で行う
コーディング~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 を使い分ける方法