引き続き Feature Flag を実現するサービス「Unleash」を試していく.今回は Unleash server を構築して,実際に Unleash SDKs を使ってコードを書いていく.前回デモを試した記事は以下にある.
Unleash server を構築する
「Unleash」には大きく「計3種類 (Open Source / Pro / Enterprise)」のプランがある.今回は Open Source として使うため,Unleash server を構築する必要がある.ドキュメントには Hosted by you
と書いてある.
Unleash server は Node.js と PostgreSQL を中心に実装されている.以下のドキュメントを確認して,今回は Docker Compose を使って macOS 上に構築することにした.
docker-compose.yml
は GitHub に公開されているため,手順通りに実行すれば,簡単に構築できる.
$ docker-compose build $ docker-compose up
http://localhost:4242/
にアクセスをしたら管理画面にアクセスできた!デフォルトで設定されている username
と password
はドキュメントに載っている.
Unleash SDKs を使う前に
SDK を使う前に「フラグ」と「API token」を設定しておく必要がある.今回はサンプルとして「ピザデリバリーサービス🍕を使って注文をしたときに "次回使えるクーポンを発行する新機能"」というシナリオでフラグ管理をすることにする.よって coupon
というフラグを Release
タイプとして設定しておく.そして管理画面から「API token」も発行しておく.今回はキャプチャ以外にプロジェクト設定で default
環境を有効化してある.
Unleash SDKs
やっと Unleash SDKs を使う.ドキュメントに載っている通り,Unleash は多くの SDK をサポートしている.今回は Ruby SDK を試す.
- Official SDKs
- Server-side SDKs
- .Net SDK
- Go SDK
- Java SDK
- Node.js SDK
- PHP SDK
- Python SDK
- Ruby SDK
- Rust SDK
- Front-end SDKs
- Android SDK
- iOS Proxy SDK
- JavaScript SDK
- React Proxy SDK
- Server-side SDKs
Ruby SDK の仕様はドキュメントや GitHub に載っている.サンプルコードを参考に書いていく.
1. フラグを有効化する
まず,以下のコードを書いた.Unleash Client と Unleash Context を設定している.Unleash Context はフラグリクエストを制御するときに使えるオブジェクトとなり,user_id
や任意の値などを設定できる.
require 'unleash' @unleash = Unleash::Client.new( url: 'http://localhost:4242/api', app_name: 'kakakakakku-blog', custom_http_headers: {'Authorization': 'xxxxx'} ) def order unleash_context = Unleash::Context.new unleash_context.user_id = ENV['USER_ID'] puts '1. 注文を受け付けました' if @unleash.is_enabled? 'coupon', unleash_context puts '2. クーポンを発行しました' end end order
実行すると,以下のようにフラグによって機能を有効化できている.
# フラグ OFF(無効化) $ USER_ID=100 ruby 1-unleash.rb 1. 注文を受け付けました # フラグ ON(有効化) $ USER_ID=100 ruby 1-unleash.rb 1. 注文を受け付けました 2. クーポンを発行しました
2. Variant を使う
次に Variant を使って,機能を有効化しつつ,ユーザーによって異なる挙動を返す.まず,以下のように coupon-code-a (50%)
と coupon-code-b (50%)
を追加した.Payload として,実際のクーポンコードを設定している.
そして,使った以下のコードを書いた.フラグを確認した後に get_variant()
を使って Payload を取得している.
require 'unleash' @unleash = Unleash::Client.new( url: 'http://localhost:4242/api', app_name: 'kakakakakku-blog', custom_http_headers: {'Authorization': 'xxxxx'} ) def order unleash_context = Unleash::Context.new unleash_context.user_id = ENV['USER_ID'] puts '1. 注文を受け付けました' if @unleash.is_enabled? 'coupon', unleash_context variant = @unleash.get_variant 'coupon', unleash_context puts '2. クーポン ' + variant.payload.fetch('value') + ' を発行しました' end end order
実行すると,以下のようにフラグによって機能を有効化できている.
# フラグ ON(有効化) # ユーザー ID : 100 $ USER_ID=100 ruby 2-unleash.rb 1. 注文を受け付けました 2. クーポン a0001 を発行しました # フラグ ON(有効化) # ユーザー ID : 200 $ USER_ID=200 ruby 2-unleash.rb 1. 注文を受け付けました 2. クーポン b0001 を発行しました
まとめ
引き続き Feature Flag を実現するサービス「Unleash」を試している.今回は Docker Compose を使って Unleash server を構築したり,実際に Unleash Ruby SDK を使ってコードを書いた.次回はフロントエンド側の Unleash SDKs を使ってコードを書いていく!続く〜