コンテンツにスキップ

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

概要

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

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

次のコードのように環境名だけで制御すると、有効な機能を知るために条件分岐を 1 つずつ追う必要があります。

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

このように機能名で制御すれば、有効な機能を一目で把握できます。