Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Feature Flagを定義から削除まで 安全に行うために考えたこと

Feature Flagを定義から削除まで 安全に行うために考えたこと

Avatar for TVer Inc.

TVer Inc. PRO

October 14, 2025
Tweet

More Decks by TVer Inc.

Other Decks in Programming

Transcript

  1. ©2025 TVer INC.     Feature Flagを定義から削除まで 安全に行うために考えたこと 2025.10.14 伊藤

    聡汰 株式会社TVer サービスプロダクト本部 バックエンド開発部
  2. ©2025 TVer INC. 4 自己紹介 伊藤 聡汰 株式会社TVer サービスプロダクト本部バックエンド開発部 2022/07

    TVer入社。最近はBackend Enabling Team としてリアーキテクチャや基盤の整備を行う。 趣味はDTMと子供とのお出かけ。 Confidential
  3. ©2025 TVer INC. 8 TVerとは 民放テレビ局がひとつになった テレビの新しい プラットフォーム ドラマ バラエティ

    アニメ / ヒーロー 報道 / ドキュメンタリー スポーツ その他 見放題 ¥ 0
  4. ©2025 TVer INC. 10 サービスプロダクト本部 サービスプロダクト 本部 プロダクト推進 開発ディレクション バックエンド

    Confidential PdMやデザイナー フロントエンド ディレクターやQA iOS/Android/Web/CTV 開発エンジニア バックエンド/SRE
  5. ©2025 TVer INC. 11 バックエンドチームについて 2022/04 2024/10 2025/10 チーム誕生 2022/04のアプリリニューアル時の完

    全内製化に伴いチームが誕生。 開発メンバーは数名だった。 Enabling Team誕生 機能開発だけでなく、チーム拡大や 生産性向上のために、様々な技術的 な課題の解消も並行して行う必要が 出てきた。 そこで機能開発チームと分割する形 でEnablingTeamが誕生した。 開発が複数ラインに チーム誕生から3年半、開発メン バーは約15名と5倍以上の規模になっ た。それに伴い開発ラインも複数走 るようになりアウトプットが爆増。
  6. ©2025 TVer INC. 13 技術スタック Confidential • 言語 ◦ Go

    1.25 • インフラ ◦ AWS(と一部GCP) • その他 ◦ GitHub/Docker/New Relic/Claude/etc…
  7. ©2025 TVer INC. 17 採用技術 Confidential • flagd ◦ Go製のフラグ評価システム

    ◦ UI・管理機能などはない分小さく軽量 ◦ フラグ設定がJSONでGit管理にのせられる • OpenFeature ◦ Feature Flagの標準化された技術仕様
  8. ©2025 TVer INC. 18 検討技術 Confidential 選択肢 負荷耐性 軽量性 金コスト

    運用負担 総合 Launch Darkly - ◯ × ◎ △ Unleash - × ◎ × × 自前実装 △ × ◯ × × flagd ◯ ◎ ◎ ◯ ◎
  9. ©2025 TVer INC. 20 フラグ設定 Confidential { "$schema": "https://flagd.dev/schema/v0/flags.json", "flags":

    { "myBoolFlag": { "state": "ENABLED", "variants": { "on": true, "off": false }, "defaultVariant": "on" } } } • JSONファイルで設定 • これをアプリケーションと 同じrepositoryで管理
  10. ©2025 TVer INC. 21 用語 Confidential 今日の発表では2つ知っておけばOK • トグルポイント ◦

    FeatureFlagの切替分岐箇所のこと • トグルルーター ◦ 切替分岐に利用する評価取得の関数のこと
  11. ©2025 TVer INC. 22 用語 Confidential func main() { if

    feature_flag.IsEnableNewFeature() { newFeature() } else { oldFeature() } } この関数がトグルルーター
  12. ©2025 TVer INC. 23 用語 Confidential func main() { if

    feature_flag.IsEnableNewFeature() { newFeature() } else { oldFeature() } } 分岐処理全体がトグルポイント
  13. ©2025 TVer INC. 25 対策: トグルポイント Confidential • 運用でカバー😇😇😇 ◦

    本当は自動化したかった(思いつかなかった...) ◦ 発行者・発行日・有効期限を設定させることで生存期 間の管理をして逃げる
  14. ©2025 TVer INC. 26 対策: フラグ設定 Confidential • トグルポイントより複雑 ◦

    トグルポイントはコードから削除するだけだった ◦ フラグ設定はトグルポイントと同時に消すことはでき ない 削除可能なタイミングが アプリケーションリリースに依存
  15. ©2025 TVer INC. 27 対策: フラグ設定 Confidential トグルポイントの削除が... • mainにマージされたら?

    ◦ 消せない。本番リリースまで若干ラグがある。 • 本番リリースした時は? ◦ 消せない。リリースを緊急で戻したい時に困る。
  16. ©2025 TVer INC. 29 対策: フラグ設定 Confidential ❏ トグルポイントが削除されたか ❏

    この削除対応は本番リリースされたか ❏ 本番リリースは切り戻しが発生しないくらい十分前か これを人がレビューするのは大変
  17. ©2025 TVer INC. 32 自動化: トグルポイントが削除されたか① Confidential • トグルポイントが削除されたか ◦

    =トグルルーターの関数が呼び出されていない状態 ◦ 呼び出さていないかは静的解析でいけそう ◦ 関数名の特定はどうすれば良いか ▪ フラグ設定から自動生成
  18. ©2025 TVer INC. 33 自動化: トグルポイントが削除されたか② Confidential • フラグ設定から自動生成 ◦

    JSONのフラグ名から規則的な関数を生成 ◦ go: generateを利用 • たとえば “new-feature” というフラグがあると、 ◦ func IsEnableNewFeature() bool {} を生成するイメージ
  19. ©2025 TVer INC. 34 自動化: トグルポイントが削除されたか③ Confidential • 自動生成された関数をdeadcodeを利用して検証 ◦

    go tool deadcode -whylive=${FUNC_NAME} ◦ 規則的な関数名の検査は簡単 ◦ Feature Flag評価のコア実装はinternal化 ▪ 自動生成された関数の利用を強制
  20. ©2025 TVer INC. 36 自動化: 削除対応は本番リリースされたか Confidential • 削除対応は本番リリースされたか ◦

    TVerではGitHubリリースとタグを用いて本番リリース を行なっている ◦ リリースバージョンへチェックアウトし、前述の deadcodeの仕組みを利用すれば検証できる
  21. ©2025 TVer INC. 38 自動化: 本番リリースは十分前か Confidential • 本番リリースは十分前か ◦

    1週間の中で作成されたリリースは切り戻しによって本 番にリリースされる可能性のあるバージョン ◦ 1週間で作成されたリリースを順次チェックアウトし て、前述の仕組みを使えば検証できる
  22. ©2025 TVer INC. 39 自動化: まとめ Confidential • これらの仕組みをGitHub Actionsで実装し自動化

    ◦ フラグ設定が変更されるPRでの検証CI ▪ フラグ設定を安全に変更できる ◦ フラグ設定の定期的に自動削除するCI ▪ メンバーはコードに向き合うだけで良くなった
  23. ©2025 TVer INC. 41 まとめ Confidential • フラグ設定を自動で削除することで開発者は目の前の コードのみを気にすれば良くなった ◦

    トグルポイントの削除は開発者が頑張らないといけな い課題は残っている • 自動生成は良い • 静的解析も良い ◦ Goはツール・ライブラリが豊富で助かる
  24. ©2025 TVer INC. 42 今後の展望 Confidential • トグルポイント削除の自動化 ◦ 生存管理のアラートではなく削除の仕組みを提供した

    い • フラグ設定の簡易化 ◦ 人に優しい記法からflags.jsonやコードを自動生成した い
  25. 4