Ruby on Rails 入門 : Webアプリ開発の強力なフレームワーク 3

ユーザー機能を備えた実践的なRailsアプリ開発


これまでの記事では、Railsの基本構造やMVC、ルーティングなどを解説してきました。
本記事では、実際のWebアプリ開発でほぼ必須となる
「ユーザー登録・ログイン機能」 を備えたRailsアプリの構築について解説します。

ユーザー機能を実装することで、Railsアプリは一気に実践的になります。


ユーザー機能が重要な理由


多くのWebサービスでは、次のような機能が求められます。

・ユーザー登録
・ログイン・ログアウト
・ログインユーザーごとのデータ管理
・権限によるアクセス制御

Railsでは、これらの機能を比較的少ないコードで実装できます。


deviseを使ったユーザー認証


Railsでユーザー認証を実装する際、最もよく使われるgemが devise です。

deviseの導入

bundle add devise
rails generate devise:install

次に、ユーザーモデルを作成します。

rails generate devise User
rails db:migrate

これだけで、以下の機能が自動的に追加されます。


ユーザー登録
ログイン / ログアウト
パスワードの暗号化
セッション管理
ログイン状態の判定


deviseを導入すると、ControllerやViewで便利なメソッドが使えるようになります。

user_signed_in?
current_user


例:ログイン中のユーザー名を表示するView

<% if user_signed_in? %>
  <p>こんにちは、<%= current_user.email %> さん</p>
<% else %>
  <p>ログインしてください</p>
<% end %>


ログイン必須の制御
特定のページを「ログインしたユーザーのみ」閲覧可能にしたい場合、
Controllerで次のように指定します。

before_action :authenticate_user!
class ArticlesController < ApplicationController
  before_action :authenticate_user!, except: [:index, :show]
end

これにより、未ログインユーザーは自動的にログイン画面へリダイレクトされます。


ユーザーとデータを紐づける


実践的なアプリでは、「誰が作成したデータか」を管理することが重要です。


モデルの関連付け

class User < ApplicationRecord
  has_many :articles
end
class Article < ApplicationRecord
  belongs_to :user
end

マイグレーションでuser_idを追加します。

rails generate migration AddUserToArticles user:references
rails db:migrate


ログインユーザーのデータを保存する
記事作成時に、ログイン中のユーザーを紐づけます。

def create
  @article = current_user.articles.build(article_params)
  if @article.save
    redirect_to @article
  else
    render :new
  end
end

これにより、他人の記事を勝手に操作できない構造になります。


アクセス制御(認可)の考え方
「ログインしているか」だけでなく、
「そのユーザーが操作してよいか」も重要です。
例:記事の編集を投稿者のみに制限する

before_action :set_article, only: [:edit, :update, :destroy]
before_action :authorize_user!, only: [:edit, :update, :destroy]

def authorize_user!
  redirect_to articles_path unless @article.user == current_user
end



ユーザー機能実装時の注意点
パスワードや秘密情報はGitに含めない
権限チェックをController任せにしすぎない
エラーメッセージはユーザーに分かりやすく表示する
セキュリティを意識した設計が、信頼されるサービスにつながります。



次に学ぶべきテーマ


ユーザー機能を実装できたら、次のステップがおすすめです。
管理者権限の実装
ポリシー(Pundit / CanCanCan)
RSpecによるテスト
API + フロントエンド分離
これらを学ぶことで、実務レベルのRails開発に近づきます。


まとめ


ユーザー機能は、Railsアプリを「教材」から「サービス」へ引き上げる重要な要素です。
deviseを活用しつつ、データの関連付けや認可を正しく設計することで、
安全で拡張性の高いアプリケーションを構築できます。
ここまで理解できれば、Railsの基礎から実践への大きな一歩です。


ヘッダー画像の引用元
UnsplashChristopher Gowerが撮影した写真


この記事はChatGPTを用いて作成されました。

コメント 0件