こんにちは、かつコーチです。
「rails newでフォルダはできたけど、どこに何を書けばいいのか分からない」。
Rails初心者が最初にぶつかる壁の一つです。
この記事では、Railsの設計の土台となるMVCという考え方と、実際のディレクトリ構成の対応関係を解説します。
読み終える頃には、フォルダを見ただけで「ここに何を書けばいいか」が分かるようになります。
MVCとは?
データ・画面・制御を分ける設計パターン
MVCとは、Model(モデル)・View(ビュー)・Controller(コントローラ)の頭文字を取った設計パターンです。
アプリケーションの処理を、次の3つの役割に分けて整理する考え方です。
- Model:データベースとのやり取りやデータのルールを担当する
- View:ユーザーに見せる画面(HTML)を担当する
- Controller:ユーザーからのリクエストを受け取り、ModelとViewをつなぐ役割を担当する
Railsはこの3つの役割ごとにファイルを配置する場所が決まっています。
これもRails1本目の記事で紹介した「設定より規約(CoC)」の一部です。
なぜ役割を分ける必要があるのか
もし画面の処理・データの処理・制御の処理を1つのファイルにまとめて書いてしまうと、コードはあっという間に読みにくくなります。
機能を追加するたびに、どこに何が書いてあるか探すのに時間がかかってしまうためです。
MVCで役割を分けておくと、次のようなメリットがあります。
- 「画面を直したいならView」「データの扱いを直したいならModel」と迷わず探せる
- 複数人での開発でも、担当箇所がぶつかりにくい
- テストを書くときも、役割ごとに分けてテストしやすい
app/配下のディレクトリ構成
モデル:app/models
app/modelsには、データベースのテーブルと対応するモデルのファイルを置きます。
データの検証(バリデーション)や、テーブル同士の関連(アソシエーション)もここに書きます。
# app/models/post.rb
class Post < ApplicationRecord
validates :title, presence: true
end
このモデルは、postsテーブルと自動的に対応づけられます。validates :title, presence: trueは「タイトルは必ず入力する」というルールを設定している部分です。
ビュー:app/views
app/viewsには、ユーザーに表示する画面のテンプレートを置きます。
Railsでは標準でERB(Embedded Ruby)という形式のファイルを使います。
拡張子は.html.erbです。
<!-- app/views/posts/index.html.erb -->
<h1>投稿一覧</h1>
<ul>
<% @posts.each do |post| %>
<li><%= post.title %></li>
<% end %>
</ul>
<% %>で囲んだ部分にRubyのコードを書き、<%= %>で囲んだ部分は値を画面に出力します。
ERBの詳しい書き方は、別の記事「ビュー(ERB)の基本とレイアウト」で解説予定です。
コントローラ:app/controllers
app/controllersには、ユーザーからのリクエストを受け取って処理するコントローラを置きます。
Modelからデータを取得し、Viewに渡す橋渡し役です。
# app/controllers/posts_controller.rb
class PostsController < ApplicationController
def index
@posts = Post.all
end
end
indexのようなメソッドをアクションと呼びます。
コントローラとアクションについては、次の記事「コントローラの基本:アクションとストロングパラメータ」で詳しく解説します。
その他の主要フォルダの役割
config:設定ファイル
configフォルダには、ルーティングやデータベース接続などの設定ファイルをまとめて置きます。
特にconfig/routes.rbは、URLとコントローラの対応関係を定義する重要なファイルです。
ルーティングの詳細は次回の記事で扱います。
db:マイグレーションとスキーマ
dbフォルダには、テーブルの作成・変更履歴を記録するマイグレーションファイルが保存されます。db/schema.rbには、現在のデータベース構造がまとめて記録されています。
app/assets・public:静的ファイル
CSSや画像などの静的ファイルは、主にapp/assetsに置きます。
Rails 8ではデフォルトでPropshaftというアセット管理の仕組みが採用されています。
よくあるつまずきポイント・エラー対処
Before/After:ファイルの置き場所を間違えるケース
Rails初心者が特にやりがちなのが、モデルとコントローラの置き場所を間違えるミスです。
私自身も学習を始めた頃、コントローラ用のファイルをうっかりapp/modelsに置いてしまい、次のようなエラーに遭遇しました。
❌Before:コントローラをmodelsフォルダに置いてしまう
app/models/posts_controller.rb ← 置き場所を間違えている
このままルーティングからアクセスしようとすると、次のエラーが表示されます。
uninitialized constant PostsController
Railsは「ファイルの置き場所」と「クラス名」の対応関係を規約で決めています。app/controllersに置くべきファイルがapp/modelsにあると、Rails側がクラスを見つけられません。
✅After:正しいフォルダに配置する
app/controllers/posts_controller.rb ← 正しい置き場所
Railsのファイルは「役割ごとのフォルダに、決まった命名規則で置く」というルールを徹底することが大切です。
迷ったときは「これはデータの話か、画面の話か、制御の話か」を考えると、置き場所を判断しやすくなります。
まとめ
この記事のポイント
- MVCはModel・View・Controllerの3つに役割を分ける設計パターン
- Modelは
app/models、Viewはapp/views、Controllerはapp/controllersに配置する configは設定、dbはマイグレーションとスキーマの管理を担当する- ファイルの置き場所を間違えると、
uninitialized constantのようなエラーが発生する
次に読むべき記事
MVCの全体像がつかめたら、次はURLとコントローラをつなぐ仕組みを学びましょう。
「ルーティングの基本:config/routes.rbの書き方」で、リクエストの入り口を理解してみてください。
タグ: Ruby on Rails, 初心者向け, 入門