flag と種類
flag とは、あなたのアプリが FortressFlag に下してもらう、名前の付いた判断です。このデバイスに新しいチェックアウトを見せるべきか?購入ボタンの文言はどれにするか?あきらめるまで何回リトライするか?このページは、ほかのドキュメントが積み上がる土台となる語彙を提供します。
flag はプロジェクトに属し、環境ごとに値を持つ
Section titled “flag はプロジェクトに属し、環境ごとに値を持つ”すべての flag はプロジェクトに属し、そのキーで識別されます。キーは new-checkout のような短い小文字の名前です。キーはあなたのコードが問い合わせるものであり、作成後は変更できません。出荷済みのアプリはキーをコードに焼き込んでいるので、名前を変えればそれらが壊れてしまいます。flag の表示名はいつでも変えられますが、キーは永久です。
flag は値を 1 つ持つのではなく、環境ごとに値を持ちます。new-checkout は dev でオン、staging でロールアウト中、production でオフ、という状態を同時に取れます。環境ごとに独立して切り替え、ターゲティングします。
3 つの種類
Section titled “3 つの種類”すべての flag には種類があり、作成時に選び、その後は変更できません。
| 種類 | 値 | 向いている用途 |
|---|---|---|
| Boolean | true / false |
キルスイッチ、機能ゲート、ロールアウト |
| String | 名前付きのテキストバリアント | 文言の実験、アルゴリズムの選択、テーマ |
| Number | 名前付きの数値バリアント | 上限、タイムアウト、しきい値 |
種類が変更できないのはキーと同じ理由です。あなたのコードは型付きの呼び出し(isEnabled、stringValue、numberValue)で flag を読むので、出荷済みのアプリの下で種類が変わった flag は、そのアプリにとって意味をなさなくなります。
string と number の flag はバリアントを配信します。control → "buy-now"、treatment → "start-free" のような名前付きの値です。名前はあなたとダッシュボードのためのもので、ユーザーのデバイスが受け取るのは値だけです。バリアント名が管理プレーンの外に出ることはありません。
デフォルトと、その背後のデフォルト
Section titled “デフォルトと、その背後のデフォルト”デフォルトと呼ばれるものは 2 つあり、区別しておく価値があります。
- flag のデフォルトは、どのターゲティングルールにも一致しないときに環境が配信する値です。boolean flag ならオン/オフの状態、多変量 flag ならデフォルトとして選んだバリアントです。
- コードのデフォルトは、呼び出し箇所で渡す値です。
isEnabled("new-checkout", default: false)のように書きます。これはフォールバックチェーンの最下層で、アプリが一度も FortressFlag に到達していないとき、あるいは flag がその環境に存在しない(または配信する値を持たない)ときに使われます。
デフォルトのバリアントを選んでいない新品の多変量 flag は何も配信しません。あなたが決めるまでは、コードのデフォルトが答えます。これは意図的です。設定を終えていない flag は、存在しない flag と同じように振る舞うべきだからです。
ライフサイクル:アーカイブ、復元、完全削除
Section titled “ライフサイクル:アーカイブ、復元、完全削除”flag の削除は元に戻せます。ある時点までは。アーカイブすると flag はアプリから取り除かれます。オンラインのすべてのデバイスで約 1 分以内に flag は解決されなくなり、コードのデフォルトが引き継ぎます。アーカイブされた flag は保持期間内であればそのまま復元でき、期間後は完全削除できます。アーカイブ一覧は各プロジェクトの中、それが保持する flag のすぐ隣にあります。
flag が 90 日間触れられないままだと、ダッシュボードは stale のバッジを付けます。アーカイブを促すものであって、自動アーカイブでは決してありません。忘れられた flag は、コードベースが払い続けている複雑さです。
- ターゲティング:ルール、セグメント、パーセンテージロールアウト
- 環境とプロジェクト:flag が住む場所
- flag がアプリに届くまで:デバイスが実際に受け取るもの