最低限のFeature Flagの機能とWeb UIを備えたgemを作りました。
komagata/switchlet: Minimal feature flag gem
インストール
bundle install
rails generate switchlet:install
rails db:migrate
使い方
if Switchlet.enabled?(:my_feature)
# my_feature code
end
(まだ存在しないフラグはfalseになります。)
よくあるパターン
# 6月1日以降に有効にする
if Switchlet.enabled?(:my_feature) && Time.current > Time.parse('2025-06-01 00:00:00')
# 4分の1のユーザーに有効にする
if Switchlet.enabled?(:my_feature) && current_user.id % 4 == 0
# スタッフユーザーにだけ有効にする
if Switchlet.enabled?(:my_feature) && current_user.stuff?
Web UI
下記で使えるWeb UIからフラグを作成・ON/OFFできます。
mount Switchlet::Engine => "/switchlet"
本番環境でWeb UIからフラグのON/OFFすることを想定しているので複数の方法でWeb UIへのアクセスを制限できます。
# config/initializers/switchlet.rb
Switchlet.configure do |config|
# Devise + admin role
config.authenticate_with do |controller|
controller.authenticate_user! && controller.current_user.admin?
end
end
上記はdeviseとの組み合わせ。Basic認証やIPでの制限、それぞれの組み合わせもできます。
作った理由
Feature Flag系のgemを色々試したのですが、僕の用途にとっては複雑でオーバースペックなものが多かったためです。 上記に書いた、どういう条件で有効になるかみたいなものは表現力の高いruby自体で書きたかった。