後へ      Topへ      次へ

WEB 共通設定の定義

WEBアプリの各所で同じ値を使う場合、
定義は一か所に纏めて管理したいものです。

Rails には、標準で config_for という機能が用意されてます。
ただ、これも全ての場所はカバーしてないので、少々工夫します。

参考リポジトリ: https://github.com/Bonv-dev/book_mgmt/commit/586c517
一部、https://github.com/Bonv-dev/book_mgmt/commit/16545d3 も含む。

config_for

定数などの定義を管理する仕組みです。

  1. 定数を書いた YAMLファイルを \config フォルダに追加します。
    サンプルプログラムなら \config\my_settings.yml です。
  2. \config\application.rb に、
    config_for(YAMLファイル名:拡張子なしのラベル) を追記します。
    サンプルプログラムなら config_for(:my_settings) です。
    これをconfig.x.settings に代入しておきましょう。
    config.x.settings = config_for(:my_settings).freeze
    になります。

以降は、サンプルプログラム前提で説明します。

ちなみに、
freeze は、オブジェクトの凍結(内容の変更を禁止)です。
定数は、途中で勝手に変えられると困るので。
ただ、完全に防止できるわけではないので、
詳細が必要な方は、Ruby リファレンスマニュアル を参照してください。
config.x は、WEBアプリ内で安全に使用できる領域です。
(Rails デフォルトの定義と衝突しないことが保証されています)

コントローラでの定数

Rails.application.config.x.settings で参照できます。

リポジトリ: https://github.com/Bonv-dev/book_mgmt/commit/586c517 では、
\app\controllers\application_controller.rb 内で直接参照していますが、
後のメーラー導入時、
(リポジトリ: https://github.com/Bonv-dev/book_mgmt/commit/16545d3 )
下のように書き直しました。

\app\controllers\concerns\load_settings.rb を新規作成し、
module LoadSettings で、
@my_settings = Rails.application.config.x.settings
と書きます。
\app\controllers\application_controller.rb 内で
include LoadSettings することで、
コントローラ全体で、@my_settings が参照できます。

モデルでの定数

\app\models\application_record.rb に、
MY_SETTINGS = Rails.application.config.x.settings
と書きます。
モデル全体で、MY_SETTINGS が参照できます。

ビューでの定数

コントローラで定義した @my_settings が、そのまま使えます。

ビューの JavaScript での定数

\app\views\layouts\application.html.erb に、

<script>
  window.MySettings = <%= @my_settings.to_json.html_safe %>;
</script>

と書くことで、
JavaScript 全体で window.MySettings が参照できます。

メーラーでの定数

上記「コントローラでの定数」の設定をしている前提です。

\app\mailers\application_mailer.rb に、
include LoadSettings することで、
メーラーのコード全体で、@my_settings が参照できます。

参考リポジトリ: https://github.com/Bonv-dev/book_mgmt/commit/16545d3


後へ      Topへ      次へ