17日目 development環境におけるPostgreSQLを用いた「database.yml」の設定

おはようございます。
昨日までで、
・herokuへのアカウント登録
・JRuby 9.1.17のインストール
・Rails 4.2.4のインストール
・PostgreSQL 10のインストール
・Railsアプリからのデータベース接続用のユーザー作成
などを行ない、もう半月以上経ちました。

noteを書きながら作業を進めているので時間がかかってもいるのですが、今まで仕事のために急いで勉強して学んでいたところもあったので、こうして遠回りしながらも、じっくりと一つ一つの作業をnoteにも残しながら進めることで、改めて深く向き合って理解できるような気もして、良い刺激になっているのかなあと思います。

若干話が逸れましたが、今日は「database.yml」の設定について説明しようと思います。

database.ymlの概要

Railsアプリを作って、データベースを操作しようとするならば、まず、「database.yml」の設定が必要です。「database.yml」とはRailsがデータベースと接続する場合の設定ファイルであり、開発環境(developent)、試験環境(test)、本番環境(production)、すべての環境に共通するもの、それぞれの接続設定を「database.yml」にて行います。

例えば、接続設定には以下のものがあり、それぞれの環境に合わせて設定を行います。
・どんなRDBMS(リレーショナルデータベース管理システム)を利用するのか(例:sqlite, MySQL, postgreSQL等)
・文字コード
・database名
・ユーザー名
・パスワード

Railsアプリを新規作成した場合、「database.yml」の場所は、作成したRailsアプリのプロジェクトデータが格納されているディレクトリ内の「config/database.yml」にあると思います。

database.ymlへの設定方針

わたしの場合、database.ymlには以下のように設定しようと思います。
①postgreSQLに接続するように想定。
②development環境のみ考慮(test環境、production環境は考慮しない)
それぞれ①と②の方針にした理由を説明します。

なぜpostgreSQLを用いるのか

前述の見出し「database.ymlへの設定方針」の①について、「postgreSQL」を利用する理由は、わたしはこれからアプリを作ったら、そのアプリをheroku上へデプロイしようと思っていますが、そのherokuが、標準で利用しているデータベースのサービスに「Heroku Postgres」を利用しており、そのサービスでは「postgreSQL」を利用しているからです。

「Heroku Postgres」は、以下のように10000行のレコードまでであれば無料で使える(無料のHobby Devプラン)ので、個人の開発として利用する程度であれば十分かと思っており、デプロイする際にはこちらのサービスを利用しようと思います。

herokuへのデプロイは本番環境(production環境)での話であり、ローカルのPCにてデータベースを作って扱う場合(開発環境:development環境)には、必ずしも本番環境に合わせる必要はありません。

ですが、わたし自身、本番環境(production環境)、試験環境(test環境)、開発環境(development環境)はできるだけ同じ条件・同じ状況を再現して開発したいというこだわりがあります。

以前、会社に勤めていた時に、本番環境と試験環境の違いによって想定外のエラーが起こったり、環境に違いがあることがわからなくてそこで詰まっていた思い出もあったので、なるべく環境を合わせようとしていますし、開発環境でもできるだけ本番環境に近いほうが、本番環境で何が起こっているかイメージを掴みやすくなるのかなと思ってそうしております。

そのため、Heroku上で「postgreSQL」を利用するならば、開発時にもぜひ「postgreSQL」をどんどん利用して、開発時と本番での運用時の感覚をできるだけ近づけたいと思っております。

ちなみに、Railsを利用する場合、開発環境、試験環境、本番環境にてそれぞれ異なるRDBMS(例:sqlite、MySQL、postgreSQL)を使う場合のイメージ図を以下に貼りますね。以下のように、Rails側で上手くシステムの動作仕様の違いを吸収するので、必ずしも「postgreSQL」を用いる必要がないということが伝わったならば幸いです。

あくまで、わたし自身が開発環境、試験環境、本番環境とでできるだけ同じ条件にしたいというこだわりを持って取り組んでいるだけですので、そう認識していただけましたら幸いです。

なぜdevelopment環境のみ考慮すればよいのか

前述の見出し「database.ymlへの設定方針」の②について、本番環境(production環境)はherokuへ実際にデプロイした後に接続するデータベース環境の設定のはずだから考慮したほうがよいのではないかとお考えの方もいると思います。

実は、herokuへデプロイする際、こちらで編集・設定したpostgreSQLの設定は読み込まず、heroku側で用意されているものに自動的に置き換わるようです。そのため、本番環境においては、database.ymlに何も設定しなくとも、動かすことができるみたいです。(詳しくは以下の2つをご参考ください。)

そのため、database.ymlについては開発環境(development)と、共通設定に注目して、作成・編集することにいたします。

database.ymlへの編集

database.ymlをVisual Studio codeを用いて開く

では、実際に編集してみようと思います。ここではエディタにVisual Studio Codeを利用します。(Visual Studio Codeのインストール・設定については過去の記事をご参考ください)

では、以下のようにVisual Studio Codeを起動します。

次に、Visual Studio Codeの左上の「ファイル」タブをクリックし、出てきたメニューの中から「フォルダーを開く…」をクリックします。

そしたら「フォルダーを開く」という画面が出てくると思いますので、作成したRailsアプリのプロジェクトデータのある場所を指定して開きます。

※今回の場合は、事前にデスクトップ画面に「playtool」フォルダを作って、その中に「real_chat」という名前で、Railsアプリのプロジェクトデータを作ってあるため、「C:\Users\(PCのログインユーザー名)\Desktop\playtool\real_chat」という名前になります。この辺りはそれぞれのPCの環境・条件によって変わって来ると思います。

フォルダーを開いたら、作成したRailsアプリのプロジェクトデータの中のディレクトリやファイル等の一覧が、Visual Studio Codeの左側「エクスプローラー」ビューに表示されます。

そこで、以下の①、②の操作を実施して、Visual Studio Codeの右側に「database.yml」の内容が表示されるようにします。

ちなみに、現時点での「database.yml」の内容は以下の通りです。途中、何行かコメントアウトの行があって長いので、その行を省いて、代わりに「~略~」を入れてあります。

# PostgreSQL. Versions 8.2 and up are supported.
#
# Configure Using Gemfile
# gem 'activerecord-jdbcpostgresql-adapter'
#
default: &default
  adapter: postgresql
  encoding: unicode

development:
  <<: *default
  database: real_chat_development
  
~略~

# Warning: The database defined as "test" will be erased and
# re-generated from your development database when you run "rake".
# Do not set this db to the same as development or production.
test:
  <<: *default
  database: real_chat_test

~略~

# You can use this database configuration with:
#
#   production:
#     url: <%= ENV['DATABASE_URL'] %>
#
production:
  <<: *default
  database: real_chat_production
  username: real_chat
  password: <%= ENV['REAL_CHAT_DATABASE_PASSWORD'] %>

上記を見ると、
「default: &default」
「development:」
「test:」
「production:」
という4つの行があると思いますが、それぞれの行が、該当する環境に合わせた項目を記述する箇所であり、例えば、「default: &default」であれば、その下の行は環境によらず共通の設定を記述する箇所、「development:」であれば、開発環境に合わせて設定を記述する箇所というように、データベースを操作するための設定を書き分けていきます。

なお、先ほど載せた「database.yml」内の「default: &default」と記述されている箇所に「adapter: postgresql」と記載されている行がありますが、昨日の記事にて、アプリ新規作成のコマンド入力時に

jruby -S bundle _1.17.3_ exec rails new . --skip-bundle --database=postgresql

上記のコマンドの中で、「--database=postgresql」というオプションを指定しています。そのため、database.ymlの「default: &default」の下に、「adapter: postgresql」という設定が自動的に付加?されたかと思います。

今回は、本番環境(テスト環境含む)を考慮する必要がないので、以下の変更を行ないます。
「development:」記述箇所へのユーザー名とパスワードの追記
・「test:」記述箇所のコメントアウト

「development:」へのユーザー名とパスワードの追記

具体的には以下の写真のように、「development:」の下の項目に、「username: (ユーザー名)」「password: (パスワード)」の2行を追記します。

それぞれのユーザー名とパスワードについては、postgreSQLにて「ログイン」「パスワード」「データベース作成」属性を持つ「ロール(ユーザ)」です。作り方は昨日の記事に記載してありますので、各自ご参考いただけましたら幸いです。

「test:」記述箇所のコメントアウト

具体的には以下の写真のように、「test:」と記載されている箇所の3つの行に対して、行の先頭にすべて「#」を付与して、コメントアウトします。

なお、コメントアウトしなくとも、エラーなく正常に動作はしますが、Railsを通してデータベースを作成する際に、development環境だけでなく、test環境も自動的に作られることがあるため、test環境を使う予定がない場合は、コメントアウトすることによって、test環境の自動作成を省略することができます。

ここまででdatabase.ymlの編集は終わりです。

おわりに

今日も読んでくださってありがとうございました。
noteに毎日記事を投稿し始めてから3週目に突入しましたが、まだまだ続けたいと思います。

明日は、Railsを通してデータベースを作成してみようと思います。
次のターンに続きます。

この記事が気に入ったらサポートをしてみませんか?