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

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

Avatar for TVer Inc. TVer Inc. PRO
October 14, 2025

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