💡

フィーチャーフラグ導入のハードルを下げたい

2022/12/11に公開

Developer Productivity Advent Calendar 2022 の11日目の記事です。

記事の目的

この記事の目的はタイトル通り「フィーチャーフラグ導入のハードルを下げたい」という一点です。

フィーチャーフラグはシステム運用の安全性や柔軟性を高め、さらには開発時の快適さにも貢献するのですが、まだまだ導入しているチームは多くないと感じています。

いくつかのフィーチャーフラグマネジメントシステムが世の中に排出されていますし、それらを使うことで得られるメリット・使いこなすためのプラクティス紹介記事なども増えてきています。

ただし、いくらメリットを並べられても不慣れなシステム・文化を取り入れるときには当然、一定の検討・躊躇が発生します。

この記事で「フィーチャーフラグの導入って簡単なんだな」と感じてもらえると嬉しいです。

フィーチャーフラグ導入で得られる嬉しさ

すでに多くの記事でフィーチャーフラグのメリットについて書かれていますので、そちらに詳細を任せます。
私の同僚が書いた記事のリンクを記載します、これらを読むと多くのことが理解できるかと思います。

メリットの一部だけ書いておくと...

  • コードを書き換えることなく、機能のオン/オフを変更できる。
  • バグが発見されたら機能をオフにするだけですぐに対処できる。
  • 未完成の機能をオフにしておくことで、開発中の機能をメインブランチにマージすることが可能になる。(トランクベース開発が可能になる。)
    • プルリクエストの粒度が小さくなり、バグの混入率低下やレビュアーのストレス低減、レビュー時間の短縮が見込まれる。
  • ...

などがあります。

フィーチャーフラグこわくない

「フィーチャーフラグを使うにはフィーチャーフラグマネジメントシステムを導入しないといけないのか?」

答えは否です。もっと気軽にフィーチャーフラグを使うことができます。

フィーチャーフラグ利用の最も簡単な実装は以下になります。

var featureFlag = fetchFeatureFlag()
if (featureFlag) {
  // 機能がオン
} else {
  // 機能がオフ
}

featureFlag変数にtrue、あるいはfalseが入り、機能のオン/オフを切り替える。
これこそフィーチャーフラグ。
外部のフィーチャーフラグマネジメントシステムから、featureFlagの値を取得するのが広く流通した方法です。
しかし必ずしもそうである必要はありません、単純に環境変数から取得してくるだけでもよいのです。

if (env.featureFlag) {
  // 機能がオン
} else {
  // 機能がオフ
}

環境変数の値を変えるだけで、アプリケーションの挙動を変更できます。このとき、コードの変更やビルドなどの操作は必要ありません。
拍子抜けしたかもしれませんが、本当に拍子抜けするほど簡単に導入できます。もしかしたらこの程度のことはすでにやってるわ!という方も多いかもしれないですね。

これだけでトランクベース開発は可能になります。
バグが見つかったときに環境変数を切り替えるだけで機能をオフにできます。
十分立派なフィーチャーフラグです。

環境変数によるフィーチャーフラグでは物足りない人へ

環境変数を使ってフィーチャーフラグを運用していると、いつか物足りなく感じるときが来るはずです。

  • true, falseだけではなく文字列や数値、オブジェクトを切り替えたい。
  • ユーザーのメタデータ(年齢,IPアドレス,使用しているアプリバージョン...)によってフィーチャーフラグの値を変えたい。
  • 複数のフィーチャーフラグを管理するための管理画面が欲しい。
  • ユーザー群をランダムに分割し、フィーチャーフラグの値を使ってA/Bテストをしたい。
  • ...

これらはフィーチャーフラグマネジメントシステムが提供する機能のほんの一部です。
もっと多くの機能を知りたい方、マネジメントシステムの導入方法を知りたい方は以下の記事を見てみてくださいね。

まとめ

フィーチャーフラグの導入で少しでも迷うところがあれば、環境変数からトライしてみませんか?という内容でした。
Developer Productivity(開発者の生産性)、Developer Experience(開発者体験)の向上は、これからより追い求められていく領域です。フィーチャーフラグがこれらの領域に大きく貢献するだろうとも思っています。

宣伝となりますが、筆者はOSSのフィーチャーフラグマネジメントシステムである「Bucketeer」の開発に携わっています。
フィーチャーフラグマネジメントシステムのOSS開発に興味がある方は是非サイバーエージェントのDeveloper Productivity室でのポストを検討してみてください!
https://site.developerproductivity.dev/jobs/

業務としてフルタイムでOSS開発にコミットできます😄

Discussion