Webサイト制作コースのお申し込みはこちら Webサイト制作コースのお申し込みはこちら

Ruby on Railsのモデルはデータベースに作られるテーブル上のデータと密接に連携しています。例えばモデルを新しく作ったら、そのモデルに相当するテーブルがデータベースに作られます。SQLでデータベースを直接操作する必要はありませんが、Ruby on Railsからデータベースのテーブルを操作できるようになりましょう。

今回はRuby on Railsのコマンドからデータベースを扱うための基本的な方法について紹介します。

Ruby on Railsのデータベース設定


Ruby on Railsを使うには、少なくともRubyのパッケージ一式の他にデータベース管理ソフトが必要です。そのためRuby on RailsをWebシステムを構築するには、Rubyのパッケージといっしょにデータベース管理ソフトのパッケージもインストールされていなければなりません。

Ruby on Railsからデータベースを利用する方法を紹介する前に、データベース管理ソフトとの関係について紹介します。

標準はSQLite

Ruby on Railsの標準で設定されているデータベース管理ソフトはSQLiteです。もしこの状態で利用したい場合は、rbenvなどでRuby on Railsを利用するために必要なバージョンのRubyをインストールし、さらにSQLiteもインストールしなければなりません。

例えば下記のようにrails newコマンドにアプリケーション名のみ指定して新規にアプリケーションを作成した場合、標準のデータベースであるSQLiteを使用します。

$ rails new app1

データベースの設定ファイル

Ruby on Railsでアプリケーションを作成すると、そのデータベースの設定は、「config/database.yml」ファイルに記載されています。なおデータベース管理ソフトによっては、データにアクセスできるアカウントによる認証が必要ですが、それもこのファイルに記述してください。

データベースにSQLiteを設定している場合の「config/database.yml」ファイルの記載例を次に紹介します。

default: &default
  adapter: sqlite3
  pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
  timeout: 5000

development:
  <<: *default
  database: db/development.sqlite3

この「config/database.yml」ファイルには、「development:」、「test:」、「production:」の3つセクションにデータベースの設定が記述されています。そして通常rails serverコマンドでデバックする場合に適用されるのは、「development:」です。

利用するデータベースを指定する

rails newコマンドでアプリケーションを作成する際、SQLite以外のデータベース管理ソフトを指定できます。もしデータベースにMySQLを利用したい場合は、次のように実行してください。

$ rails new app -d mysql

なお、MySQLまたは互換性があるmariadbを利用する場合、データベースの設定ファイルに記載されたアカウントが使われます。rails newコマンドでアプリケーションを作成したら、「config/database.yml」ファイルを下記のようなMySQLやmariadbに設定に合わせて変更してください。

default: &default
  adapter: mysql2
  encoding: utf8mb4
  pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
  username: (mariadbに登録したアカウント名)
  password: (mariadbに登録したアカウントのパスワード)
  socket: /var/run/mysqld/mysqld.sock

development:
  <<: *default
  database: (mariadbに登録したデータベース名)

データベースとモデルの関係


Ruby on RailsのMVCモデルにおけるMは、モデル(Model)を意味します。そして、モデルの役割はWebシステムで使われるデータの格納で、主にデータベースとのやり取りを担当する機能です。

そのためモデルと作成した際、そのモデルに相当するテーブルがデータベースに作成されます。そのため、モデルを定義するにはデータベースのテーブルを意識しなければなりません。次からそのようなモデルとデータベースの関係について解説します。

モデルの作成の準備

Ruby on Railsでモデルを作成するには、データベースにテーブルを作れる状態でなければなりません。例えばLinuxでmariadbを利用する場合、さきほど紹介したようにmariadbに接続するためのアカウントやパスワードを「config/database.yml」ファイルに記述します。

そのうえで、Ruby on Railsのアプリケーションで使用するデータベースを作成してください。データベースの作成はmysqlコマンドからSQLにより作成しても構いませんが、次のコマンドでも作成可能です。

$ rails db:create

モデルを定義する

先ほど紹介したようにRuby on Railsにおけるモデルとは、Webシステムで利用するデータの保存などに利用される機能え、データベースのテーブルと連携します。ただし、モデルを作成したらすぐにデータベースにテーブルが作られる訳ではありません。モデルの作成コマンド実行後、データベースへの転送(migration)処理が必要です。

なおモデル作成には「rails generate model」コマンドを使います。

モデル作成コマンド

$ rails generate model モデル名 要素名:型:(unique|index) ….

データベースへへの転送(migration)処理コマンドは次のとおりです。

$ rails db:migrate

モデル作成の例

次から「rails generate model」コマンドを利用してモデルを作成する例を紹介します。

$ rails generate model db1 \
name:text \
attr:text \
code:integer \
flg:integer
Running via Spring preloader in process ****
      invoke  active_record
      create    db/migrate/**************_create_db1s.rb
      create    app/models/(データベース名).rb
      invoke    test_unit
      create      test/models/(データベース名)_test.rb
      create      test/fixtures/(データベース名)s.yml
$ rails db:migrate

上記のコマンドを実行すると、指定した要素の定義ファイルが「db/migrate」の下に作成されます。また、データベース上のテーブルが作成されるのは、転送(migration)処理コマンドの実行後です。そして転送(migration)処理コマンドは、下記の定義ファイルに基づいてテーブルを作成します。

定義ファイルの例

class CreateDb1s < ActiveRecord::Migration[6.1]
  def change
    create_table :db1s do |t|
      t.text :name
      t.text :attr
      t.integer :code
      t.integer :flg

      t.timestamps
    end
  end
end

モデルの作り方


先ほど説明したように、Ruby on Railsのモデルを作成すると対応するデータベースのテーブルも同時に作成されます。そして、そのためにはモデル作成コマンドと転送(migration)処理コマンドの2つのコマンドを実行が必要です。

なお転送(migration)処理コマンドは、モデル作成コマンドによって作られた定義ファイルを基にデータベースにテーブルを作成します。つまり空のモデルを作成し、定義ファイルを編集して転送(migration)処理コマンドを実行しても、モデルの要素を設定できます。次にその例を紹介します。

空のモデルを作成する

先ほど紹介したモデル作成コマンドで要素を指定しなかった場合、空の定義ファイルが作られます。例えば、次のコマンドです。

$ rails generate model db2

そして、このコマンドで作られる転送(migration)処理コマンド用の定義ファイルは、次のとおりです。

class CreateDb1s < ActiveRecord::Migration[6.1]
  def change
    create_table :db1s do |t|

    end
  end
end

見てのとおり、要素の無い空の定義ファイルが作られます。

空のモデルに要素を追加する

先ほど作成した空の定義ファイルにエディタなどでモデルとして使用する要素を追加することが可能です。そして、要素を追加後に転送(migration)処理コマンドを実行することで、データベースにモデルに対応したテーブルも作成できます。

定義ファイルを編集する例

$ rails generate model db1
Running via Spring preloader in process ****
      invoke  active_record
      create    db/migrate/**************_create_db1s.rb
      create    app/models/(データベース名).rb
      invoke    test_unit
      create      test/models/(データベース名)_test.rb
      create      test/fixtures/(データベース名)s.yml
$ vi db/migrate/**************_create_db1s.rb
$ rails db:migrate

モデルを削除する


先ほどRuby on Railsのモデルを作成する際、同時にデータベースのテーブルも作られると説明しましたが、モデルを削除した際も同時にテーブルを削除しなければなりません。

次のモデルの削除とデータベースのテーブル削除手順について紹介します。

モデル削除手順

モデルを削除するには「rails destroy model」コマンドで削除できます。ただし、このコマンドではデータベースのテーブルを削除しないので注意してください。

モデル削除コマンド

rails destroy model モデル名

モデル削除の例

$ rails destroy model db1
Running via Spring preloader in process ****
      invoke  active_record
      remove    db/migrate/**************_create_db1s.rb
      remove    app/models/db1.rb
      invoke    test_unit
      remove      test/models/db1_test.rb
      remove      test/fixtures/db1s.yml

テーブル削除手順

データベース上のテーブルを削除するには、次の手順で転送(migration)処理の設定を作成し、drop_tableコマンドを記述してテーブルを削除します。

$ rails generate migration db1
Running via Spring preloader in process ****
      invoke  active_record
      create    db/migrate/**************_db1.rb
$ vi db/migrate/**************_db1.rb
class DeleteDb1s < ActiveRecord::Migration[6.1]
  def change
    drop_table :db1s   *.****s
== ************** Db1: migrated (0.2474s) =====================================

$ rails destroy migration db1
Running via Spring preloader in process ****
      invoke  active_record
      remove    db/migrate/**************_db1.rb

まとめ


これまで紹介したようにRuby on Railsを運用する際に必要なデータベースは、デフォルトのSQLiteからMySQLなどに切り替えることが可能です。そしてそのデータベースに格納されたデータは、管理ツールでチェックできます。

ただしモデルとデータベースのテーブルは密接に連携しています。今回紹介した方法を参考にして、必ずRuby on Railsの仕組みを利用してテーブルを作成したり、データを登録してください。

エンジニアになりたい人に選ばれるプログラミングスクール「ポテパンキャンプ 」

ポテパンキャンプは卒業生の多くがWebエンジニアとして活躍している実践型プログラミングスクールです。 1000名以上が受講しており、その多くが上場企業、ベンチャー企業のWebエンジニアとして活躍しています。

基礎的な学習だけで満足せず、実際にプログラミングを覚えて実践で使えるレベルまで学習したいという方に人気です。 プログラミングを学習し実践で使うには様々な要素が必要です。

それがマルっと詰まっているポテパンキャンプでプログラミングを学習してみませんか?

卒業生の多くがWebエンジニアとして活躍

卒業生の多くがWeb企業で活躍しております。
実践的なカリキュラムをこなしているからこそ現場でも戦力となっております。
活躍する卒業生のインタビューもございますので是非御覧ください。

経験豊富なエンジニア陣が直接指導

実践的なカリキュラムと経験豊富なエンジニアが直接指導にあたります。
有名企業のエンジニアも多数在籍し品質高いWebアプリケーションを作れるようサポートします。

満足度高くコスパの高いプログラミングスクール「ポテパンキャンプ」

運営する株式会社ポテパンは10,000人以上のエンジニアのキャリアサポートを行ってきております。
そのノウハウを活かして実践的なカリキュラムを随時アップデートしております。

代表の宮崎もプログラミングを覚えサイトを作りポテパンを創業しました。
本気でプログラミングを身につけたいという方にコスパ良く受講していただきたいと思っておりますので、気になる方はぜひスクール詳細をのぞいてくださいませ。