日々のRails開発に役立つ必須の生産性ショートカット、メモリ最適化パターン、デバッグテクニック。
クエリとメモリの最適化
1. pluck と map の比較
pluck はActiveRecordモデルオブジェクトをメモリ上に生成せず、データベースのカラム値を直接配列で取得します:
# 遅い: 10,000件のUserオブジェクトをメモリに生成
User.all.map(&:email)
# 高速: email列の値のみを文字列配列として直接取得
User.pluck(:email)
2. find_each によるバッチ分割処理
巨大なテーブルを一度に全件メモリへ読み込むのを防ぎます:
# 1,000件ずつのバッチ単位でロード
User.find_each(batch_size: 1000) do |user|
user.sync_with_crm
end
Railsコンソール生産性ショートカット
# 直前に評価された式の結果を取得
user = User.find(1)
_ # 直前のuserオブジェクトを返す
# コンソール内で実行時間をベンチマーク計測
Benchmark.ms { 1000.times { User.count } }
# コンソールを再起動せずにRailsコードを再読み込み
reload!
タイムスタンプの更新 (touch)
子リレーションの更新時に親モデルの updated_at タイムスタンプを自動更新:
class Comment < ApplicationRecord
belongs_to :article, touch: true
end