Open6

flipperを使ってfeatureフラグを実装

DANDAN

何ができるか?

フラグがONかOFFかによって、処理を分岐させることができる。

if Flipper.enabled?(:hoge)
  'ほげほげ'
else
  'ふがふが'
end
DANDAN

フラグの保存場所について

選べる。Railsで使う場合には、ActiveRecord adapterを使って、DBで管理するのが無難そう。

Gemfile
gem 'flipper-active_record'
$ bundle install
$ rails g flipper:active_record # 以下のmigrationファイルが生成される
db/migrate/20240712075358_create_flipper_tables.rb
class CreateFlipperTables < ActiveRecord::Migration[7.1]
  def up
    create_table :flipper_features do |t|
      t.string :key, null: false
      t.timestamps null: false
    end
    add_index :flipper_features, :key, unique: true

    create_table :flipper_gates do |t|
      t.string :feature_key, null: false
      t.string :key, null: false
      t.text :value
      t.timestamps null: false
    end
    add_index :flipper_gates, [:feature_key, :key, :value], unique: true, length: { value: 255 }
  end

  def down
    drop_table :flipper_gates
    drop_table :flipper_features
  end
end
$ rails db:migrate

flipper_featuresテーブル、flipper_gatesテーブルが生成される。

DANDAN

Flipper UI

フラグ管理のためのwebページを提供してくれるgemがある。
エンジニアじゃなくてもUI上からフラグ制御できるので便利。

Gemfile
gem 'flipper-ui'
$ bundle install
config/routes.rb
Rails.application.routes.draw do
  # ...
  mount Flipper::UI.app(Flipper) => '/flipper'
end





フラグが作成され、DBにレコードが作成される。

DANDAN

その他、

  • 特定のユーザーのみ許可
  • 特定のグループのみ許可

みたいな制御も可能。
この場合、usersテーブルにflipper_idカラムを追加したりとか、設定が必要。