Skip to content
Latchkey

フィーチャーフラグとは何か?

フィーチャーフラグ(またはフィーチャートグル)とは、新しいコードをデプロイせずに、実行時に機能をオンまたはオフに切り替えられる、コード内のスイッチです。

フィーチャーフラグは、コードのデプロイと機能のリリースを分離します。コードをダークな状態で出荷し、任意のタイミングで一部またはすべてのユーザーに対してオンにできます - そして問題が起きれば瞬時にオフにできます。このシンプルな発想が、より安全で柔軟なデリバリーを可能にします。

フラグの仕組み

フィーチャーフラグは、実行時に設定値をチェックする条件分岐で新しい挙動を包みます。フラグがオフのとき、ユーザーは古い挙動を得ます。オンのときは新しい挙動を得ます。判断が実行時に行われるため、デプロイではなく設定を切り替えることで挙動を変えられます。

デプロイとリリースの分離

中核となる利点は、かつて溶接されて一体になっていた2つのことを分離することです。フラグの背後に機能を隠したままコードを継続的にマージしてデプロイし、その後ビジネス上のスケジュールに合わせてリリースできます。これによりデプロイは小さくリスクの低いものになり、プロダクトチームがタイミングを制御できるようになります。

一般的なユースケース

  • 増加していく割合のユーザーへの段階的なロールアウト。
  • A/Bテストと実験。
  • リスクの高い変更のための瞬時のkill switch。
  • プランやユーザーによって機能を制限するentitlement。

ターゲティングと段階的なロールアウト

フラグはユーザーごとに評価できるため、まず社内スタッフに、次にユーザーの1%、次に10%、というように機能を有効にできます。この段階的な公開により、各ステップでメトリクスを監視し、何かおかしいと感じれば瞬時に停止でき、機能が全員に届くよりもずっと前に対処できます。

フラグ負債の管理

フラグは強力ですが、蓄積していきます。古く、恒久的にオンになっているフラグはコードを散らかし、紛らわしい条件分岐を生み出します。規律あるチームは一時的なフラグを一時的なものとして扱い、機能が完全にロールアウトされたら削除するため、codebaseが死んだトグルで溺れることはありません。

重要なポイント

  • フィーチャーフラグは、デプロイなしで実行時に機能を切り替えます。
  • コードのデプロイと機能のリリースを分離し、より安全なロールアウトを可能にします。
  • 一時的なフラグは片付けて、フラグ負債の蓄積を避けましょう。

関連ガイド