AppSignal を使用した Ruby on Rails の機能フラグの影響の測定 – 実践ガイド
機能フラグはソフトウェア開発における強力なツールであり、開発者は新しいコードをデプロイすることなく、実行時のアプリケーションの動作を制御できます。これらにより、チームは新機能をテストし、A/B テストを実行し、変更を段階的にロールアウトすることができます。
Ruby on Rails では、さまざまなツールを使用して機能フラグを管理できますが、最も人気のあるツールは Flipper gem です。この記事では、Flipper と AppSignal のカスタム指標を使用して、Solidus ストアフロントに機能フラグを実装し、その影響を測定する方法について説明します。
Rails の機能フラグとは何ですか?
この主題の概要をお探しの場合は、Flipper を使用した Ruby on Rails の機能フラグの追加の投稿をご覧ください。
ただし、一言で言えば、機能フラグはアプリケーションの実行時の動作に影響を与える方法です。 新しいコードをデプロイする必要はありません。最も単純なタイプの機能フラグは環境変数です。すべての Ruby on Rails アプリケーションは、すぐにこれらを使用します。一例は、ENV['WEB_CONCURRENCY'] を使用したアプリケーション サーバーの同時実行の構成です。 .
ただし、ActiveRecord や Redis などの永続化レイヤーを使用するなど、機能フラグを管理する他の方法もあります。これを行う包括的な方法は、Flipper gem によって提供されます。
次のスニペットは、performance_improvement がどのように実行されるかを示しています。 機能フラグは、指定されたユーザーに対して評価されます。
次に、Solidus ストアフロントをセットアップして、機能フラグの実験を開始します。
サンプル アプリ:Solidus ストアフロント
ある程度現実的なシナリオで機能フラグの影響を測定するために、Solidus ストアを簡単にブートストラップしてみましょう。
このジェネレーターはプロセスをガイドし、セットアップに関するいくつかの質問をします。
<オル>/ にマウントすることを選択します スタンドアロン アプリとして使用しているためです。
その後、bin/dev を実行します。 ターミナルから接続すれば、準備完了です。 http://localhost:3000 に移動すると をクリックすると、次の画面が表示されます。

フリッパーを使用して機能フラグを実装する
次に、機能フラグの 2 つの例示的な使用例を実装してみましょう。
- パフォーマンスの向上
- コンバージョン率の最適化の試み
ただし、まず最初に flipper を追加する必要があります。 gem とその active_record ストレージ アダプタ:
これにより、Flipper の「ゲート」、つまり機能フラグをチェックするときに評価する具体的な条件を検索するために必要なデータベース テーブルが設定されます。
パフォーマンス向上のテスト
このシナリオを評価するために、sleep 1 を追加してストアフロントでの遅いリクエストをシミュレートします。 最適化されていない場合の呼び出し:
ここで、「時間の割合」戦略を使用して、ランダムなリクエストのセット全体に最適化を展開します。 Rails コンソールを開き、次のように入力します。
oha 負荷テスト ツールを使用すると、確かにリクエストの半分が他のリクエストよりも 1 秒長いことが確認できます。
コンバージョン率の最適化のテスト
ユーザー向けの機能 (UI の変更など) を扱う場合、多くの場合、「アクターの割合」戦略を使用してフラグを展開することをお勧めします。このようにして、すべてのユーザーに一貫して同じエクスペリエンスが提供されます。
まず、e コマース アプリケーション用に 2 人のユーザーを作成します。 Rails コンソールを起動し、次のコマンドを発行します。
これにより 2 人のサンプル ユーザーが作成され、 機能フラグが一貫して設定されることが保証されます。 そのうちの 1 つに対して有効になっています。
コンバージョン率を向上させようとする機能をシミュレートするために、チェックアウト ボタンを脈動させます。
両方のユーザーでログインし、ブラウザ ウィンドウを並べて配置すると、確かに 1 人 (左側) のユーザーに対して効果が有効であることがわかります。
AppSignal カスタム メトリクスを使用して機能フラグの影響を測定する
最良の機能フラグ システムは、その影響を評価する方法がなければ役に立ちません。このシナリオ例では、単に知りたいことは次のとおりです。
- パフォーマンスの向上により、遅延は大幅に短縮されましたか?
- チェックアウト ボタンが脈動することで、コンバージョン率が大幅に向上しましたか?
AppSignal のカスタム指標を使用して、これらの最適化の効果を測定します。
まず、AppSignal 組織で新しいアプリケーションを作成し、次の手順に従ってアプリケーションに接続します。
測定基準を使用したレイテンシの測定
oha を使用して、改善がどれほど効果的であるかを検証しました。 上記の CLI ですが、有効な判断を行うために、AppSignal に遅延を報告するサーバー側テレメトリをインストールします。測定メトリクスはまさにそれを可能にします。応答時間をミリ秒単位で送信し、特定のリクエストに対してパフォーマンスの最適化がアクティブであったかどうかを示すメトリクス タグを追加します。
ここには小さな落とし穴があります。「時間の割合」メトリクスを使用しているため、実行とレポートに同じ値が使用されるように、インスタンス変数でフラグの状態をキャプチャする必要があります。
ここで、上記のローカル負荷テストを繰り返してみましょう。
このメトリクスのグラフ化と評価については、後で少し見ていきます。その前に、2 番目の機能フラグに目を向けましょう。
カウント指標を使用したコンバージョンの集計
カウンター指標を使用してコンバージョンをカウントします。これは、イベントの集計だけをしたい場合に最適です。
これを行うには、CartsController を開く必要があります。 そして、デモンストレーションの目的で、increment_counter を追加します。 チェックアウト ボタンがクリックされた場合に呼び出します:
次に、それぞれのブラウザ ウィンドウを手動で開き、[チェックアウト] ボタンを 3 回クリックし、別の場合は 1 回だけクリックして、これをテストしてみましょう。このようにして、最適化フラグがアクティブかどうかを確認できます。
AppSignal でカスタム ダッシュボードをセットアップする
最後のステップは、データに基づいたビジネス上の意思決定を行うための有益なグラフィックを作成することです。これを実現するために、AppSignal のダッシュボードを使用します。これを段階的に見てみましょう:
<オル>

products_response_time メートル法。平均値のみを表示し、performance_improvement_enabled を適用するには、「mean」を選択します。 タグ。

optimization_active を適用します。 タグ。

これでカスタム ダッシュボードの準備が整いました。左側の折れ線グラフでは、パフォーマンスの向上が効果的であると主張できます。右側では、最適化されたケースでより高いチェックアウト数がどのように記録されたかを観察します。

以上です!
まとめ
機能フラグが、Ruby on Rails アプリケーションで新しい機能を管理およびデプロイするための柔軟かつ効率的な方法をどのように提供するかを見てきました。 Flipper gem や AppSignal のカスタム メトリクスなどのツールを使用することで、開発者は機能のロールアウトを制御できるだけでなく、パフォーマンスやユーザーの行動への影響を測定することもできます。
このアプローチにより、新機能が完全に展開される前に徹底的にテストおよび最適化され、最終的にはより安定したユーザーフレンドリーなアプリケーションが実現します。最後に、代替アプローチの有効性を評価する際に、より多くの情報に基づいたビジネス上の意思決定につながる可能性があります。
コーディングを楽しんでください!
追記Ruby Magic の投稿を報道後すぐに読みたい場合は、Ruby Magic ニュースレターを購読して、投稿を 1 つも見逃さないようにしてください。
ジュリアン・ルビッシュ
ゲスト著者の Julian は、ウィーンを拠点とするフリーランスの Ruby on Rails コンサルタントで、Reactive Rails を専門としています。 StimulusReflex コア チームの一員である彼は、2020 年以来、最先端の HTML-over-the-wire テクノロジー開発の最前線に立ってきました。
Julian Rubisch によるすべての記事
-
Capistrano を使用して Ruby on Rails デプロイメントを合理化する:ステップバイステップ ガイド
この記事では、Ruby on Rails アプリケーションで Capistrano を構成します。次に、ホスティング プロバイダーから独立して、Ubuntu をオペレーティング システムとして実行するクラウド インスタンスにアプリをデプロイします。任意のクラウド サービス、またはオンプレミス サーバーを使用して、これから行う手順をテストまたは複製できます。 アプリをデプロイしたら、AppSignal を使用してアプリのデプロイメントを監視する方法を簡単に説明します。 しかしその前に、なぜ Capistrano を使用する必要があるのかと疑問に思うかもしれません。 Ruby on Rails
-
Test-Commit-Revert:Rubyでレガシーコードをテストするための便利なワークフロー
それは私たち全員に起こります。ソフトウェアプロジェクトが成長するにつれて、コードベースの一部は、包括的なテストスイートなしで本番環境に移行します。数か月後に同じコード領域をもう一度見ると、理解するのが難しい場合があります。さらに悪いことに、バグがある可能性があり、どこから修正を開始すればよいかわかりません。 テストなしでコードを変更することは大きな課題です。プロセスで何かを壊すかどうかはわかりません。すべてを手動でチェックすることは、せいぜい間違いを犯しがちです。通常、それは不可能です。 この種のコードの処理は、開発者として実行する最も一般的なタスクの1つであり、以前の記事で説明した特性テ