コンテンツにスキップ

Feature Flag の管理を楽にする設計

概要

Feature Flag は、機能の有効/無効を切り替えるための仕組みだが、適切に管理しないとコードが複雑化し、メンテナンスが難しくなることが多々ある。ここでは、Feature Flag を効果的に管理するための設計方針を考えてみる。

環境名だけだとメンテナンスコストが高い

次のコードのように、環境名だけで制御するのであれば、コードを深掘りしてどの機能が有効になっているのかを把握する必要があり、認知負荷が高い。

def f(environment):
    if environment == "production":
        ...
    elif environment == "staging":
        ...
    elif environment == "development":
        ...
    elif environment == "test":
        ...
    else:
        raise ValueError("Unknown environment")

上記のような管理は避け、次のように機能レベルで機能の有効/無効を切り替えるようにする。ここでは toml 形式の設定をするが、各言語の map や dict など、各言語のデータ構造を使っても良い。

[prod]
feature_a = true
feature_b = false

[staging]
feature_a = false
feature_b = true

[dev]
feature_a = false
feature_b = false

[test]
feature_a = true
feature_b = true

このように、機能名で制御することでどの機能が有効になっているのかを一目で把握できるようになる。