フィーチャーフラグとは何か?
フィーチャーフラグ(またはフィーチャートグル)とは、新しいコードをデプロイせずに、実行時に機能をオンまたはオフに切り替えられる、コード内のスイッチです。
フィーチャーフラグは、コードのデプロイと機能のリリースを分離します。コードをダークな状態で出荷し、任意のタイミングで一部またはすべてのユーザーに対してオンにできます - そして問題が起きれば瞬時にオフにできます。このシンプルな発想が、より安全で柔軟なデリバリーを可能にします。
フラグの仕組み
フィーチャーフラグは、実行時に設定値をチェックする条件分岐で新しい挙動を包みます。フラグがオフのとき、ユーザーは古い挙動を得ます。オンのときは新しい挙動を得ます。判断が実行時に行われるため、デプロイではなく設定を切り替えることで挙動を変えられます。
デプロイとリリースの分離
中核となる利点は、かつて溶接されて一体になっていた2つのことを分離することです。フラグの背後に機能を隠したままコードを継続的にマージしてデプロイし、その後ビジネス上のスケジュールに合わせてリリースできます。これによりデプロイは小さくリスクの低いものになり、プロダクトチームがタイミングを制御できるようになります。
一般的なユースケース
- 増加していく割合のユーザーへの段階的なロールアウト。
- A/Bテストと実験。
- リスクの高い変更のための瞬時のkill switch。
- プランやユーザーによって機能を制限するentitlement。
ターゲティングと段階的なロールアウト
フラグはユーザーごとに評価できるため、まず社内スタッフに、次にユーザーの1%、次に10%、というように機能を有効にできます。この段階的な公開により、各ステップでメトリクスを監視し、何かおかしいと感じれば瞬時に停止でき、機能が全員に届くよりもずっと前に対処できます。
フラグ負債の管理
フラグは強力ですが、蓄積していきます。古く、恒久的にオンになっているフラグはコードを散らかし、紛らわしい条件分岐を生み出します。規律あるチームは一時的なフラグを一時的なものとして扱い、機能が完全にロールアウトされたら削除するため、codebaseが死んだトグルで溺れることはありません。
重要なポイント
- フィーチャーフラグは、デプロイなしで実行時に機能を切り替えます。
- コードのデプロイと機能のリリースを分離し、より安全なロールアウトを可能にします。
- 一時的なフラグは片付けて、フラグ負債の蓄積を避けましょう。