Webエンジニアへの転職を目指して、現在Ruby、Railsを学習中。

【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

こうすることで、コードの重複を防ぐことができます。


参考文献