[EXPO] Split 継続的デリバリ / フィーチャーフラグと実験のためのサービス を紹介します #reinvent

2019.12.04

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

Split とは

re:Invent EXPO (企業の出店)で気になったサービス Split について紹介します。ブース前ではセッションが頻繁に行われ、常に人だかりができていました。

Accelerate feature delivery
Confidently release features as fast as you develop them with Split’s Feature Delivery Platform.

ざっくりドキュメントを読んだところの理解はこんな感じです。
Split はより早く自信を持ってい新しい機能を提供するためのプラットフォームです。新しい機能の提供割合をコントロールできるフィーチャーフラグ(フィーチャートグル - Wikipedia)を中心に提供します。また、提供した新機能で例外やエラーがどの程度発生してるかも、可視化や通知をすることができます。これによって、まだ少数のユーザーに提供しいる影響の少ない段階で対処したり、以前の状態にもどしたりすることができます。

ドキュメントより

特に使い始める動機のためのドキュメントが充実しているようです。

Feature Flags & Split Testing for Product Teams - Split エンジニア、プロダクトマネージャ、データサイエンティスト、アーキテクトの各ロールごとに何が嬉しいのかが説明されています。

Use Cases for Feature Flags in Product Development - Split 沢山のユースケースが説明されています。

  • Trunkベースの継続的デリバリ - Trunk Based Development
  • カナリアリリース - 少数のユーザーから徐々に機能を提供する
  • 本番環境でのテスト - 先にベータユーザーのみに機能を提供するなど
  • Killスイッチ - 提供した機能に問題があった場合に以前の状態に戻す
  • Dark Launch - 事前にユーザーに気づかれないように予めリリース
  • きめ細かいユーザーテスト - 任意の属性を持つユーザーをターゲットにすることで、適切なフィードバックを取得し体験を素早く向上させる
  • マイクロサービスへの移行 - 段階的に移行する
  • Paywall - 無料ユーザーと課金ユーザーを分ける
  • Alpha/Beta テスト - 特定のユーザーに先に展開してフィードバックを得る
  • 機能の廃止 - 機能の廃止や統合にともなうコードの廃止を適切に行う
  • サブスクリプションと機能の管理 - 複数のサブスクリプションプランごとにユーザーのグループを作り機能を提供する
  • A / Bテストと多変量テスト - 結果の違いを監視する
  • フルスタックな実験 - KPIに結びつける

料金プラン

Pricing for Feature Delivery Platform - Split 無料プランと有料プランがあり、フィーチャーフラグとセグメンテーションなどの基本的な機能は無料プランで利用可能。メトリクスやアラート、監査ログなどは有償プラン(Contact us)になっています。

やってみた

環境を選択

Staging/Productionが選択できます。

Splitを作成

名前を付けます。機能を提供したいまとまりで分けると良さそうです。

言語を選択

Android/Go/iOS/Java/JavaScript/.NET/.NET-Core/Node.js/Python/Ruby のSDKが用意されています。今回はJavaScriptを選択しました。言語を選択するとサンプルコードが表示されます。(もちろんAPI[Split docs]も用意されています。)
Splitのclientが getTreatment(‘{Splitの名前}’); で ‘on’ 又は ‘off’ を返すので、それを判断して表示や動作を変えます。

<!DOCTYPE html>
<html>
  <head>
    <title>Split SDK quickstart example.</title>
  </head>
  <body>
    <h1>Split SDK quickstart example.</h1>
    <p id=‘feature’></p>

    <!— Some polyfills to ensure we have promises. —>
    <script src=“https://cdn.polyfill.io/v2/polyfill.min.js”></script>
    <!— Split SDK loaded via CDN. —>
    <script src=“https://cdn.split.io/sdk/split-10.9.2.js”></script>
    <!— Our custom script. —>
    <script type=“text/javascript”>
      (function() {
      var factory = splitio({
        core: {
          authorizationKey: ‘xxxxxxxxxxxxx’,
          key: 'CUSTOMER_ID'
        }
      });
      var client = factory.client();

      client.on(client.Event.SDK_READY, function() {
        var treatment = client.getTreatment('test_feature');
        var feature = document.getElementById('feature');
        if (treatment === 'on') {
          // Insert code for on treatment
          feature.textContent = '新機能 ON';
        } else if (treatment === 'off') {
          // Insert code for off treatment
          feature.textContent = '新機能 OFF';
        } else {
          // Insert code for control treatment
        }

        client.destroy().then(function() {
          // Your data is successfully flushed.
        });
      });
      })();
    </script>
  </body>
</html>

スイッチをOFFからONに変えると表示もそれに合わせて変わりました。

コンソールの様子

さらにこれから提供割合を変更したり、ユーザーの属性でセグメンテーションすることで、現実的に利用できそうです。

まとめ

最近の例だとSlackのGUIでの書式設定機能の提供が、観測範囲では1ヶ月以上かけて徐々に提供されたようでした。チームが安心して新機能を多くのユーザーに提供できることは、製品の価値を上げるための土台のようなものだと思います。そしてSplitはそれを助けるためのサービスとして注目しています。すぐに試すことができるので、気になる方は使ってみてはいかがでしょうか。