オーダーメイドコース
icon
icon

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

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

テックアカデミーマガジンは受講者数No.1のプログラミングスクール「テックアカデミー」が運営。初心者向けにプロが解説した記事を公開中。現役エンジニアの方はこちらをご覧ください。 ※ アンケートモニター提供元:GMOリサーチ株式会社 調査期間:2021年8月12日~8月16日  調査対象:2020年8月以降にプログラミングスクールを受講した18~80歳の男女1,000名  調査手法:インターネット調査

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

 
そもそもRubyについてよく分からないという方は、Rubyとは何なのか解説した記事を読むとさらに理解が深まります。

なお本記事は、TechAcademyのオンラインブートキャンプRuby講座の内容をもとに紹介しています。

 

田島悠介

今回は、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] 未経験からWebエンジニアを目指す方法とは

実際に書いてみよう

今回は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では、初心者でもRuby on Railsを使ったプログラミングを習得できるオンラインブートキャンプRuby講座を開催しています。

挫折しない学習方法を知れる説明動画や、現役エンジニアとのビデオ通話とチャットサポート、学習用カリキュラムを体験できる無料体験も実施しているので、ぜひ参加してみてください。