データベースの基礎
データベースとは
特定の条件に当てはまるデータを複数集めておく箱のようなもので、あとで使いやすいように整理しておける情報のかたまりをさします。
例えば、顧客リストなどです。「名前」、「年齢」、「住所」、「購入した物」など色々な情報をまとめて管理することができます。
RDB(リレーショナルデータベース)
よく使われているデータベースの種類としては、RDB(リレーショナルデータベース)という物があります。
特徴
- 列と行からなる「テーブル」という門井データを保存していく。
- テーブルどうしを関連付けて使用できる。
エクセルの表と似ています。下図がイメージです。

Railsアプリとの関係
通常はSQL文を使ってデータベースの操作を行っていきますが、Railsを使うことでRubyのコードを「モデル」と言う部分でSQLに変換してくれる為、とても便利です。
この仕組みをORM(Object /Relational Mapping)と言います。
データベースとテーブルの関係
データベースとテーブルの関係はイメージだとこのように表現することができます。
見にくいけどごめんなさい。(PDF)
データベース
テーブルを入れる為の箱で1つのアプリに対して1つ作ってあげるのが基本です。
テーブル
「名前」、「住所」などのデータを実際に保存する場所で必要なデータごとに作成する。
各テーブルには、それぞれのモデルを仲介してアクセスし、コントローラーからの依頼を実行します。
Railsでデータベースを作成するには
①ターミナルでデータベースソフト「Mysql」のパッケージをインストールして起動しておく。
#mysqlインストール
$ sudo yum -y install mysql-devel
#mysqlを起動
$ sudo service mysqld start
#ログイン時に自動起動する設定
$ sudo chkconfig mysqld on
②ターミナルでカレントディレクトリを雛形ディレクトリへ移動する。(今回は私の開発環境に作った物を使っていますのでご自身の環境にある物を選択してください)
雛形ファイルの作成方法はこちら
#カレントディレクトリを移動
ec2-user:~/environment $ cd miniblog
#以下のように表示がかわります
ec2-user:~/environment/miniblog (master) $
②rails dbコマンドでデータベースを作成する 。
#データベース作成コマンド
rails db:create
テーブルの作成手順
①ターミナルで「rails g model (モデル名)」を実行する。※モデル名は複数形にしないことがポイントです。
#モデル作成コマンド
$ rails g model blog
下図のような表示になります。

間違えたら慌てず「rails d コマンド」を実行しやりなおしましょう。
作成したファイルの説明
ファイル名:app/models/test.rb
役割:主にblogsテーブルから取得したデータになんらかの命令を実行させたい時に記述します。
よく使うのは、アソシエーションと言うテーブルどうしの連携をする為の定義です。
ファイル名:db/migrate/20200706062928_create_tests.rb
役割:マイグレーションファイルと言ってテーブルの設計図になります。ここに必要な事項を記述し、「マイグレート」と言う処理を実行することでデータベースにテーブルを反映させます。
残りの2つはテスト用のファイルになります。
②マイグレーションファイルを編集する。
テーブルに追加したい「カラム名」と「データ型」を記述することで「マイグレート」を実行した際にテーブルが作成される。
class CreateBlogs < ActiveRecord::Migration[5.2]
def change
create_table :blogs do |t|
#text型のtextと言う名前のカラムを追加する
t.text :text
t.timestamps
end
end
end
今回は、5行目にカラムの追加コードを書いています。何個も追加できます。
注意点:最初の「t.」は忘れず付けてください。
③⌘(command) + S でファイルを保存する。
④ターミナルでマイグレートを実行する。コマンドは以下に書きます。
#マイグレートの実行
$ rails db:migrete
これでテーブルがデータベースに反映されました。
⑤テーブルを確認する。
「phpMyadmin」で構造を確認すると「textカラム」が追加されたテーブルができました。

ターミナルで「mysql」に接続し、テーブルカラムを確認すると下図のようになります。

「phpMyAdmin」と同じ表示になってますね。
このような手順でテーブル作成をしていきます。
カラムに追加するデータ型の種類と用例
データ型 | 説明 | 用例 |
integer | 整数 | ユーザーのidなど |
string | 文字(255文字まで) | ユーザー名、パスワードなど |
text | 文字(256文字以上も可能) | 投稿文など |
boolean | 真か偽か | 真偽フラグ |
datetime | 日付と時刻 | 作成日時、更新日時など |
マイグレートをする時の注意点
ターミナルで「rails db:migrate」を実行したファイルは、削除や編集は絶対にしない!
理由:マイグレーションファイルと実際のデータベースにズレが生じることでサーバーをアップデートする際にややこしいエラーになってしまいます。
対処①:ステータスを毎回確認する
マイグレート実行後、または、マイグレーションファイルを削除や編集したい時は、ターミナルでマイグレーションファイルのステータスを確認するようにする。
#マイグレーションファイルがマイグレートされているか確認するコマンド
$ rails db:migrate:status
下図のような表示になり「up」となっていればマイグレートされている状態。「down」となっていれば未実施と言うことになります。

対処②:ターミナルで「rails db:rollback」を実行する。
こちらは、間違えて「rails db:migrate」を実行してしまった場合の対処になります。
このコマンドを実行すると、「rails db:migrate」を行った1つ前にマイグレーションファイルを戻すことができます。
そして、「rails db:migrate:status」でステータスが「down」になっていることを確認してマイグレーションファイルを編集し、再び「raisl db:migrate」を行います。実際にやると下図のようになります。

一番最後のマイグレーションファイルが「down」に変わったことがわかります。
再度「rails db:rollback」の手順をおさらいします。
- ターミナルで「rails db:rollback」を実行する
- ターミナルで「rails db:migrate:status」を実行しステータスを確認
- 削除や編集をしたいファイルが「down」になっていることを確認
- マイグレーションファイルを開いて編集する
- 再び「rails db:migrate」を実行する
まとめ
- RDBと言うデータベースを使用することが多い
- データベースの中に特定の情報を入れるテーブルを作成し、そこに情報を保管していく
- データベースやテーブルはコマンドを使って作成する
- マイグレーションファイルとは実際のデータベースに追加したいカラムとデータ型を記述することでテーブルを作成するファイルのこと
- マイグレートとはマイグレーションファイルから実際のデータベースにデータを反映させる為の処理
- マイグレートを間違えたら「rails db:rollback」で前の状態に戻ってマイグレーションファイル編集し直す