ActiveRecord
Pikawakaカリキュラムでは、Webアプリケーションのデータの保存先としてリレーショナルデータベースを利用します。
前回はSQLを使ってリレーショナルデータベースを操作する方法を学びましたね。
Ruby on Railsでは、標準で採用される「ActiveRecord」というO/Rマッピングを担うライブラリのおかげで、リレーショナルデータベースのレコードをオブジェクトとして直感的に扱えるようになります。
SQLではINSERT構文を使用して、テーブルに新しいレコードを挿入しましたが、RailsではActiveRecordのお陰で、オブジェクトを操作するようにデータ操作が可能になります。
1
INSERT INTO users(name, age) VALUES('山田花子', 34);
1
2
user = User.new(name: "山田花子", age: 34)
user.save
ActiveRecordについては、順を追って説明します。それでは、Ruby on Railsでデータベースの定義をしていきましょう。
データベース接続の設定
RailsからActiveRecord経由でリレーショナルデータベースに接続するには、まずconfig
ディレクトリ直下にあるdatabase.yml
に対して接続情報を設定する必要があります。
rails new
コマンドでRailsアプリケーションを作成する際、自動的に生成されます。
1
2
3
4
5
adapter: #接続するデータベースの種類
encoding: #文字エンコーディング
database: #接続先のデータベース名
username: #データベースに接続するユーザー名
password: #データベースに接続するパスワード
database.ymlは、デフォルトではSQLiteというRDBMSを利用するための情報が設定されますが、今回はアプリケーション作成時に-d mysql
を付けたので、MariaDBを利用する設定で生成されます。
そのため、接続情報を手動で設定する必要はありません。
1
rails _6.1.3.1_ new employee_management -d mysql
- Railsのバージョン「6.1.3.1」
- アプリケーション名「employee_management」
- データベース(RDBMS)「MariaDB」
-d mysql
としていますが、カリキュラムでは互換性の高いMySQLのコマンドを利用してMariaDBに接続します。
今回はdatabase.ymlを編集しませんが、どんなことが書かれているのかをざっくりと把握しておきましょう。
環境単位の設定
Railsには、「開発環境」「テスト環境」「本番環境」の3つの環境が用意されています。現在は開発環境でアプリケーションの開発を進めています。
- 「開発環境」 - アプリケーション開発を行う作業場所
- 「テスト環境」 - 作成した機能などをテストする場所
- 「本番環境」 - 完成されたアプリケーションをユーザーが利用する場所
database.ymlでも環境単位で設定が分けられています。デフォルトで設定されるデータベースの名前は、アプリケーション名_環境名
となります。
環境ごとにデータベースを用意するようになっているんだね!
これによってデータを共有しなくて済むよ。たとえば本番環境のデータに影響を与えることなく、開発環境での作業を行うことができるよ
共通部分の設定
各環境で共通する部分は、default: &default ~
に設定されます。
この共通部分は&default
によって、「default」という名前が付けられています。環境単位の設定箇所では、*default
で呼び出して利用することができます。
つまり、*default
は、共通部分の設定を参照することができるんだね
railsコマンドでデータベースを作成する際には、database.ymlの内容に従って作成されるよ
タイムゾーンの設定
多くの場合、サーバーには世界の時刻の標準であるUTC(協定世界時)が設定されます。
グローバルなアプリケーションを開発・運用する場合であれば、タイムゾーンはUTCで統一させますが、日本国内であれば、UTCに9時間を足したJST(日本標準時)が用いられます。
この章では、Railsのタイムゾーン、OSのタイムゾーンをUTCからJSTに変更します。
Railsのタイムゾーンを設定しよう
Railsのタイムゾーンの設定は、config/application.rb
で行います。
config.time_zone
では、アプリケーションやActive Recordで使用するデフォルトのタイムゾーンを設定することができます。以下のようにapplication.rb
の19行目のコメントを外し、タイムゾーンを東京に設定しましょう。
1
config.time_zone = "Tokyo"
以下のようにapplication.rb
の20行目にタイムゾーンを設定しましょう。
1
config.active_record.default_timezone = :local
OSのタイムゾーンを設定しよう
以下のコマンドを実行して、Cloud9の環境に設定されるタイムゾーンがUTCであることを確認しましょう。
1
date
以下のコマンドを上から順番に実行して、タイムゾーンをJSTに変更しましょう。
※ コマンドは、タイプミスを減らすためにコピー&ペーストしてください。現時点でsed
やln
コマンドを理解する必要はありません。
1
sudo sed -i -e "/^ZONE=/c\ZONE=Asia/Tokyo" /etc/sysconfig/clock
1
sudo ln -sf /usr/share/zoneinfo/Asia/Tokyo /etc/localtime
1
sudo reboot
最後のsudo reboot
を実行すると、以下のようにCloud9が再起動されます。
再起動後、以下のようにdate
を実行して、Cloud9の環境に設定されるタイムゾーンがUTCではなく、JSTに変更されていることを確認しましょう。
データベースの作成・削除
これまでに学習してきた内容では、phpMyAdminの画面上で操作したり、SQLを実行してデータベースの作成や削除をしてきましたね。
Railsでデータベースの作成や削除をするには、railsコマンドを利用します。
1
rails db:create
1
rails db:drop
上記のコマンドを実行すると、database.yml
の設定に従ってデータベースの作成や削除が行われます。
このコマンドだけで、データベースの作成や削除ができるって便利だね!
雛形作成の章でDBは作成済みだけど、コマンド操作に慣れるためにDBを削除して、もう一度作成をしてみよう
データベースを削除してみよう
Webアプリケーションの雛形作成の章では、以下のようにrails db:create
コマンドを実行して、「開発環境」と「テスト環境」のデータベースを作成していましたね。
phpMyAdminでも、以下のように2つのデータベースを確認することができます。
以下のコマンドを実行して、rails db:create
コマンドで作成した2つのデータベースを削除しましょう。
1
cd ~/environment/employee_management
1
pwd
1
rails db:drop
rails db:drop
を実行すると、以下のように2つのデータベースが削除されます。
phpMyAdminにアクセスする前に、以下のコマンドを実行してサーバを起動しましょう。
1
cd ~/environment/employee_management/public/phpMyAdmin-5.1.1-all-languages
1
php -S 127.0.0.1:8081
phpMyAdminアクセスすると、以下のように2つのデータベースが削除されたことを確認することができます。
次はrails db:createでデータベースを作成してみます。
データベースを作成してみよう
rails db:create
を実行すると、database.ymlの設定に従って「開発環境」と「テスト環境」のデータベースが作成されます。
本番環境のデータベースは作成されないんだね。
本番環境のデータベースを作成するには、RAILS_ENV=production
をrails db:createに付けて実行する必要があるよ
以下のコマンドを実行して、開発環境とテスト環境のデータベースを作成しましょう。
1
cd ~/environment/employee_management
1
pwd
1
rails db:create
rails db:create
を実行すると、以下のように2つのデータベースが作成されます。
railsコマンドで作成された2つのデータベースは、database.yml
で設定された開発環境とテスト環境のデータベースです。
以下のようにdatabase.yml
で設定するデータベース名とrailsコマンドで作成するデータベース名は、一致していますね。
phpMyAdminでも、2つのデータベースが作成されたことを確認することができます。
このようにrailsコマンドを利用すると、ターミナル上で簡単にデータベースの作成や削除の操作を行うことができます。
この記事のまとめ
- データベース接続の設定は、
config/database.yml
で行う - データベースの作成や削除をするには、railsコマンドを利用する
- railsコマンドを実行すると、database.ymlの設定に従って、データベースの作成や削除が行われる
この記事で学んだことをTwitterに投稿して、アウトプットしよう!
Twitterの投稿画面に遷移します