Railsでモデルを生成する方法を現役エンジニアが解説【初心者向け】

初心者向けにRailsでモデルを生成する方法について現役エンジニアが解説しています。モデルを簡単に説明すると、データベースのテーブルに相当します。Railsでは、マイグレーションファイルを作成、編集、実行することでモデルを作成します。

TechAcademyマガジンはオンラインのプログラミングスクールTechAcademy [テックアカデミー]が運営する教育×テクノロジーのWebメディアです。初心者でもすぐ勉強できる記事が2,000以上あります。

Railsでモデルを生成する方法について解説します。

Rubyについてそもそもよく分からないという方は、Rubyとは何なのか解説した記事をまずご覧ください。

 

なお本記事は、TechAcademyのWebアプリケーションオンラインブートキャンプの内容をもとに紹介しています。

田島悠介

今回は、Rubyに関する内容だね!

大石ゆかり

どういう内容でしょうか?

田島悠介

Railsでモデルを生成する方法について詳しく説明していくね!

大石ゆかり

お願いします!

 

Railsのモデル(model)とは

モデルとはデータベースの情報を操作する仕組みのことです。通常、データベースを操作するには、RDBMSであればSQL文を書いて実行する必要があります。

Railsではデータベースをより簡単に扱えるように、Active Recordという仕組みが存在していて、各モデルはActive Recordを介してデータベースを操作することができます。

モデルの生成方法

モデルを生成は以下の手順で行います。

  1. rails generate modelでマイグレーションファイルの作成
  2. マイグレーションファイルの編集
  3. rails db:migrateでマイグレーション実行

順番に解説します。

マイグレーションファイルの作成

マイグレーションファイルとは、データベースに加える変更内容を記述するファイルになります。

作成するには rails generate model<model name>というコマンドを実行します。<model name> は User のように先頭が大文字の単数形で指定します。

実行するとdb/migrate/20190601081254_create_users.rbのようなファイルができます。なお、rails generateはrails gと省略して書くこともできるので覚えておくと良いでしょう。

 

マイグレーションファイルの編集

マイグレーションファイルを作成したら、エディタで必要なカラムを追加します。

 

マイグレーション実行

マイグレーションファイルを編集したら、rails db:migrateコマンドでマイグレーションを実行します。マイグレーションが完了すると、データベースにテーブルが作成されます。

[PR] Rubyのプログラミングで挫折しない学習方法を動画で公開中

実際に書いてみよう

今回はUserモデルを作ってみましょう。事前にrails newでアプリケーション作成と、rails db:migrateでデータベースの作成をしているものとします。

 

マイグレーションファイルの作成

まずはrails generate modelコマンドでマイグレーションファイルを作成しましょう。

 

$ rails generate model User
      invoke  active_record
      create  db/migrate/20190601081814_create_users.rb
      create  app/models/user.rb
      invoke  test_unit
      create  test/models/user_test.rb
      create  test/fixtures/users.yml

 

マイグレーションファイルの編集

続けてマイグレーションファイルを編集します。Userモデルなので、名前や年齢、身長といったカラムを追加してみます。

 

class CreateUsers < ActiveRecord::Migration[5.2]
  def change
    create_table :users do |t|
      # ここから追加
      t.string :name
      t.integer :age
      t.float :height
      t.float :weight
      # ここまで追加
      t.timestamps
    end
  end
end

 

マイグレーション実行

編集が終わったら、マイグレーションを実行してみましょう。rails db:migrateを実行してエラーが出なければ成功です

 

$ rails db:migrate
== 20190601081814 CreateUsers: migrating =========
-- create_table(:users)
   -> 0.0009s
== 20190601081814 CreateUsers: migrated (0.0010s) 

 

モデルとデータベースの確認

モデルが正しく作成されているか、簡単に確認しておきましょう。

rails consoleでRails用のコンソールを起動します。モデルで使用可能な new, update, find_byなどのメソッドで、データの登録や検索といったデータベースの操作を行ってみました。

 

$ rails console
Loading development environment (Rails 5.2.3)
irb(main):001:0> user = User.new
=> #
irb(main):002:0> user.update(name: "taro", age: 20, height: 160, weight: 60)
   (0.1ms)  begin transaction
  User Create (0.5ms)  INSERT INTO "users" ("name", "age", "height", "weight", "created_at", "updated_at") VALUES (?, ?, ?, ?, ?, ?)  [["name", "taro"], ["age", 20], ["height", 160.0], ["weight", 60.0], ["created_at", "2019-06-01 08:35:56.861474"], ["updated_at", "2019-06-01 08:35:56.861474"]]
   (1.0ms)  commit transaction
=> true
irb(main):003:0> User.find_by(name: "taro")
  User Load (0.2ms)  SELECT  "users".* FROM "users" WHERE "users"."name" = ? LIMIT ?  [["name", "taro"], ["LIMIT", 1]]
=> #

 

続いて、実際にデータベースを確認してみます。

今回はデータベースにSQLite3を使っていることを想定しています。デフォルトでdb/development.sqlite3にデータベースファイルが作られるので、sqlite3コマンドでファイルを指定します。

SELECT文でusersテーブルの値を読み出してみると、先ほど保存したtaroさんのデータが登録されているのがわかりますね。

 

$ sqlite3 db/development.sqlite3
SQLite version 3.24.0 2018-06-04 14:10:15
Enter ".help" for usage hints.
sqlite> SELECT * FROM users;
1|taro|20|160.0|60.0|2019-06-01 08:35:56.861474|2019-06-01 08:35:56.861474

 

筆者プロフィール

メンター稲員さん

フリーランスエンジニア。
大手SEからフリーランスのWeb系エンジニアにジョブチェンジ。

経験言語:Ruby、Rails、Python、C/C++、Java、Perl、HTML/CSS3、JavaScript、CoffeeScript,Node.js。
おうち大好きマンです。

 

大石ゆかり

内容分かりやすくて良かったです!

田島悠介

ゆかりちゃんも分からないことがあったら質問してね!

大石ゆかり

分かりました。ありがとうございます!

TechAcademyでは初心者でも最短4週間でエンジニアになれるRuby on Railsオンラインブートキャンプを開催しています。

現役エンジニアがパーソナルメンターとして受講生に1人ずつつき、マンツーマンのメンタリングで学習をサポートし、最短4週間でオリジナルWebサービスを開発することが可能です。

また、現役エンジニアから学べる無料のプログラミング体験会も実施しているので、ぜひ参加してみてください。