0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【Rails】ツイート投稿アプリの再実装から学んだ基礎知識まとめ

Last updated at Posted at 2025-05-05

【Rails】ツイート投稿アプリの再実装から学んだ基礎知識まとめ

本日は、Railsでツイート投稿アプリの再実装を行いながら、様々な重要概念に触れました。初学者の自分自身が理解を深めるためにも、学んだことを噛み砕いてアウトプットします。

✅ カラム型とは?

カラム型は、データベースの各カラムに格納されるデータの種類を示します。代表的な型には以下があります:

データ型 説明
string 文字列(255文字まで)
text 長い文字列
integer 整数
boolean 真偽値
datetime 日時

✅ インスタンス変数をeachで扱うとは?

<% @tweets.each do |tweet| %>

これは、@tweets(全ツイートの配列)を1つずつ取り出し、tweetという名前で処理する、という意味です。ブロック内では、1つ1つのtweetに対してビューを表示できます。

<%= tweet.image %>

これは、tweetという1つのレコードから、imageカラムのデータを取り出して表示していることになります。

✅ root to: とは?

root to: 'tweets#index'

これは、「アプリを開いたときの最初のページ(ルートパス)をどのアクションにするか」を指定するものです。

アクションと変数名の規則性

Railsでは、アクション名に応じたインスタンス変数の使い方にある程度の「慣習」があります。

アクション名 意味 よく使うインスタンス変数名
index 一覧表示 @users, @tweets(複数形)
show 1件表示 @user, @tweet(単数形)
new 新規作成フォーム @user = User.new
create 作成処理 @user = User.new(user_params)
edit 編集フォーム @user = User.find(params[:id])
update 更新処理 @user = User.find(...)
destroy 削除処理 @user = User.find(...)

@をつけると、ビュー(HTMLを表示する部分)でも使えるようになります。

・アクション名 → 処理の意図(index → 一覧, show → 詳細…)

・インスタンス変数 → ビューで使いたい情報(@user, @tweets

・モデル名 → データベースとつながる「型」(User, Tweet)

・複数データを扱うなら複数形、1つだけなら単数形の変数名が慣習

✅ 例:Tweet(ツイート)アプリの場合

🔹 index アクション(一覧表示)

def index
  @tweets = Tweet.all  # 全てのツイートを取得してビューに渡す
end

・モデル名:Tweet(クラス)
・インスタンス変数:@tweets(Tweetの複数のデータ)(indexのビューで使用するデータ)
・理由:ビューで「全ツイートを一覧で表示」するため複数形

🔹 show アクション(1件表示)

def show
  @tweet = Tweet.find(params[:id])
end

・モデル名:Tweet
・インスタンス変数:@tweet(Tweetの1件)
・理由:「特定のツイート1件」を表示するので単数形

✅ なぜ @ をつけるの?

@ をつけないと、ビューでその変数が使えないからです。

🔹例(ビューに渡らない)

def show
  tweet = Tweet.find(params[:id])  # ローカル変数。ビューでは使えない
end

✅アクション内でインスタンス変数を定義しない場合

Railsではインスタンス変数(@付き)を定義しない場合、ビューに値が渡らないという制約がありますが、「そもそもビューに渡す必要がない場合」にはインスタンス変数を使わないこともあります。

🔹例:redirect_toをつかう場合

def destroy
  tweet = Tweet.find(params[:id])
  tweet.destroy
  redirect_to tweets_path, notice: 'ツイートを削除しました'
end

・tweet はローカル変数(@なし)
・ビューには渡さない(この後 index へリダイレクトする)
・よって、@tweet のようなインスタンス変数にする必要がない

✅ 要点まとめ

状況 インスタンス変数は必要?
ビュー(HTML)で使いたい場合 必要(@変数名
リダイレクトやセッション操作だけの場合(アクション内の処理だけで完結する場合) 不要(ローカル変数でOK)

✅ .newや.allの意味

@tweet = Tweet.new
@tweets = Tweet.all

.new → Tweetモデルから「新しい空のインスタンス」を生成

.all → Tweetモデルから「全レコード」を取得

✅ form_withの解説

<%= form_with(model: @tweet, local: true) do |form| %>
<%= form.text_field :name, placeholder: "Nickname" %>

✅ createアクションと保存の流れ

def create
  Tweet.create(tweet_params)
  redirect_to "/"
end

✅ 削除リンクの仕組みとturbo_method

<%= link_to '削除', "/tweets/#{tweet.id}", data: { turbo_method: :delete } %>

これは、「link_toで作成したリンクをDELETEメソッドとして扱う」ためのコードです。

Railsでは、リンクは通常GETメソッドですが、データ削除にはDELETEメソッドを使う必要があるため、data: { turbo_method: :delete }を付けます。

✅ モデルとインスタンスの使い分け(newとupdateの違い)

Tweet.create # モデルクラスを直接使う(新規保存)
tweet.update # インスタンスに対して更新する

新規投稿 → Tweet.newでモデルから新規インスタンスを生成して保存

編集保存 → 既存インスタンスに対してupdate

✅ link_toとprefix、HTTPメソッド

<%= link_to '削除', tweet_path(tweet), method: :delete %>

weet_path(tweet):プレフィックス(URLのエイリアス)

method: :delete:HTTPメソッドを指定

GET以外のメソッド(POST、DELETEなど)は、リンクだけでは動かせないため、method: :deleteを使って明示します。

✅ その他補足ワードまとめ

用語 解説
prefix rake routesで出てくるURLのショートカット名。ビューでも使いやすくなる。
rails g devise:install Deviseの初期設定コマンド
rails g devise user UserモデルにDevise機能を追加
rails g devise:views Devise用のビューを自動生成
devise_parameter_sanitizer Deviseで許可するパラメータを指定
user_signed_in? ログイン中かどうかを判定
unless 条件がfalseのときだけ実行する(ifの逆)

✍️ 感想

Railsを使っての再実装では、コーディングの手順よりも、なぜこのような書き方になるのかを意識して理解することが重要だと感じました。特に、アクションごとの変数の扱いや、ルーティングとHTTPメソッドの関係は、実際に手を動かすとしっかり理解できると感じました!

0
0
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
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?