構成情報と環境

構成情報に対する典型的なアプローチには、いくつもの問題があります。

  • チームの各メンバーは、自分自身の構成オプションを持っています。そのような構成をコミットすると、他のメンバーに影響を与えます。
  • 本番のデータベースのパスワードと API キーは、レポジトリに入れるべきではありません。
  • 複数のサーバ環境があります。すなわち、開発、テスト、本番などです。各サーバはそれ自身の構成情報を持たなければなりません。
  • 全ての構成オプションをすべての場合について定義するのは非常に反復の多い作業であり、保守するのにも時間を取りすぎます。

これらの問題を解決するために、Yii は単純な環境の概念を導入しました。 それぞれの環境は environments ディレクトリ配下の一群のファイルとして表現されます。init コマンドが環境を初期設定するのに使用されます。 init コマンドが実際にやっていることは、環境ディレクトリから、全てのアプリケーションがあるルート・ディレクトリへと、すべてをごっそりとコピーすることです。

デフォルトでは二つの環境があります。すなわち、devprod です。最初のものは開発用の環境で、全ての開発ツールとデバッグが有効になっています。 第二のものは本番サーバ配備用の環境で、デバッグと開発ツールは無効になっています。

典型的には、環境ディレクトリは index.php のようなアプリケーション・ブートストラップ・ファイルや、-local.php という接尾辞を持つ構成情報ファイルを含んでいます。 environments ディレクトリにあるローカルな構成情報は、init が実行された後に、対応するアプリケーション構成ディレクトリにコピーされるテンプレートです。 コピーされた後に、それらがローカルな構成情報となります。 このディレクトリに置く構成情報は、データベース接続の認証情報など、秘密の環境固有設定情報を保持するためのものであり、 バージョン・コントロール・システムに入れられることを意図しないものです。 このため、このディレクトリのファイルは .gitignore に追加され、git のステージングの対象から外されます。

重複を避けるために、構成情報はお互いを上書きします。 例えば、フロントエンドは次の順序で構成情報を読み取ります。

  • common/config/main.php
  • common/config/main-local.php
  • frontend/config/main.php
  • frontend/config/main-local.php

パラメータは次の順序で読まれます。

  • common/config/params.php
  • common/config/params-local.php
  • frontend/config/params.php
  • frontend/config/params-local.php

後の構成情報ファイルが先のものを上書きするわけです。

全体の枠組みはこのようになります。

アドバンスト・アプリケーションの構成情報