【Rails】database.ymlの内容を理解する
はじめに
Active Record経由でデータベースに接続するには、config/database.ymlで接続設定を定義する必要があります。今回はデフォルトで記述されているdatabase.ymlの内容を解説したいと思います。
YAML形式で記述する
database.ymlはYAML形式で記述します。 YAML(YAML Ain’t Markup Language) は、名前にもあるように、マークアップ言語とは異なるため、構造をインデントや記号を使って書くことができます。そのため、マークアップ言語に比べて書きやすく、読みやすいという特徴があります。
デフォルトのdatabase.yml
以下は、railsアプリ作成時のデフォルトのdatabase.ymlです。
default: &default adapter: sqlite3 pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %> timeout: 5000 development: <<: *default database: db/development.sqlite3 test: <<: *default database: db/test.sqlite3 production: <<: *default database: db/production.sqlite3
基本的には、ハッシュのように、「パラメーター名:値」の形式で書きます。
また、半角スペースによるインデントを用いてハッシュをネストさせることで、階層をつけることができます。
パラメーターの概要
以下は、パラメーター名と概要です。
パラメーター名 | 概要 |
---|---|
adapter | 接続するDBの種類 |
pool | 確保する接続プール |
timeout | 接続のタイムアウト時間(ミリ秒) |
database | DBの名前 |
ちなみにpoolの<%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
は、環境変数もしくは固定値の5を指定しています。
エイリアス設定とブロックの挿入でコードの重複を防ぐ
&
はエイリアスを意味します。エイリアスを付けておくことで、別の場所からそのブロックを引用することができます
default: &default #エイリアスを設定している adapter: sqlite3 pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %> timeout: 5000
*
は参照を意味し、<<: *別名
で別名のブロックを挿入します。
development: <<: *default #defaultブロックを挿入している database: db/development.sqlite3
別名ブロックを挿入した結果、上記は以下と同じ意味になります。
development: adapter: sqlite3 pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %> timeout: 5000 database: db/development.sqlite3
こうすることで、コードの重複を防ぐことができます。