Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Feature Flagを定義から削除まで 安全に行うために考えたこと
Search
TVer Inc.
PRO
October 14, 2025
Programming
0
13
Feature Flagを定義から削除まで 安全に行うために考えたこと
TVer Inc.
PRO
October 14, 2025
Tweet
Share
More Decks by TVer Inc.
See All by TVer Inc.
株式会社TVer 会社紹介資料
techtver
PRO
9
95k
TVerのWeb内製化 - 開発スピードと品質を両立させるまでの道のり
techtver
PRO
3
1.1k
4100万ユーザーを支えるTVer iOSアプリ開発 〜0人から始まったチームのAI活用による挑戦〜
techtver
PRO
1
1.2k
TVer iOSチームの共通認識の作り方 - Findy Job LT iOSアプリ開発の裏側 開発組織が向き合う課題とこれから
techtver
PRO
0
1.1k
20240710_HR SUCCESS SUMMIT 2024_テーマセッション「エンジニア採用2.0」登壇資料(株式会社TVer_香坂)
techtver
PRO
0
94
採用応募者の個人情報保護の取扱いについて_株式会社TVer
techtver
PRO
0
590
月間4.5億回再生を超える大規模サービス TVer iOSアプリのリアーキテクチャ戦略 - iOSDC2024
techtver
PRO
2
12k
成長し続けるTVerサービスを支える オブザーバビリティとカスタマーサポート
techtver
PRO
5
5.7k
Change Tracking でデプロイを記録してパフォーマンスへの影響を分析しやすくしよう
techtver
PRO
1
260
Other Decks in Programming
See All in Programming
歴史から学ぶ「Why PHP?」 PHPを書く理由を改めて理解する / Learning from History: “Why PHP?” Rediscovering the Reasons for Writing PHP
seike460
PRO
0
160
Flutterチームから作る組織の越境文化
findy_eventslides
0
510
開発生産性が組織文化になるまでの軌跡
tonegawa07
0
180
Module Harmony
petamoriken
2
480
Claude Code on the Web を超える!? Codex Cloud の実践テク5選
sunagaku
0
580
予防に勝る防御なし(2025年版) - 堅牢なコードを導く様々な設計のヒント / Growing Reliable Code PHP Conference Fukuoka 2025
twada
PRO
39
13k
オフライン対応!Flutterアプリに全文検索エンジンを実装する @FlutterKaigi2025
itsmedreamwalker
2
230
カンファレンス遠征を(安く)楽しむ技術
wp_daisuke
0
180
イベントストーミングのはじめかた / Getting Started with Event Storming
nrslib
1
650
Verilator + Rust + gRPC と Efinix の RISC-V でAIアクセラレータをAIで作ってる話 RTLを語る会(18) 2025/11/08
ryuz88
0
360
What's New in Web AI?
christianliebel
PRO
0
130
ソフトウェア設計の課題・原則・実践技法
masuda220
PRO
20
12k
Featured
See All Featured
JavaScript: Past, Present, and Future - NDC Porto 2020
reverentgeek
52
5.7k
Leading Effective Engineering Teams in the AI Era
addyosmani
8
1.1k
Balancing Empowerment & Direction
lara
5
760
Designing for humans not robots
tammielis
254
26k
Design and Strategy: How to Deal with People Who Don’t "Get" Design
morganepeng
132
19k
Responsive Adventures: Dirty Tricks From The Dark Corners of Front-End
smashingmag
253
22k
Fireside Chat
paigeccino
41
3.7k
Navigating Team Friction
lara
190
15k
A better future with KSS
kneath
239
18k
Fantastic passwords and where to find them - at NoRuKo
philnash
52
3.5k
VelocityConf: Rendering Performance Case Studies
addyosmani
333
24k
Git: the NoSQL Database
bkeepers
PRO
432
66k
Transcript
©2025 TVer INC. Feature Flagを定義から削除まで 安全に行うために考えたこと 2025.10.14 伊藤
聡汰 株式会社TVer サービスプロダクト本部 バックエンド開発部
©2025 TVer INC. 2 目次 01はじめに 02TVerについて 03Feature Flagの事例紹介 04まとめ
Confidential
©2025 TVer INC. 01 はじめに Confidential
©2025 TVer INC. 4 自己紹介 伊藤 聡汰 株式会社TVer サービスプロダクト本部バックエンド開発部 2022/07
TVer入社。最近はBackend Enabling Team としてリアーキテクチャや基盤の整備を行う。 趣味はDTMと子供とのお出かけ。 Confidential
©2025 TVer INC. 5 今日話すこと Confidential • TVerについて • TVerのバックエンドチームについて
• Feature Flag関連の取り組みの紹介
©2025 TVer INC. 6 今日話さないこと Confidential • Feature Flagとはなにか
©2025 TVer INC. 02 TVerについて Confidential
©2025 TVer INC. 8 TVerとは 民放テレビ局がひとつになった テレビの新しい プラットフォーム ドラマ バラエティ
アニメ / ヒーロー 報道 / ドキュメンタリー スポーツ その他 見放題 ¥ 0
©2025 TVer INC. 9 Confidential 🎊🎊実は10周年🎊🎊
©2025 TVer INC. 10 サービスプロダクト本部 サービスプロダクト 本部 プロダクト推進 開発ディレクション バックエンド
Confidential PdMやデザイナー フロントエンド ディレクターやQA iOS/Android/Web/CTV 開発エンジニア バックエンド/SRE
©2025 TVer INC. 11 バックエンドチームについて 2022/04 2024/10 2025/10 チーム誕生 2022/04のアプリリニューアル時の完
全内製化に伴いチームが誕生。 開発メンバーは数名だった。 Enabling Team誕生 機能開発だけでなく、チーム拡大や 生産性向上のために、様々な技術的 な課題の解消も並行して行う必要が 出てきた。 そこで機能開発チームと分割する形 でEnablingTeamが誕生した。 開発が複数ラインに チーム誕生から3年半、開発メン バーは約15名と5倍以上の規模になっ た。それに伴い開発ラインも複数走 るようになりアウトプットが爆増。
©2025 TVer INC. 12 Confidential バックエンドチームは3.5周年
©2025 TVer INC. 13 技術スタック Confidential • 言語 ◦ Go
1.25 • インフラ ◦ AWS(と一部GCP) • その他 ◦ GitHub/Docker/New Relic/Claude/etc…
©2025 TVer INC. 14 チーム規模と開発速度の推移 Confidential 1年半前に比べてPR/Commitともに3倍増🔥🔥 一方でリリースブロックや品質担保が課題にも
©2025 TVer INC. 15 バックエンドチームについて Confidential FeatureFlagを導入したので 取り組みの一部を紹介します!!
©2025 TVer INC. 03 Feature Flagの 事例紹介 Confidential
©2025 TVer INC. 17 採用技術 Confidential • flagd ◦ Go製のフラグ評価システム
◦ UI・管理機能などはない分小さく軽量 ◦ フラグ設定がJSONでGit管理にのせられる • OpenFeature ◦ Feature Flagの標準化された技術仕様
©2025 TVer INC. 18 検討技術 Confidential 選択肢 負荷耐性 軽量性 金コスト
運用負担 総合 Launch Darkly - ◯ × ◎ △ Unleash - × ◎ × × 自前実装 △ × ◯ × × flagd ◯ ◎ ◎ ◯ ◎
©2025 TVer INC. 19 構成図 Confidential
©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で管理
©2025 TVer INC. 21 用語 Confidential 今日の発表では2つ知っておけばOK • トグルポイント ◦
FeatureFlagの切替分岐箇所のこと • トグルルーター ◦ 切替分岐に利用する評価取得の関数のこと
©2025 TVer INC. 22 用語 Confidential func main() { if
feature_flag.IsEnableNewFeature() { newFeature() } else { oldFeature() } } この関数がトグルルーター
©2025 TVer INC. 23 用語 Confidential func main() { if
feature_flag.IsEnableNewFeature() { newFeature() } else { oldFeature() } } 分岐処理全体がトグルポイント
©2025 TVer INC. 24 よくある問題 Confidential • トグルポイントとフラグ設定が残存する ◦ 定義・利用をしたものが残り続けて負債化
対策を考えなければ!!!
©2025 TVer INC. 25 対策: トグルポイント Confidential • 運用でカバー😇😇😇 ◦
本当は自動化したかった(思いつかなかった...) ◦ 発行者・発行日・有効期限を設定させることで生存期 間の管理をして逃げる
©2025 TVer INC. 26 対策: フラグ設定 Confidential • トグルポイントより複雑 ◦
トグルポイントはコードから削除するだけだった ◦ フラグ設定はトグルポイントと同時に消すことはでき ない 削除可能なタイミングが アプリケーションリリースに依存
©2025 TVer INC. 27 対策: フラグ設定 Confidential トグルポイントの削除が... • mainにマージされたら?
◦ 消せない。本番リリースまで若干ラグがある。 • 本番リリースした時は? ◦ 消せない。リリースを緊急で戻したい時に困る。
©2025 TVer INC. 28 Confidential いつ消せるんだっけ?
©2025 TVer INC. 29 対策: フラグ設定 Confidential ❏ トグルポイントが削除されたか ❏
この削除対応は本番リリースされたか ❏ 本番リリースは切り戻しが発生しないくらい十分前か これを人がレビューするのは大変
©2025 TVer INC. 30 Confidential 自動化しよう
©2025 TVer INC. 31 自動化 Confidential ❏ トグルポイントが削除されたか ❏ 削除対応は本番リリースされたか
❏ 本番リリースは十分前か
©2025 TVer INC. 32 自動化: トグルポイントが削除されたか① Confidential • トグルポイントが削除されたか ◦
=トグルルーターの関数が呼び出されていない状態 ◦ 呼び出さていないかは静的解析でいけそう ◦ 関数名の特定はどうすれば良いか ▪ フラグ設定から自動生成
©2025 TVer INC. 33 自動化: トグルポイントが削除されたか② Confidential • フラグ設定から自動生成 ◦
JSONのフラグ名から規則的な関数を生成 ◦ go: generateを利用 • たとえば “new-feature” というフラグがあると、 ◦ func IsEnableNewFeature() bool {} を生成するイメージ
©2025 TVer INC. 34 自動化: トグルポイントが削除されたか③ Confidential • 自動生成された関数をdeadcodeを利用して検証 ◦
go tool deadcode -whylive=${FUNC_NAME} ◦ 規則的な関数名の検査は簡単 ◦ Feature Flag評価のコア実装はinternal化 ▪ 自動生成された関数の利用を強制
©2025 TVer INC. 35 自動化 Confidential ❏ トグルポイントが削除されたか ❏ 削除対応は本番リリースされたか
❏ 本番リリースは十分前か
©2025 TVer INC. 36 自動化: 削除対応は本番リリースされたか Confidential • 削除対応は本番リリースされたか ◦
TVerではGitHubリリースとタグを用いて本番リリース を行なっている ◦ リリースバージョンへチェックアウトし、前述の deadcodeの仕組みを利用すれば検証できる
©2025 TVer INC. 37 自動化 Confidential ❏ トグルポイントが削除されたか ❏ 削除対応は本番リリースされたか
❏ 本番リリースは十分前か
©2025 TVer INC. 38 自動化: 本番リリースは十分前か Confidential • 本番リリースは十分前か ◦
1週間の中で作成されたリリースは切り戻しによって本 番にリリースされる可能性のあるバージョン ◦ 1週間で作成されたリリースを順次チェックアウトし て、前述の仕組みを使えば検証できる
©2025 TVer INC. 39 自動化: まとめ Confidential • これらの仕組みをGitHub Actionsで実装し自動化
◦ フラグ設定が変更されるPRでの検証CI ▪ フラグ設定を安全に変更できる ◦ フラグ設定の定期的に自動削除するCI ▪ メンバーはコードに向き合うだけで良くなった
©2025 TVer INC. 04 まとめ Confidential
©2025 TVer INC. 41 まとめ Confidential • フラグ設定を自動で削除することで開発者は目の前の コードのみを気にすれば良くなった ◦
トグルポイントの削除は開発者が頑張らないといけな い課題は残っている • 自動生成は良い • 静的解析も良い ◦ Goはツール・ライブラリが豊富で助かる
©2025 TVer INC. 42 今後の展望 Confidential • トグルポイント削除の自動化 ◦ 生存管理のアラートではなく削除の仕組みを提供した
い • フラグ設定の簡易化 ◦ 人に優しい記法からflags.jsonやコードを自動生成した い
4
ご清聴ありがとうございました! ©2025 TVer INC. 4