---
title: 変わるもの、変わらないもの
tags:  #omotesandorb  
author: [Saeki Mototsune](https://docswell.com/user/daily_mototsune)
site: [Docswell](https://www.docswell.com/)
thumbnail: https://bcdn.docswell.com/page/LE1YDGX57G.jpg?width=480
description: 変わるもの、変わらないもの by Saeki Mototsune
published: June 04, 26
canonical: https://docswell.com/s/daily_mototsune/KWR4PY-2026-06-04-210136
---
# Page. 1

![Page Image](https://bcdn.docswell.com/page/LE1YDGX57G.jpg)

変わるもの
変わらないもの
@Omotesando.rb #122


# Page. 2

![Page Image](https://bcdn.docswell.com/page/GEWGYKNWJ2.jpg)

もとつねの日常
@daily_mototsune
Ruby on Railsを中心に扱っているフリーランスエンジニア
ドメインモデリングからAWSでの運用、スクラム運営やチームビルディ
ングなどなど楽しくやらせてもらってます
普段はOmotesando.rbやGinza.rbによくいます
🍷♨✈🏎


# Page. 3

![Page Image](https://bcdn.docswell.com/page/47ZLXZ32J3.jpg)

今日はモデル設計とか
そんな感じの話です


# Page. 4

![Page Image](https://bcdn.docswell.com/page/YJ6W4ZZ6JV.jpg)

変わるもの
変わらないもの


# Page. 5

![Page Image](https://bcdn.docswell.com/page/GJ5MQWW5J4.jpg)

変わるもの
-
今日の気分
口座の残高
メールアドレス
注文ステータス
自分の名前


# Page. 6

![Page Image](https://bcdn.docswell.com/page/9E29PQQG7R.jpg)

変わらないもの
-
利用規約に同意した事実
メールを送信した事実
@Omotesando.rb #122にきた事実
私が結婚した事実


# Page. 7

![Page Image](https://bcdn.docswell.com/page/D7Y45WWGEM.jpg)

ここが今日の話の中心です。
(結婚の話じゃないよ)


# Page. 8

![Page Image](https://bcdn.docswell.com/page/VENYN998J8.jpg)

StateとEvent
状態と出来事


# Page. 9

![Page Image](https://bcdn.docswell.com/page/Y79PR22XE3.jpg)

状態


# Page. 10

![Page Image](https://bcdn.docswell.com/page/G78DW5597D.jpg)

変わるメールアドレス


# Page. 11

![Page Image](https://bcdn.docswell.com/page/L7LMNYYMJR.jpg)

注文のステータス


# Page. 12

![Page Image](https://bcdn.docswell.com/page/4EMYXNN6EW.jpg)

出来事


# Page. 13

![Page Image](https://bcdn.docswell.com/page/PER9NDDNJ9.jpg)

決済が完了した事実


# Page. 14

![Page Image](https://bcdn.docswell.com/page/P7XQN118EX.jpg)

状態と出来事の整理


# Page. 15

![Page Image](https://bcdn.docswell.com/page/37K9N22L7D.jpg)

さて
我々はRails(ActiveRecord)
を使うわけだけど


# Page. 16

![Page Image](https://bcdn.docswell.com/page/LJ3WV446J5.jpg)

ActiveRecordは
createもupdateもできる


# Page. 17

![Page Image](https://bcdn.docswell.com/page/8JDK8QQMEG.jpg)

どれが状態でどれが出来事？
-
User
Order
Payment
LoginLog
Agreement
NotificationDelivery


# Page. 18

![Page Image](https://bcdn.docswell.com/page/VEPK8LLQ78.jpg)

全員が理解していないと
「ログだけど typo 直したいから update しようね」
「決済履歴だけど status 変えれば辻褄合うよね」
「同意履歴だけど最新の規約IDに直しておこうね」


# Page. 19

![Page Image](https://bcdn.docswell.com/page/27VVNQQP7Q.jpg)

自由の代償


# Page. 20

![Page Image](https://bcdn.docswell.com/page/5JGLKWWQ7L.jpg)

出来事モデルには制約をかけた方がいい
- 「これは変わるデータです」
- 「これは変わらない記録です」
という意図を、モデルの名前やコメントだけではなく、コードの振る舞いと
して表現したい。


# Page. 21

![Page Image](https://bcdn.docswell.com/page/47QYN33WEP.jpg)

fuhen_record gem


# Page. 22

![Page Image](https://bcdn.docswell.com/page/KE4WG111J1.jpg)

https://rubygems.org/gems/fuhen_record


# Page. 23

![Page Image](https://bcdn.docswell.com/page/L71YDGG5JG.jpg)

https://github.com/saeki-mototsune/fuhen_record/


# Page. 24

![Page Image](https://bcdn.docswell.com/page/G7WGYKKWE2.jpg)

宣言で設計意図の伝承
「このテーブルはCRUDのUとDを前提にしていません」
「このレコードは、あとから都合よく直すものではありません」
「過去の事実は、追記によって扱います」


# Page. 25

![Page Image](https://bcdn.docswell.com/page/4JZLXZZ2E3.jpg)

変えれないことを価値に


# Page. 26

![Page Image](https://bcdn.docswell.com/page/YE6W4Z86EV.jpg)

Takeaway
データには、変わるものと変わらないものがあります。
変わるものは State として扱う。
変わらないものは Event、または Record として扱う。
そして、変わらないことが大切な ActiveRecord モデルには、fuhen_record を使う。


