どうも、とがみんです。
この記事では、Ruby on Railsによるデータベースへの作成や接続、そしてCRUD処理について紹介していきます。
Contents
Ruby on Railsのデータベース操作の仕組み
Ruby on Railsでは、使用できるデータベースはSQLite、MySQL、PostgreSQL等複数あり、自由に選択することができます。
データベースとのやり取りを行うのがMVCアーキテクチャのモデル(M)で、モデルはデータベースに含まれるテーブル毎に用意されます。
また、オブジェクト指向言語と、リレーショナルデータベースの橋渡しとして、「O/Rマッパー」というものが使用されます。
「O/Rマッパー」は、アプリケーション側で使用するオブジェクトモデルと、データベースが使用するリレーショナルモデルとは構造が違うため、そのギャップを解消するためのツールです。
これにより、データベースから取得した、情報をオブジェクトにマッピングする作業が不必要になったり
また、リレーショナルデータベースを扱うためのSQLを記述する必要もなくなり、開発を効率化することができます。
データベースの作成と接続
以下のような手順で、データベースの接続設定と作成を行っていきます。
- データベース接続の設定
- データベースにアクセスするためのモデルクラス作成
- マイグレーションファイルによるデータベースの作成
データベース接続の設定
データベースの接続の設定について、まず、config/database.ymlのファイルに、接続設定を定義する必要があります。
使用するデータベースの種類や、接続先のIPアドレスなどの設定を行います。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | 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 |
database.ymlファイルには、「開発」、「テスト」、「本番」環境が用意されており、別々のデータベースを用意するようになっています。
これによって、たとえ開発環境で行った操作が不用意に本番環境に影響を及ぼすような事故を防げています。
データベースを扱うに当たって、設定できるパラメータは以下です。
パラメータ名 | 概要 |
---|---|
adapter | 接続するデータベースの種類(sqlite、mysql2、postgresql) |
database | データベース名(SQLiteではデータベースファイルのパス) |
host | ホスト名/IPアドレス |
port | ポート番号 |
pool | 確保する接続プール |
timeout | 接続タイムアウト時間 |
encoding | 使用する文字コード |
username | ユーザー名 |
password | パスワード |
socket | ソケット |
接続プール:データベース接続オブジェクトのキャッシュ。データベースへの接続をあらかじめ準備しておき、利用後は、プールに戻し再利用する。それにより、本来通信したいデータ以外の制御用のデータのやり取りを軽減できる。
>Oracle Universal Connection Pool for JDBC開発者ガイド
データベースにアクセスするためのモデルクラス作成
データベースへ接続する設定が終わったら、次にデータベースにアクセスするためのモデルクラスを作成します。
以下のようなusersテーブルを扱うにあたって、必要なモデルを作成します。
データ名 | データ型 |
---|---|
userName | String |
age | integer |
gender | boolean |
また、作成したモデルと、データベースのリレーショナルモデルの橋渡しを行う「O/Rマッパー」も同時に作成します。
この「O/Rマッパー」はオブジェクト指向で書かれたコードをデータベースを操作するSQLに書き換える役割を果たします。
ターミナル上で以下のコマンドを実行し、usersテーブルを作成します。
実行すると、幾つかファイルが作成されます。
マイグレーションファイルによるデータベースの作成
先ほど、rails generateコマンドで、データベースにアクセスするためのモデルクラスを作成しましたが、まだデータベース(テーブル)は作成されていません。
なので、マイグレーションという機能を利用して、データベースの作成を行います。
「マイグレーション」とは、テーブルレイアウトを作成/変更するための仕組みのことで、これを利用することによって、テーブル保守の作業を半自動化し、
途中でレイアウトの変更が起こった場合も、簡単に反映することができます。
マイグレーションを実行するためのファイルは、先ほどrails generateでモデルを作成した際に自動生成されています。
1 2 3 4 5 6 7 8 9 10 11 | class CreateUsers < ActiveRecord::Migration[5.2] def change create_table :users do |t| t.string :userName t.integer :age t.boolean :gender t.timestamps end end end |
以下のコードを実行します。
以下のような結果が得られれば、usersテーブルは正しく作成できています。
データベース操作CRUD処理
これまでの処理で、接続するデータベースの設定やテーブルの作成を行ってきました。次に、そのテーブルにデータを入れ込んだりしていきます。
CRUD処理の「CRUD」とは、データの「作成(Create)」、「参照(Read)」、「更新(Update)」、「削除(Delete)」の頭文字をとっています。
CRUD処理をrails console上で確認していくので、以下のコマンドを実行します。
新規データ作成Create処理
新規データの作成についてです。以下のコードを実行すると、データが作成されます。
1 2 3 4 | #保存するデータのオブジェクト作成 user = User.new({userName: 'Togamin', age: 24, gender:true}) #データベースへの保存 user.save |
データの参照Read処理
先ほど保存したデータを取り出し、togaminという変数に代入するコードが以下です。
1 2 | #先ほど保存したデータを取り出し、「togami」という変数に保存. togamin = User.find(user.id) |
データの更新Update処理
togaminという変数に格納された、先ほど取り出したデータを更新します。名前をTogaminからTogamin2に変更しました。
1 2 | togamin.userName = "Togamin2" togamin.save |
データの削除Delete処理
1 | togamin.destroy |
まとめ
Ruby on Railsにおいて、データベースの設定や作成、またCRUD処理について紹介しました。