ユーザー機能を備えた実践的な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の基礎から実践への大きな一歩です。
ヘッダー画像の引用元
UnsplashのChristopher Gowerが撮影した写真
この記事はChatGPTを用いて作成されました。
コメント 0件