0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

【Rails】`rails g model`って何してる?モデルの役割とコマンドの仕組みを徹底解説!

0
Posted at

はじめに

こんにちは!Railsでアプリケーション開発中の皆さん!

チュートリアルや教材を進めていると、当たり前のように出てくるこのコマンド。

$ rails g model Tweet content:text user:references

「とりあえず打てばモデルが作られるんでしょ?」 「content:text って何となくカラム名と型っぽいけど、user:references って何者?」

僕も最初はそうでした。ググったり、書籍を参考にしたりしながら、なんとなコマンドを打つものの 「一体裏側で何が起きていて、自分は何をしているのか」 が正直よく分かっていませんでした。

この記事では、過去の自分に向けて書くつもりで、Railsのモデルの役割から、rails g modelコマンドが何をしているのか、そしてどういう仕組みで引数を指定するのかを、徹底的に分かりやすく解説していきます!

そもそもモデル(Model)とは? MVCの「M」の役割

コマンドの話に入る前に、まずは「モデル」そのものについておさらいしましょう。

RailsはMVCアーキテクチャという設計思想を採用しています。これは、アプリケーションの機能を3つの役割に分ける考え方です。

  • Model (モデル): アプリケーションの脳みそ 🧠

    • データベースとのやり取りを担当します。(データの保存、読み込み、更新、削除)

    • データのルール(バリデーション)を定義します。(例:「名前は必須入力」「メールアドレスの形式は〜」)

    • 他のモデルとの関係(アソシエーション)を定義します。(例:「ユーザーはたくさんのツイートを持つ」)

  • View (ビュー): アプリケーションの見た目 🧑‍🎨

    • ユーザーに見える部分(HTML)を生成します。

    • モデルから受け取ったデータを表示します。

  • Controller (コントローラ): 司令塔・交通整理 🚦

    • ユーザーからのリクエストを受け取り、モデルとビューに指示を出します。

    • 「このURLにアクセスが来たら、モデルからデータを取ってきて、このビューを表示してね」といった采配を振るいます。

つまりモデルとは、アプリケーションが扱うデータそのものと、それに関するビジネスロジック(処理の本体)を管理する、心臓部と言える存在です。

Railsでは、Userモデルがあればusersテーブル、Tweetモデルがあればtweetsテーブルというように、モデルとデータベースのテーブルが1対1で対応するのが基本です。

コマンドを徹底解剖! rails g model Tweet content:text user:references

それでは、本題のコマンドを分解していきましょう。

Bash

# Docker環境を想定
docker-compose run --rm web rails g model Tweet content:text user:references
  • docker-compose run --rm web

    • これはDockerのコマンドです。「webサービス用のコンテナを起動して、中に入ってから(run)、後ろに続くコマンドを実行してね。処理が終わったらコンテナは消してね(--rm)」という意味です。Railsのコマンドはrails以降の部分になります。
  • rails g model

    • rails: Railsの様々な機能(サーバー起動、DB操作など)を呼び出すための親コマンドです。

    • g: generateのエイリアス(短縮形)です。Railsの**ジェネレータ(雛形作成機能)**を呼び出します。

    • model: 「これからモデルの雛形を作りますよ」という宣言です。他にもcontrollermigrationなど色々あります。

  • Tweet

    • モデル名です。**単数形・大文字始まり(キャメルケース)**で書くのがRailsのお作法です。Railsはこの命名規則をもとに、データベースのテーブル名をtweets(複数形・小文字始まりのスネークケース)であると自動で判断してくれます。
  • content:text

    • カラム名データ型:で区切って指定しています。

    • content: カラム名

    • text: データ型。string(短い文字列)、integer(整数)、boolean(真偽値)など、用途に応じて様々な型があります。

  • user:references

    • これが一番の便利ポイントです!

    • これは「他のテーブルを参照しますよ」ということを示す特殊な型です。

    • 具体的には、以下の3つのことを同時にやってくれます。

      1. マイグレーションファイルt.references :user, foreign_key: trueを追加

        • これにより、tweetsテーブルにuser_idという名前のカラムが作られます。

        • 同時に、データベースレベルで「user_idにはusersテーブルに存在するIDしか入れられませんよ」という制約(外部キー制約)をかけてくれます。

      2. インデックスuser_idカラムに自動で設定

        • 検索を高速化するための設定です。
      3. モデルファイル (app/models/tweet.rb) にbelongs_to :userを自動で追記

        • TweetモデルがUserモデルに「所属している」という関係性を定義してくれます。

つまり、user:referencesは、テーブル間の関連付けを行うための設定を、コマンド一発でよしなにやってくれる魔法の言葉だったのです。

コマンド実行で何が起きる? 生成されるファイルたち

rails g modelを実行すると、以下のファイルが自動で生成されます。

  1. マイグレーションファイル

    • db/migrate/20250729103000_create_tweets.rb (日時は実行タイミングで変わります)

    • データベースの設計図です。「tweetsテーブルを作って、contentカラムとuser_idカラムを追加してね」という指示がRubyのコードで書かれています。

    • 注意: このファイルが作られただけでは、まだデータベースは何も変わっていません。rails db:migrateコマンドを実行することで、初めてこの設計図がデータベースに適用されます。

  2. モデルファイル

    • app/models/tweet.rb

    • モデルの本体です。ここにバリデーションや他のモデルとの関係性を書いていきます。user:referencesのおかげで、既にbelongs_to :userが記述されているはずです。

  3. テストファイル

    • test/models/tweet_test.rb

    • モデルの単体テストを書くためのファイルです。

じゃあ、どうやって打ち込む項目を知るの?

モデル名やカラム名をどうやって指定すればいいか迷ったら、まずは公式ドキュメントを見るのが一番です。

でも、もっと手軽な方法があります。それはコマンド自身に聞くことです。

Bash

$ rails g model --help

このコマンドを打つと、modelジェネレータの使い方が表示されます。利用可能なデータ型の一覧なども確認できるので、一度は叩いてみることを強くおすすめします!

基本の形はこれだけ覚えておけばOKです。

rails g model [モデル名(単数形)] [カラム名1:データ型] [カラム名2:データ型] ...

合わせ技で一本!コマンド後の流れ

rails g modelは、あくまで雛形作成の第一歩です。実際の開発では、以下の流れをセットで覚えておきましょう。

  1. モデル生成: rails g model Tweet content:text user:references

    • Tweetモデルの設計図とファイルを作成。
  2. アソシエーション追記: app/models/user.rbファイルを開いて、has_many :tweetsを追記します。

    • TweetUserに「属している」(belongs_to)、UserTweetを「たくさん持っている」(has_many)という関係は、対で定義する必要があります。has_many側は自動では追記されないので、手で書きます。
  3. DBへ反映: rails db:migrate

    • マイグレーションファイル(設計図)を元に、データベースにtweetsテーブルを実際に作成します。
  4. 利用開始!: これで、コントローラなどでTweet.create(...)のようにモデルを使えるようになります。

おわりに

いかがでしたでしょうか?

rails g modelは、単にファイルを作るだけでなく、Railsの命名規則に則って、データベースの設計図からモデル間の関連付けまで、多くのことを自動でやってくれる非常にパワフルなコマンドです。

コマンドが裏で何をやっているのかを理解すると、エラーが起きた時にも落ち着いて対処できるようになりますし、何よりRailsでの開発がもっと楽しくなるはずです!

この記事が、皆さんのRailsライフの一助となれば幸いです。

参考

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?