コンテンツにスキップ

flag と種類

flag とは、あなたのアプリが FortressFlag に下してもらう、名前の付いた判断です。このデバイスに新しいチェックアウトを見せるべきか?購入ボタンの文言はどれにするか?あきらめるまで何回リトライするか?このページは、ほかのドキュメントが積み上がる土台となる語彙を提供します。

flag はプロジェクトに属し、環境ごとに値を持つ

Section titled “flag はプロジェクトに属し、環境ごとに値を持つ”

すべての flag はプロジェクトに属し、そのキーで識別されます。キーは new-checkout のような短い小文字の名前です。キーはあなたのコードが問い合わせるものであり、作成後は変更できません。出荷済みのアプリはキーをコードに焼き込んでいるので、名前を変えればそれらが壊れてしまいます。flag の表示名はいつでも変えられますが、キーは永久です。

flag は値を 1 つ持つのではなく、環境ごとに値を持ちます。new-checkout は dev でオン、staging でロールアウト中、production でオフ、という状態を同時に取れます。環境ごとに独立して切り替え、ターゲティングします。

すべての 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 は、コードベースが払い続けている複雑さです。