書籍転載:Ruby on Rails 4アプリケーションプログラミング
Railsの設定情報
「第1章 イントロダクション」~「第2章 Ruby on Railsの基本」までの転載が完了。まとめて読んでRails開発を学ぼう。
書籍転載について
ご注意
本記事は、書籍の内容を改変することなく、そのまま転載したものです。このため用字用語の統一ルールなどはBuild Insiderのそれとは一致しません。あらかじめご了承ください。
前回は「2.4 モデルの基本」を説明しました。本稿はその続きです。Railsアプリケーションの作成方法については、第1回から順にお読みください。
2.5 Railsの設定情報
Railsアプリケーションの動作は、/configフォルダ配下の各種.rbファイル(設定ファイル)によって設定できます。以降の章でも何度も登場しますので、まずは基本的な構成をざっと鳥瞰しておきましょう。
2.5.1 主な設定ファイルの配置
図2-19に、よく利用するファイルをまとめておきます。
/config | |
---|---|
├─ application.rb | …… すべての環境で共通の設定ファイル |
├─ /environment | …… 環境ごとの設定ファイル |
│ ├─ development.rb | …… 開発環境での設定 |
│ ├─ test.rb | …… テスト環境での設定 |
│ └─ production.rb | …… 本番環境での設定 |
├─ /initializers | …… その他の初期化処理&設定情報 |
│ ├─ backtrace_silencers.rb | …… 例外バックトレースをフィルタ |
│ ├─ filter_parameter_logging.rb | …… ロギングから除外するパラメータ情報の条件 |
│ ├─ inflections.rb | …… 単数形/複数形の変換ルール |
│ ├─ mime_types.rb | …… アプリケーションで利用できるコンテンツタイプ(6.3.2項) |
│ ├─ secret_token.rb | …… クッキーを署名するためのトークン情報(6.4.2項) |
│ └─ session_store.rb | …… セッション保存のための設定情報(6.4.3項) |
└─ /locales | …… 国際化対応のためのリソースファイル(10.3節) |
※表中で示されている「節」および「項」はいずれも転載対象外です。
application.rbはアプリケーション共通の設定情報を、/environmentフォルダ配下の.rbファイルは各環境固有の設定情報を、それぞれ表します。よって、まず開発時にはdevelopment.rbを中心に編集を進めることになるでしょう。
/initializersフォルダ配下の.rbファイル(初期化ファイル)は、アプリケーション起動時にまとめてロードされます。デフォルトで用意されているファイルは、上のツリー図の通りですが、必要に応じて自分で.rbファイルを追加することもできます*44。
- *44 初期化ファイルは再帰的に読み込まれますので、initializersフォルダ配下にサブフォルダを設けて、その配下に保存しても構いません。
設定ファイル/初期化ファイルともに、アプリケーションの起動時に読み込まれますので、編集した場合にはWEBrickを再起動するのを忘れないようにしてください。
2.5.2 利用可能な主な設定パラメータ
設定ファイルでは、「config.パラメータ = 値」の形式で、表2-10のような項目を設定できます。重要なものは、以降の章でも改めて個別に触れていきますので、まずは「こんなものがあるんだな」という程度で眺めてみてください。
分類 | パラメータ名 | 概要 |
---|---|---|
基本 | cache_classes | アプリケーションクラスをキャッシュするか(デフォルトはdevelopment、test環境でfalse、production環境でtrue*45) |
cache_store | キャッシュの保存先(:memory_store、:file_store、:mem_cache_storeなど) | |
colorize_logging | ログ情報をカラーリング表示するか(デフォルトはtrue) | |
autoload_paths | 追加でロード対象となるパス(配列も可。たとえば、/libフォルダ配下のクラスを自動ロードさせるには、「config.autoload_paths |
|
asset_host | Assetヘルパーで、付与するホスト名 | |
log_level | ログレベル(デフォルトは:debug*46) | |
logger | 使用するロガーの種類(無効にする場合はnil) | |
time_zone | アプリケーションやActive Recordで利用するデフォルトのタイムゾーン*47 | |
i18n.default_locale | 国際化対応で利用するデフォルトのロケール(デフォルトは:en) | |
Active Record | active_record. |
利用するロガー(nilでロギングを無効化) |
active_record. |
スキーマのダンプ形式(:ruby、:sql)。デフォルトは:ruby | |
active_record. |
マイグレーションファイルをタイムスタンプで管理するか(デフォルトはtrue。falseではシリアル番号) | |
Action Controller | action_controller. |
デフォルトの文字コード(デフォルトはutf-8) |
action_controller. |
利用するロガー(nilでロギングを無効化) | |
action_controller. |
キャッシュ機能を有効にするか | |
session_store | セッションを格納するストア名(:cookie_store、 |
|
Action View | action_view. |
デフォルトで利用されるフォームビルダ(デフォルトはActionView:: |
action_view. |
利用するロガー(nilでロギングを無効化) | |
action_view. |
エラー時に入力要素を括るタグ( 例. Proc.new{ |
- *45 cache_classesパラメータがfalseの場合、リクエストごとにアプリケーションコードがリロードされますので、コードを変更した場合も再起動は不要です。ただし、レスポンス速度は低下しますので、本番環境では必ずtrueに設定してください。
- *46 developmentモードの場合。productionモードでは:info。
- *47 コマンドプロンプトから「rake time:zones:all」コマンドを実行することで、利用可能なタイムゾーンを確認できます。
2.5.3 アプリケーション固有の設定を定義する
アプリケーション固有の設定情報は、/configフォルダ配下にmy_config.ymlのようなファイルを用意してまとめておくことをお勧めします。たとえば、以下のようにです。
全ての
環境で
共通の
設定
開発
環境の
設定
テスト
環境の
設定
本番
環境の
設定
|
COMMON: &COMMON
author: "YAMADA, Yoshihiro"
logo:
source: "http://www.wings.msn.to/image/wings.jpg"
width: 215
height: 67
development:
hoge: "dev"
<<: *COMMON
test:
hoge: "test"
<<: *COMMON
production:
hoge: "pro"
<<: *COMMON
|
COMMONキーの「&COMMON」は、キー全体を「COMMON」という名前で参照できるようにするための準備です。このように記述されたキーは、.ymlファイルの任意の場所から「<<: * 名前」で参照できます。
このしくみを利用して、リスト2-11ではdevelopment、test、productionキーに共通の情報をCOMMONキーにまとめているわけです。YAML形式の便利な記法のひとつなので、覚えておくと良いでしょう。
このように定義した設定ファイルは、初期化ファイルで起動時に明示的に読み込んでおく必要があります。/config/initializersフォルダ配下にmy_config.rbのようなファイルを用意します*48。他のファイルと同じく、文字コードはUTF-8です。
MY_APP = YAML.load(
File.read("#{Rails.root}/config/my_config.yml"))[Rails.env]
|
- *48 名前に特に決まりはありません。内容を類推しやすい範囲で自由に決めてください。
YAMLファイルを読み込むのは、YAML.loadメソッドの役割です。この例では、読み込んだ結果の中からRails.env(現在の環境)をキーに持つもの――たとえば、developmentキー配下の情報だけを取り出し、グローバル変数「MY_APP」にセットしています。
変数MY_APPはコントローラ、ビューなど、すべてのファイルから参照できます。
def app_var
render text: MY_APP['logo']['source'] # …… 結果:http://www.wings.msn.to/image/wings.jpg
end
|
アプリケーション共通で利用する情報は、このように単一のグローバル変数にまとめておくことで、名前空間を無駄に汚すことなく、また、簡単にアクセスできます。
【COLUMN】コードのやり残しをメモする - TODO、FIXME、OPTIMIZEアノテーション -
TODO、FIXME、OPTIMIZEアノテーションを利用することで、開発中にやり残した事柄や、将来的に対応すべき案件を、あとから対応の忘れがないようにコード中にマーキングしておくことができます。具体的には、「# XXXX:」のようなコメント構文を利用して、以下のように記述します(XXXXはTODO、FIXME、OPTIMIZEのいずれか)。
def validate_each(record, attribute, value)
# TODO: あとから実装
end
|
アノテーションはrake notesコマンドで列挙できます*49。特定のアノテーションだけを利用したい場合は、rake notes:todo、rake notes:fixme、rakenotes:optimizeも利用できます。
> rake notes
(in C:/data/railbook)
app/models/isbn_validator.rb:
* [ 29] [TODO] あとから実装
app/controllers/application_controller.rb:
* [ 10] [FIXME] 国際化対応の仕様、再確認の必要あり
|
- *49 Windows環境では、デフォルトでマルチバイト文字が化けます。「2.4 モデルの基本」の注44に従って、コマンドプロンプトの設定を変更してください。
■
次回は「第9章 クライアントサイド開発 9.3 CoffeeScript」を説明します。
※以下では、本稿の前後を合わせて5回分(第5回~第9回)のみ表示しています。
連載の全タイトルを参照するには、[この記事の連載 INDEX]を参照してください。
8. CoffeeScript入門(前編) ― CoffeeScriptの基本構文
Rubyプログラマーの必須知識「CoffeeScript」の基礎として、基本構文/変数とリテラル表現/演算子/制御構文を解説。書籍転載の8本目(「Part 3《応用編》 第9章 クライアントサイド開発」より)。
9. CoffeeScript入門(後編) ― 関数/オブジェクト指向構文/即時関数
CoffeeScriptの基礎を解説。今回は関数/オブジェクト指向構文/即時関数について説明する(書籍転載の9本目)。CoffeeScriptをマスターしよう。