はじめに

データベースを扱ったことがありますか?
前回は、Ruby on Railsで新しいプロジェクトを作成し、スキャフォールディングによってさまざまなファイルを生成しました。
そして、コントローラーについて見ていきました。
コントローラーでは、スキャフォールディング時に定義したモデルが使われています。
次は、モデルについて詳しくみていきましょう。
この記事では、Ruby初心者の方向けに、Ruby on Railsのモデルについて説明していきます。
モデルの役割をしっかり理解しておきましょう。

モデルの役割

アプリケーションでは、多くのデータを扱います。
中には、永続的に保存しておく必要があるデータもあります。
少量のデータであればファイルでも管理できますが、大量のデータを構造的に保存するのには向いていません。
そのため、一般的には「データベース」が使われます。
データベースにもさまざまな種類がありますが、よく使われるのは「リレーショナルデータベース(RDB)」です。
RDBは、データを複数の関連する表に分けて保存します。
モデルの役割は、このデータベースからビュー(ページ)の構築に必要なデータを取り出すことです。

Ruby on Railsで使われるデータベースについて

Ruby on Railsでは、主要なRDB(MySQL、PostgreSQL、Oracleなど)に対応しており、柔軟にデータベースを選択できます。
とはいえ、学習時には本格的なデータベースを用意しなくても、デフォルトで使われる「SQLite」で問題ありません。
SQLiteはちょっと変わったデータベースで、アプリケーションに組み込んで利用するように作られています。
このため、面倒なデータベースソフトのインストールや設定をすることなく、RDBを手軽に作成することができます。
Railsならなんの準備もいりません。

DBマイグレーションを行う

スキャフォールディングを行っただけでは、まだデータベースは作成されていません。
このため、次のコマンドを入力してDBマイグレーションを行う必要があります。

rake db:migrate

“rake”コマンドは、さまざまなタスクを実行するためのツールです。
DBマイグレーションでは、スキャフォールディングで自動生成された”db/migrate”ディレクトリ内のRubyファイルを実行します。
ファイルにはデータを保存するためのテーブルを作成するクラスが定義されており、SQL(データベースを操作する言語)を使わなくてもデータベースを扱えるようになっています。
これで、”db”ディレクトリ内にSQLiteデータベースファイルが作成され、データを保存するための準備が整いました。

モデルファイルをみてみよう

次に、スキャフォールディングによって自動生成されたモデルファイルをみてみましょう。
”app/models”ディレクトリ内の”student.rb”ファイルを開いて下さい。
ファイルの中身は、”Student”クラスがひとつ定義されているだけです。
このモデルクラスはなんのメソッドも持っていないように見えますが、モデルに必要となる基本的なメソッドは親クラスの” ApplicationRecord”から継承しています。
再び、コントローラークラスをみてみましょう。
新しいモデルを作成する“new”メソッドや全てのデータを取得する”all”メソッド、データを保存する”save”メソッドなど、さまざまなメソッドが使用されていることが確認できます。

データベースにシードを作成する

最後に、データベースにシード(初期データ)を作成してみましょう。
シードを作成するには、”db”ディレクトリにある” seeds.rb”ファイルに、次のようなコードを記述します。
例:

Student.create(no: "001", name: "Taro", age: 17)
Student.create(no: "002", name: "Hanako", age: 18)
Student.create(no: "003", name: "Jiro", age: 16)

先ほどのモデルクラスが使われていますね。
このままでは、まだデータベースに反映されていないので、次のコマンドを入力してシードファイルを実行します。

rake db:seed

これでデータベースにシードが作成できました。
次回、ビューについて学んだ後で、ここで入力したシードデータを確認してみましょう。

まとめ

モデルの役割がつかめましたか?
MVCアーキテクチャでは、モデルはデータベースとやり取りし、ビュー(ページ)の構築に必要な情報を提供します。
Ruby on RailsのActive Recordを使えば、SQL文を書かずともデータベースとやり取りでき、デフォルトで使われるSQLiteならデータベースの準備すら不要です。
さて、ここまでコントローラーとモデルについて学んできました。
残すところはビューのみです。
次回はビューを学習していきましょう。