はじめに
久しぶりにRailsで基本の認証からCRUD機能を作ってみて感じたこと、Rails8で気になった点についてまとめました。
前提
- Ruby 4.0.1
- Rails 8
- rails new
Rails8 で気になったこと
Railsの最新バージョン8で気になった変更点についてまとめています。
ストロングパラメータ
require / permit から expect へ
従来のRailsでは require と permit を使ってストロングパラメータを定義していました。
params.require(:article).permit(:title, :body)
Rails8からは expect を使ってパラメータ処理を書くことができます。
params.expect(article: [:title, :body])
結果としてパラメータは次のような形式になります。
{
article: {
title: ...,
body: ...
}
}
require / permit は Rails4 で、不正なパラメータからアプリケーションを保護するために導入された仕組みです。
Rails8では、よりシンプルで安全に書けるよう expect が導入されました。
form_for から form_withへ
Railsのフォームヘルパーも以前変更されています。
form_for は Rails5.1 以前で使われていた書き方で、現在は form_with が推奨されています。
form_for
<%= form_for @model do |f| %>
<%= f.text_field :attribute %>
<%= f.submit "Submit" %>
<% end %>
form_with
<%= form_with model: @model do |f| %>
<%= f.text_field :attribute %>
<%= f.submit "Submit" %>
<% end %>
Railsはバージョンを重ねるごとに、よりシンプルに書けるよう改善されていると感じました。
Rails8の認証機能
これまでRailsで認証機能を実装する場合、
- Devise
- Sorcery
のようなGemを使用するか、User・Sessionを自作して作成することが多かったと思います。
Rails8からは デフォルトで認証機能を生成できるコマンド が用意されています。
bin/rails generate authentication
このコマンドを実行することで認証に必要なファイルが生成されます。
- モデル
- current.rb
- session.rb
- user.rb
- コントローラー
- sessions_controller.rb
- passwords_controller.rb
- views
- sessions/new.html.erb
- passwords/edit.html.erb
- passwords/new.html.erb
- db
- create_sessions.rb
- create_users.rb
- 認証ロジック
- app/controllers/concerns/authentication.rb
認証に必要なモデル、コントローラー、ビュー、ロジックが一通り生成されるため、すぐに認証機能を導入できるようになっています。
ただし認証の仕組みを理解するためにも、一度は自分で認証機能を実装してみることが重要だと感じました。
RailsでCRUD機能〜認証まで触った感想
久しぶりにRailsでCRUDと認証機能を実装してみて、改めて感じたことがいくつかあります。
まず、RailsはMVC構造が明確でアプリケーションの構造が理解しやすいと感じました。
- ルーティング
- モデルの関連付け(has_many / belongs_to)
- バリデーション
- 認証機能
そして特に次の点はRailsの強みだと思いました。
- コード記述量が少ない
- よしなに処理をやってくれる
- ORMが直感的で分かりやすい
これらの機能がフレームワークとして用意されているため、比較的少ないコードでアプリケーションを構築できます。また、Railsガイドや規約に沿って実装することで、人によって実装方法が大きくバラバラになることを防げると感じました。
一方で、Railsは長い歴史があるため、記事によっては古い書き方が混ざっていることも多く、情報の取捨選択が重要だと感じました。
そして、ロジック周りの実装では、シンプルにロジックを組むにはCSやRubyの基礎理解が必要なのと、どのファイルと連携して読み込むのかといった基本の理解が必要だと思いました。
そのため、いきなりRailsに取り組むのではなく、まずRubyの基本を理解し、一度Rubyだけで簡単なアプリケーションを作ってみる。
その上でRailsに触ることで、フレームワークがどれだけ多くの処理を自動で行ってくれているのかを実感できるのではないかと感じました。
おわりに
今回の実装では、古いRailsチュートリアルやQiitaの記事などを参考にしながら実装を進めました。
ただ、Railsはバージョンごとに仕様が変わることも多いため、できるだけ公式に近い情報をベースに学習していきたいと考えています。
RailsチュートリアルのRails8対応版が出たら、改めて体系的に学習してみたいと思っています。
参考