本番でもerrorを出せるようにしたくて調べました。
Chankoとは
https://github.com/cookpad/chanko
Cookpadが2013年(!)に開発したRailsのgem
便利で大好きなgem。ユースケースやらなんやらは開発者ブログに詳しいです。
私が使っているのは以下
- 本番環境にdeployしながら、ユーザーには見せない(defaultを出す)
A/Bテストにも使えるのだろうが使っていない。使いたいなー。
何が問題か
Chankoはproduction環境ではerrorをraiseせず、握りつぶしてしまう実装になっている。
不完全なものを出してしまった場合であっても、内部でエラーが発生した場合は別途指定してあるdefaultの内容が実行されるため、ユーザーには最低限元の機能を提供できる。
リリース済みの環境で、新たな機能追加や一部変更、デザイナーとの協業などの際、ざっくりした内容でアップしてもユーザーに影響しない形で実装できるので、CIも回しやすい。ありがたやありがたや…
しかし、エラーは握りつぶされ、よし、ユーザーからの評判も上々だ!本番に実装するぞ!とコードを移した際にエラーが発覚する、ということも往々にしてある。
もしくはA/BテストでAの結果が多く出たけど、実際にはBは内部でエラーが発生しており、きちんと考慮した割合で持ってテストできていなかった、というような場合もありうる。
じゃあもう本番でもちゃんとエラーが出るようにするわ、となったときに考えうる選択肢は2つ
1. unit1単位でerrorをraiseするか指定する
https://github.com/cookpad/chanko/blob/bc20b982df4d22b539f6c08aa2e4414e380ae60d/README.md#raise_error
普通に書いてある。ChankoはReadMeがとってもシンプルでわかりやすくてだいすき。
rails generate chanko:unit test
などでgenerateしてもよい。テンプレートが出てくる。便利。
module ExampleUnit
include Chanko::Unit
raise_error
:
end
これでこのUnitに関してはerrorはraiseされるようになる。
2. productionでもerrorはraiseする設定にしてしまう
You can force all units to raise up errors by Config.raise_error = true.
これ、どこにかくのかな、って私なったんですけどとりあえず以下ファイル作ったらうまくいきました
module Chanko
Config.raise_error = true
end
以上。
普通にライブラリのmodule上書きしてるだけだけども。
initializerでやるのかどこでやるのかなどが割とぼんやりなので、もっといいやり方があったら教えてほしいです。
-
特定の条件をまとめて実行するChanko内の単位 ↩