0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Chankoがproduction環境でもerrorをraiseするようにする

Last updated at Posted at 2020-04-17

本番でも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.

これ、どこにかくのかな、って私なったんですけどとりあえず以下ファイル作ったらうまくいきました

config/initializers/chanko_initialize.rb
module Chanko
  Config.raise_error = true
end

以上。
普通にライブラリのmodule上書きしてるだけだけども。
initializerでやるのかどこでやるのかなどが割とぼんやりなので、もっといいやり方があったら教えてほしいです。

  1. 特定の条件をまとめて実行するChanko内の単位

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?