scaffoldでデータ処理機能を素早く作ってみよう
学習の目標
本章では、以下の内容を学習します。
- データベースのテーブルとカラムの基本概念を理解する
- Railsのモデルとデータベースの関係を把握する
- scaffoldコマンドを使ってデータ処理機能を一括生成する方法を習得する
- データベースマイグレーションの基本を学ぶ
- 実際にデータベースを操作するWebアプリケーションを体験する
はじめに
Webアプリケーションを作ると聞くと、「なんだか難しそう…」と感じるかもしれません。しかし、Ruby on Rails(以下、Rails)を使えば、驚くほど簡単に基本的なWebアプリケーションを作ることができます。
今回は、Railsが持つ scaffold(スキャフォールド)という機能を使って、データを保存したり、編集したり、削除したりできるアプリケーションを作ってみましょう。たった数回のコマンド入力だけで、データを扱うWebアプリケーションの基本形が完成します。
これを体験することで、Railsのスピード感や、MVC(モデル・ビュー・コントローラ)という仕組みを直感的に理解できるようになります。
内容は少し多めですが、何度か繰り返し実践すれば、Webアプリケーション開発の流れがつかめるはずです。焦らず、一緒に進めていきましょう!
データベースの基本概念
テーブルとカラムとは?
データを保存するには、データベースという仕組みを使います。その中で、データを整理して保存するための箱がテーブルです。
テーブルは「エクセルの表」をイメージすると分かりやすいでしょう。横に並ぶ列(カラム)がデータの種類、縦に並ぶ行(レコード)が実際のデータとなります。
id | title | body | created_at |
---|---|---|---|
1 | 初めての投稿 | こんにちは! | 2025-05-01 12:00:00 |
2 | Railsの学習 | 楽しいです! | 2025-05-02 14:00:00 |
3 | scaffold機能 | 便利ですね! | 2025-05-03 16:00:00 |
テーブルとカラムの関係は次のように考えるとわかりやすいです。
- テーブル → データのまとまり(エクセルの1つのシート)
- カラム → データの項目(「タイトル」「本文」など)
- レコード → 1つのデータ(1つの記事の情報など)
例えば、ブログの記事を保存する「posts」テーブルがあるとします。このテーブルには以下のようなカラムがあります。
- タイトル(title)
- 本文(body)
- 作成日時(created_at)
このように、テーブルの中には「どんなデータを保存するのか」を決めるカラムがあり、それに沿ってデータが追加されていきます。
Railsにおけるモデルの役割
モデルとは?
モデルは、テーブルを操作するための「窓口」のようなものです。Railsでは、データベースに直接アクセスせずに、モデルを使ってデータの追加・取得・編集・削除を行います。
例えば、「Postモデル」を使うと、次のようなコードで記事データを作成できます。
post = Post.new(title: "初めての投稿", body: "こんにちは!")
post.save
このコードを実行すると、データベースの「posts」テーブルに新しい記事が保存されます。
モデル名とテーブル名のルール
Railsでは、モデル名とテーブル名には以下のルールがあります。
- モデル名 → 単数形 + 大文字はじまり(例:Post)
- テーブル名 → 複数形(例:posts)
例えば、以下のような対応関係があります。
- 「User」モデルのデータは「users」テーブルに保存される
- 「Book」モデルのデータは「books」テーブルに保存される
このルールは、Railsの「設定よりも規約」という思想に基づいています。決まりに従って命名すれば、複雑な設定をせずに自動的に連携してくれるのです。
こういったルールは知らないと混乱することもあるので、しっかり覚えておきましょう。
scaffoldを使ったアプリケーション作成
scaffoldコマンドとは?
Railsにはscaffoldという便利な機能があり、簡単なコマンドを入力するだけでモデル・テーブル・コントローラ・ビューをまとめて作成できます。
次のコマンドをターミナルで実行してみましょう。
rails generate scaffold Post title:string body:text
scaffoldコマンドの意味
このコマンドの各部分には次のような意味があります。
rails generate scaffold
→ scaffoldを使って基本的なCRUD機能を作成Post
→ モデル名(単数形)title:string
→ 「title」というカラムを文字列型(string)で作成body:text
→ 「body」というカラムをテキスト型(text)で作成
つまり、このコマンドを実行すると、次のようなことが自動で行われます。
- 「Post」モデルの作成
- 「posts」テーブルの作成(titleカラムとbodyカラム付き)
- 「PostsController」の作成(CRUD機能付き)
- ビュー(画面表示)の作成
- ルーティング(URLと処理の対応付け)の設定
CRUDとは、Create(作成)、Read(読み取り)、Update(更新)、Delete(削除)の頭文字を取った言葉で、データ操作の基本となる4つの機能を指します。
コマンドを実行すると、以下のようなログがターミナルに表示されるかと思います。
invoke active_record
create db/migrate/20250101000000_create_posts.rb
create app/models/post.rb
invoke test_unit
create test/models/post_test.rb
create test/fixtures/posts.yml
invoke resource_route
route resources :posts
invoke scaffold_controller
create app/controllers/posts_controller.rb
invoke test_unit
create test/controllers/posts_controller_test.rb
create app/helpers/posts_helper.rb
invoke assets
invoke scss
create app/assets/stylesheets/posts.scss
invoke scss
create app/assets/stylesheets/scaffold.scss
それぞれ create
と表示されている部分が、実際に作成されたファイルです。これらのファイルは、後で詳しく見ていきます。
データベースマイグレーション
scaffoldコマンドを実行しただけでは、まだデータベースに実際のテーブルが作られていません。テーブルを作成するには、次のコマンドを実行します。
rails db:migrate
このコマンドを実行すると、データベースに「posts」テーブルが実際に作成されます。
マイグレーションとは、データベースの構造を変更するための仕組みです。新しいテーブルの作成や、既存のテーブルへのカラム追加などを行うことができます。
このマイグレーションというのが、初心者にとっては難しいかもしれません。
マイグレーションは、データベースの設計図を変更するためのもので、実際にデータベースに反映させるためには rails db:migrate
コマンドを実行する必要があります。
Excel やスプレッドシートに例えると、マイグレーションは「新しいシートを作成する」や「既存のシートに新しい列を追加する」ようなものです。
作成したアプリケーションを動かしてみる
サーバーの起動
それでは、実際に作成したアプリケーションを動かしてみましょう。まだRailsサーバーを起動していない場合は、次のコマンドを実行します。
rails server
(または短縮形で rails s
)
ブラウザでのアクセス
サーバーが起動したら、ブラウザで http://127.0.0.1:3000/posts
にアクセスしてみてください。
Posts の一覧画面が表示されるはずです。
また、「New Post」(新規投稿)のリンクをクリックすると、新しい記事を作成できます。
データの作成と操作
「New Post」をクリックすると、記事の作成画面が表示されます。タイトルと本文を入力して、「Create Post」ボタンをクリックしてみましょう。
記事が作成されると、その詳細画面が表示されます。ここから「Edit」(編集)、「Back」(一覧に戻る)、「Destroy」(削除)などの操作ができます。
このように、scaffoldを使うだけで、データの作成・表示・編集・削除といった基本機能(CRUD機能)を持つWebアプリケーションが、わずか数分で完成します。
scaffoldで何が作られたのか
scaffoldコマンドを実行すると、多くのファイルが自動生成されていました。
それぞれ、どのような役割を持っているのかを見ていきましょう。
モデル
app/models/post.rb
というファイルが Post
モデルを定義しています。このモデルは、データベースの posts
テーブルと連携し、データの操作を行います。
モデルというのは、データベースのテーブルを操作するためのクラスです。Railsでは、モデル名は単数形で始まります。 例えば、Post
モデルは posts
テーブルに対応しています。
class Post < ApplicationRecord
# バリデーションや関連付けなどの処理をここに記述します
end
Rails においては直接データベースを操作するのではなく、モデルを通じてデータの追加・取得・編集・削除を行います。
言うなれば、モデルはデータベースの「窓口」のようなものです。
デパートなどで商品を買うとき、いきなり商品棚で直接お金を払うのではなく、レジでお金を払いますよね。モデルはそのレジのような役割を果たしています。
コントローラ
app/controllers/posts_controller.rb
というファイルが PostsController
を定義しています。このコントローラは、HTTPリクエストを受け取り、適切な処理を行います。
コントローラについておさらいすると、コントローラはMVCの「C」にあたる部分で、ユーザーからのリクエストを受け取り、適切なモデルやビューを呼び出す役割を持っています。
class PostsController < ApplicationController
before_action :set_post, only: %i[show edit update destroy]
# GET /posts => Post の一覧画面
def index
@posts = Post.all
end
# GET /posts/:id => Post の詳細画面
def show
end
# ...略
end
言うなれば、コントローラは「ユーザーのリクエストを受け取って、どのモデルやビューを使うかを決める役割」を持っています。
デパートなどに行くと、案内係の人がいて、どのフロアに行けばいいか教えてくれますよね。コントローラはその案内係のような役割を果たしています。
ビュー
app/views/posts/
というフォルダには、PostsController
に関連するビュー(画面表示)が格納されています。
ビューというのは、ユーザーに表示される部分で、HTMLやCSSを使ってデザインされています。
例えば、index.html.erb
というファイルは、記事の一覧を表示するためのHTMLテンプレートです。
ビューの例:
<h1>Posts</h1>
<table>
<thead>
<tr>
<th>Title</th>
<th>Body</th>
<th colspan="3"></th>
</tr>
</thead>
<tbody>
<% @posts.each do |post| %>
<tr>
<td><%= post.title %></td>
<td><%= post.body %></td>
<td><%= link_to 'Show', post %></td>
<td><%= link_to 'Edit', edit_post_path(post) %></td>
<td><%= link_to 'Destroy', post, method: :delete, data: { confirm: 'Are you sure?' } %></td>
</tr>
<% end %>
</tbody>
</table>
このように、ビューはユーザーに見せる部分を担当しています。
デパートなどに行くと、商品が並んでいる棚がありますよね。ビューはその棚のような役割を果たしています。
マイグレーションファイル
db/migrate/YYYYMMDDHHMMSS_create_posts.rb
などのようなファイルが、データベースのマイグレーションを定義しています。このファイルには、テーブルの構造やカラムの情報が記述されています。
class CreatePosts < ActiveRecord::Migration[6.0]
def change
create_table :posts do |t|
t.string :title
t.text :body
t.timestamps
end
end
end
このファイルは、rails db:migrate
コマンドを実行することで、実際にデータベースにテーブルを作成するためのものです。 マイグレーションは、データベースの設計図を変更するためのもので、実際にデータベースに反映させるためには rails db:migrate
コマンドを実行する必要があります。
詳しい扱い方は今後の章で学んでいきますが、ここでは「マイグレーションはデータベースの設計図を変更するためのもの」と覚えておきましょう。
ルーティング設定
config/routes.rb
というファイルには、URLとコントローラのアクションを結びつける設定が記述されています。
Rails.application.routes.draw do
resources :posts
end
上記の設定により、/posts
というURLにアクセスすると、PostsController
の index
アクションが呼び出されるようになります。 他にも、/posts/:id
で show
アクション、/posts/new
で new
アクションなどが自動的に設定されます。
このように、ルーティングはURLとコントローラのアクションを結びつける役割を持っています。
※詳しくは今後の章で学んでいきますが、ここでは「ルーティングはURLとコントローラのアクションを結びつけるもの」と覚えておきましょう。
ルーティングは、デパートなどで「どのフロアに行けばいいか」を教えてくれる案内板のような役割を果たしています。
まとめ
本章では、Railsのscaffold機能を使って、データを扱うWebアプリケーションを簡単に作成する方法を学びました。以下の内容を理解できたことと思います。
- テーブルはデータを保存するための表で、カラム(項目)を持つ
- モデルはテーブルを操作する窓口で、テーブルと1対1で対応する
- モデル名は単数形、テーブル名は複数形にするというRailsの命名規則
- scaffoldコマンドを使うと、モデル・テーブル・コントローラ・ビューを一括で作成できる
- マイグレーションを実行することで、実際にデータベースにテーブルが作成される
scaffoldは、Railsの強力な機能の一つであり、Webアプリケーション開発の基本的な流れを手軽に体験できるツールです。ここで学んだ概念は、今後のRails開発の基礎となります。