Slide 1

Slide 1 text

©2025 TVer INC.     Feature Flagを定義から削除まで 安全に行うために考えたこと 2025.10.14 伊藤 聡汰 株式会社TVer サービスプロダクト本部 バックエンド開発部

Slide 2

Slide 2 text

©2025 TVer INC. 2 目次 01はじめに 02TVerについて 03Feature Flagの事例紹介 04まとめ Confidential

Slide 3

Slide 3 text

©2025 TVer INC. 01 はじめに Confidential

Slide 4

Slide 4 text

©2025 TVer INC. 4 自己紹介 伊藤 聡汰 株式会社TVer サービスプロダクト本部バックエンド開発部 2022/07 TVer入社。最近はBackend Enabling Team としてリアーキテクチャや基盤の整備を行う。 趣味はDTMと子供とのお出かけ。 Confidential

Slide 5

Slide 5 text

©2025 TVer INC. 5 今日話すこと Confidential ● TVerについて ● TVerのバックエンドチームについて ● Feature Flag関連の取り組みの紹介

Slide 6

Slide 6 text

©2025 TVer INC. 6 今日話さないこと Confidential ● Feature Flagとはなにか

Slide 7

Slide 7 text

©2025 TVer INC. 02 TVerについて Confidential

Slide 8

Slide 8 text

©2025 TVer INC. 8 TVerとは 民放テレビ局がひとつになった テレビの新しい プラットフォーム ドラマ バラエティ アニメ / ヒーロー 報道 / ドキュメンタリー スポーツ その他 見放題 ¥ 0

Slide 9

Slide 9 text

©2025 TVer INC. 9 Confidential 🎊🎊実は10周年🎊🎊

Slide 10

Slide 10 text

©2025 TVer INC. 10 サービスプロダクト本部 サービスプロダクト 本部 プロダクト推進 開発ディレクション バックエンド Confidential PdMやデザイナー フロントエンド ディレクターやQA iOS/Android/Web/CTV 開発エンジニア バックエンド/SRE

Slide 11

Slide 11 text

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

Slide 12

Slide 12 text

©2025 TVer INC. 12 Confidential バックエンドチームは3.5周年

Slide 13

Slide 13 text

©2025 TVer INC. 13 技術スタック Confidential ● 言語 ○ Go 1.25 ● インフラ ○ AWS(と一部GCP) ● その他 ○ GitHub/Docker/New Relic/Claude/etc…

Slide 14

Slide 14 text

©2025 TVer INC. 14 チーム規模と開発速度の推移 Confidential 1年半前に比べてPR/Commitともに3倍増🔥🔥 一方でリリースブロックや品質担保が課題にも

Slide 15

Slide 15 text

©2025 TVer INC. 15 バックエンドチームについて Confidential FeatureFlagを導入したので 取り組みの一部を紹介します!!

Slide 16

Slide 16 text

©2025 TVer INC. 03 Feature Flagの 事例紹介 Confidential

Slide 17

Slide 17 text

©2025 TVer INC. 17 採用技術 Confidential ● flagd ○ Go製のフラグ評価システム ○ UI・管理機能などはない分小さく軽量 ○ フラグ設定がJSONでGit管理にのせられる ● OpenFeature ○ Feature Flagの標準化された技術仕様

Slide 18

Slide 18 text

©2025 TVer INC. 18 検討技術 Confidential 選択肢 負荷耐性 軽量性 金コスト 運用負担 総合 Launch Darkly - ◯ × ◎ △ Unleash - × ◎ × × 自前実装 △ × ◯ × × flagd ◯ ◎ ◎ ◯ ◎

Slide 19

Slide 19 text

©2025 TVer INC. 19 構成図 Confidential

Slide 20

Slide 20 text

©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で管理

Slide 21

Slide 21 text

©2025 TVer INC. 21 用語 Confidential 今日の発表では2つ知っておけばOK ● トグルポイント ○ FeatureFlagの切替分岐箇所のこと ● トグルルーター ○ 切替分岐に利用する評価取得の関数のこと

Slide 22

Slide 22 text

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

Slide 23

Slide 23 text

©2025 TVer INC. 23 用語 Confidential func main() { if feature_flag.IsEnableNewFeature() { newFeature() } else { oldFeature() } } 分岐処理全体がトグルポイント

Slide 24

Slide 24 text

©2025 TVer INC. 24 よくある問題 Confidential ● トグルポイントとフラグ設定が残存する ○ 定義・利用をしたものが残り続けて負債化 対策を考えなければ!!!

Slide 25

Slide 25 text

©2025 TVer INC. 25 対策: トグルポイント Confidential ● 運用でカバー😇😇😇 ○ 本当は自動化したかった(思いつかなかった...) ○ 発行者・発行日・有効期限を設定させることで生存期 間の管理をして逃げる

Slide 26

Slide 26 text

©2025 TVer INC. 26 対策: フラグ設定 Confidential ● トグルポイントより複雑 ○ トグルポイントはコードから削除するだけだった ○ フラグ設定はトグルポイントと同時に消すことはでき ない 削除可能なタイミングが アプリケーションリリースに依存

Slide 27

Slide 27 text

©2025 TVer INC. 27 対策: フラグ設定 Confidential トグルポイントの削除が... ● mainにマージされたら? ○ 消せない。本番リリースまで若干ラグがある。 ● 本番リリースした時は? ○ 消せない。リリースを緊急で戻したい時に困る。

Slide 28

Slide 28 text

©2025 TVer INC. 28 Confidential いつ消せるんだっけ?

Slide 29

Slide 29 text

©2025 TVer INC. 29 対策: フラグ設定 Confidential ❏ トグルポイントが削除されたか ❏ この削除対応は本番リリースされたか ❏ 本番リリースは切り戻しが発生しないくらい十分前か これを人がレビューするのは大変

Slide 30

Slide 30 text

©2025 TVer INC. 30 Confidential 自動化しよう

Slide 31

Slide 31 text

©2025 TVer INC. 31 自動化 Confidential ❏ トグルポイントが削除されたか ❏ 削除対応は本番リリースされたか ❏ 本番リリースは十分前か

Slide 32

Slide 32 text

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

Slide 33

Slide 33 text

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

Slide 34

Slide 34 text

©2025 TVer INC. 34 自動化: トグルポイントが削除されたか③ Confidential ● 自動生成された関数をdeadcodeを利用して検証 ○ go tool deadcode -whylive=${FUNC_NAME} ○ 規則的な関数名の検査は簡単 ○ Feature Flag評価のコア実装はinternal化 ■ 自動生成された関数の利用を強制

Slide 35

Slide 35 text

©2025 TVer INC. 35 自動化 Confidential ❏ トグルポイントが削除されたか ❏ 削除対応は本番リリースされたか ❏ 本番リリースは十分前か

Slide 36

Slide 36 text

©2025 TVer INC. 36 自動化: 削除対応は本番リリースされたか Confidential ● 削除対応は本番リリースされたか ○ TVerではGitHubリリースとタグを用いて本番リリース を行なっている ○ リリースバージョンへチェックアウトし、前述の deadcodeの仕組みを利用すれば検証できる

Slide 37

Slide 37 text

©2025 TVer INC. 37 自動化 Confidential ❏ トグルポイントが削除されたか ❏ 削除対応は本番リリースされたか ❏ 本番リリースは十分前か

Slide 38

Slide 38 text

©2025 TVer INC. 38 自動化: 本番リリースは十分前か Confidential ● 本番リリースは十分前か ○ 1週間の中で作成されたリリースは切り戻しによって本 番にリリースされる可能性のあるバージョン ○ 1週間で作成されたリリースを順次チェックアウトし て、前述の仕組みを使えば検証できる

Slide 39

Slide 39 text

©2025 TVer INC. 39 自動化: まとめ Confidential ● これらの仕組みをGitHub Actionsで実装し自動化 ○ フラグ設定が変更されるPRでの検証CI ■ フラグ設定を安全に変更できる ○ フラグ設定の定期的に自動削除するCI ■ メンバーはコードに向き合うだけで良くなった

Slide 40

Slide 40 text

©2025 TVer INC. 04 まとめ Confidential

Slide 41

Slide 41 text

©2025 TVer INC. 41 まとめ Confidential ● フラグ設定を自動で削除することで開発者は目の前の コードのみを気にすれば良くなった ○ トグルポイントの削除は開発者が頑張らないといけな い課題は残っている ● 自動生成は良い ● 静的解析も良い ○ Goはツール・ライブラリが豊富で助かる

Slide 42

Slide 42 text

©2025 TVer INC. 42 今後の展望 Confidential ● トグルポイント削除の自動化 ○ 生存管理のアラートではなく削除の仕組みを提供した い ● フラグ設定の簡易化 ○ 人に優しい記法からflags.jsonやコードを自動生成した い

Slide 43

Slide 43 text

4

Slide 44

Slide 44 text

ご清聴ありがとうございました! ©2025 TVer INC. 4