変更履歴に付いて気が付いた事
昨日、数ヶ月前にリリースしたソフトの滅多に使わない部分にバグが見つかり修正したのですが、その際に気が付いた事があったので書いてみました。
このソフトは、簡単な業務システムでRuby on Railsで作られています。利用者がかんちがいや間違ってデータを変更してしまった際に、管理者がデータを戻せるように PaperTrail というgem を使ってテーブルの変更履歴を残しています。
システムにはいくつかのテーブルがあり利用者が作成・変更するデータが入るテーブルとプログラムが生成・変更するテーブルがあります。システム設計の時点では上に書いたように誤操作からのリカバーを意図したので、PaperTrail で履歴を残すテーブルは利用者が作成・変更するテーブルのみにしてありました。
今回のバグで作成されたデータの入っているテーブルをリカバーしようと管理画面 RailsAdminで見てみると、なんと履歴がありません・・・・。 なぜ? と思い考えたところで最初に書いた設計時の判断を思い出しました。
このようにソフトにバグがあってテーブルに思わぬ変更が起きる事は想定してなかったのです。今回の経験から全てのテーブルの変更履歴を残した方が良いのではと思い、全てのモデル(テーブル)にPaperTrail を定義しました。
ちなみ、このシステムは少人数がたまに使うシステムなので、全てのモデル(テーブル)で履歴管理する事は全く問題がありません。