フィーチャーフラグについて調べてみた
はじめに
ソフトウェア開発の本を読んでいると「フィーチャーフラグ」という言葉を度々見かけますが、私自身あまりちゃんと理解してるとは言えなかったので調べ、自分への備忘録として記事にしました。
フィーチャーフラグとは何か
- フィーチャーフラグとは、コードを変更したり再デプロイしたりせずにソフトウェアの機能を変えるための方法
- ソフトウェアの動作をソフトウェア実行時に変更できることが重要
フィーチャーフラグの使われ方
- 限定的なリリース
- 例えばユーザー群に対してその数だけアプリの新バージョンをリリースするような状況
- ユーザー群とは、「ベータユーザー、アルファユーザー、プレミアム登録ユーザー」など
- Uberではユーザーごとに提供されている機能が異なる
- 例えば1%のユーザーにだけ新機能をリリースし、その結果を見てから段階的に100%リリースに進めるというものもある
- 1%へのリリースの途中で問題が見つかれば戻すことも可能
- 例えばユーザー群に対してその数だけアプリの新バージョンをリリースするような状況
- トランクベース開発
- 開発ブランチの寿命が長くなりマージの際にマージコンフリクトが起きやすくなる問題への解決策となる。
- フィーチャーフラグを使うことで開発している機能をOFFにしてmasterにマージし、リリースまで進めることができる。
- 短いスパンでmasterブランチにマージすることによって、コンフリクトが起きにくく、レビューがしやすいプルリクエストを作ることが可能
- A/Bテスト
- 前のバージョンと新しいバージョンをユーザーごとに出し分け、その結果から、どちらが良かったかを判断することが可能になる。
メリット
- デプロイとリリースが切り離せる
- リスクを最小限に抑えて高速な開発および本番環境でのテストが可能になる
デメリット
- コード量が増える
- 全ての機能のコードが載ることになる
- 管理コストが増える
- 複数の機能でフラグを使ったりした結果フラグが大量になり、どのフラグが実際に利用されているか分からなくなる、、フラグ同士が依存してしまうなんてことも
- それらを管理しようとするとそのコストがかかる
おわりに
- フィーチャーフラグについてをまとめました。