🪝
Model Callbacks
保存/削除前後に自動実行されるフック
Model CallbackはActiveRecordオブジェクトの作成、更新、削除等のライフサイクルイベントに合わせて自動実行されるメソッドです。
主要コールバック順序(create時):
1. before_validation
2. after_validation
3. before_save
4. before_create
5. after_create
6. after_save
7. after_commit(トランザクションコミット後)
class Post < ApplicationRecord
before_save :normalize_title
after_create :send_notification
before_destroy :check_dependencies
private
def normalize_title
self.title = title.strip.titleize
end
def send_notification
NotificationJob.perform_later(self)
end
end
注意: コールバックが多すぎるとコードの流れが把握しにくく、テストも複雑になります。複雑なビジネスロジックはService Objectに分離するのが良いです。
キーポイント
1
before_validation — 検証前データ正規化
2
after_validation — 検証後の追加処理
3
before_save / before_create / before_update — 保存前ロジック
4
after_save / after_create / after_update — 保存後ロジック
5
before_destroy / after_destroy — 削除前後ロジック
6
after_commit — トランザクション完了後(外部API呼び出し、Job実行に適合)
メリット
- ✓ 反復コード削減(DRY)
- ✓ データ一貫性保証
- ✓ ライフサイクルイベントに自動対応
- ✓ 宣言的で意図把握が容易
デメリット
- ✗ 過度なコールバックはコード追跡が困難
- ✗ コールバック順序依存が発生しうる
- ✗ テスト時の意図しない副作用
- ✗ Service Objectの方が適切な場合が多い
ユースケース
データ正規化(before_save)
通知送信(after_create)
UUID自動生成(before_create)
監査ログ記録(after_save)
関連データ整理(before_destroy)