最低限の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"

ss

本番環境で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自体で書きたかった。

Comments


Option