Feature Flag管理ツール「LaunchDarkly」を導入して開発者体験を向上させる
株式会社アンチパターン / 高橋祐羽
メンバー / バックエンドエンジニア
利用プラン | 利用機能 | ツールの利用規模 | ツールの利用開始時期 | 事業形態 |
---|---|---|---|---|
Professional plan | Feature Flag | 10名以下 | 2022年11月 | B to B |
利用プラン | Professional plan |
---|---|
利用機能 | Feature Flag |
ツールの利用規模 | 10名以下 |
ツールの利用開始時期 | 2022年11月 |
事業形態 | B to B |
アーキテクチャ
アーキテクチャの意図・工夫
特に大きな工夫はありません。フロントエンドはNext.js、バックエンドはGoで書かれており、どちらも公式で提供されているSDKを使用しています。
導入の背景・解決したかった問題
導入背景
ツール導入前の課題
LaunchDarklyの導入前は新規機能を開発する際、機能単位で変更をマージする必要がありました。弊社のプロダクトはAPIを外部に公開しており、未完成の機能をマージすると中途半端な状態でリリースされる可能性があるため、一つの機能が全て完成した状態でマージするようにしていました。そのため、大きめの機能を開発する際、実装開始からマージまでの時間が長くなり、コンフリクトが発生しやすいという問題がありました。
また、機能によっては、完成してすぐにリリースするのではなく、任意のタイミングでリリースしたいというケースがありました。 このような場合も、機能が完成してからマージするまでに時間が空くことで、コンフリクトが発生しやすくなったり、マージを待つ間に既存の共通部分に入れた修正の影響でバグが発生する可能性がありました。
どのような状態を目指していたか
Feature Flagで開発中の機能を閉じておき、プルリクエストを細かくマージすることで、ブランチを作成してからマージするまでの時間を短くすることを目指しました。
比較検討したサービス
- Bucketeer(OSS)
- Optimizely
- Unleash
比較した軸
- SDK/APIの充実度
- 実装の難易度
- UX(リアルタイムにフラグが反映できるか、フラグのON/OFF条件はどんなことができるか)
- 料金
選定理由
実装のシンプルさとUX
導入の成果
一つの機能を細かくマージできるようになり、マージするまでの時間を短縮することができました。それによりコンフリクトが起きることも少なくなり、開発者体験が向上しました。
また、弊社のプロダクトはマルチテナントアーキテクチャを採用していますが、一部の機能でテナントによってロジックを変える必要があり、そのようなケースでもLaunchDarklyを使用することで実装が簡単になりました。
導入時の苦労・悩み
バックエンドではGoのSDKを使用していますが、フラグの値を取得するためのクライアントをフラグの値を取得するたびに生成するような実装をしてしまい、アプリケーションのパフォーマンスが悪化していました。アプリケーションの実行時に生成したクライアントを使い回すように修正すると改善しました。
導入に向けた社内への説明
上長・チームへの説明
- 導入の費用(ランニングコスト)とエンジニアの開発コスト・運用コスト削減効果の比較
- 開発者体験の向上
- 我々が提供しているプロダクトが開発向けSaaS for SaaSなので、我々が開発向けSaaS for SaaSを使わないというのは自分自身を否定していることになる
- SaaS開発プラクティスの知見獲得
活用方法
新規機能を実装する際にフラグを作成し、機能を閉じた状態で実装を進めます。機能がリリースできる状態になったらフラグをONにしてリリースします。リリースから一ヶ月程度経ち、安定稼働していると判断したらフラグの実装をアプリケーションから削除します。
よく使う機能
- Flags
フラグの作成、更新をします
ツールの良い点
- 導入が簡単
既存の実装を大きく変更することなく追加できました。
追加が簡単なので、不要になったフラグを削除するのも簡単です。 - フラグの設定を更新するためのAPIが提供されている
バックエンドのアプリケーションからRulesを変更し、特定のテナントのみフラグをONにする、等ができます。
ツールの課題点
- 機能が多い
単純なフラグの作成、更新しかしておらず、その他の機能は使いこなせていないのが現状です。
ツールを検討されている方へ
Feature Flagを使用しない場合、リリースまで一時的にアプリケーションのコードを変更したり、環境変数等で制御したりする必要があります。これらの方法でもやりたいことはできると思いますが、変更に時間がかかるという大きな欠点があります。
Feature Flagを使うことで、コードの修正やデプロイをすることなくアプリケーションの挙動をリアルタイムに変更することができます。
LaunchDarklyは公式で提供されているSDKが充実しており、フラグの作成や変更も簡単で、すぐに導入することができます。
今後の展望
「ツールの課題点」で述べた通り、現在は基本的な機能しか使用していません。ドキュメントを見ると他にも有用そうな機能があるので、それらも使いこなしていければと思います。
株式会社アンチパターン / 高橋祐羽
メンバー / バックエンドエンジニア
よく見られているレビュー
株式会社アンチパターン / 高橋祐羽
メンバー / バックエンドエンジニア
レビューしているツール
目次
- アーキテクチャ
- 導入の背景・解決したかった問題
- 活用方法