Upgrade to PRO for Only $50/Year—Limited-Time Offer! 🔥
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
AzureでFeature Flagの運用をしてみよう
Search
takas
February 02, 2025
Technology
0
60
AzureでFeature Flagの運用をしてみよう
2024年6月の.NETラボで発表した資料です。
デモのコード:
https://github.com/Takas0522/dotnetlab-demos/tree/main/2024/06
takas
February 02, 2025
Tweet
Share
More Decks by takas
See All by takas
インサイト情報からどこまで自動化できるか試してみた
takas0522
0
210
GitHub Codespacesの概要
takas0522
0
130
MCPのあれこれを認証込みで使いたい
takas0522
0
20
MCPのResourceにBlob Storageを使いたい
takas0522
0
26
Microsoft Season of Agent AI エージェントの使用開始
takas0522
0
200
(今更)WingetでPC移行をしたお話
takas0522
0
88
Microsoft Playwright TestingのReporting機能を使ってみる
takas0522
0
21
Windows TerminalでAIを使おう!
takas0522
0
56
Semantic KernelとStructured OutputsでAI Orchestrationしてみる
takas0522
0
230
Other Decks in Technology
See All in Technology
"人"が頑張るAI駆動開発
yokomachi
1
590
AWSの新機能をフル活用した「re:Inventエージェント」開発秘話
minorun365
2
460
フィッシュボウルのやり方 / How to do a fishbowl
pauli
2
390
Connection-based OAuthから学ぶOAuth for AI Agents
flatt_security
0
370
Oracle Database@Azure:サービス概要のご紹介
oracle4engineer
PRO
2
200
Microsoft Agent Frameworkの可観測性
tomokusaba
1
110
【開発を止めるな】機能追加と並行して進めるアーキテクチャ改善/Keep Shipping: Architecture Improvements Without Pausing Dev
bitkey
PRO
1
130
Snowflake導入から1年、LayerXのデータ活用の現在 / One Year into Snowflake: How LayerX Uses Data Today
civitaspo
0
2.4k
20251218_AIを活用した開発生産性向上の全社的な取り組みの進め方について / How to proceed with company-wide initiatives to improve development productivity using AI
yayoi_dd
0
700
[Data & AI Summit '25 Fall] AIでデータ活用を進化させる!Google Cloudで作るデータ活用の未来
kirimaru
0
3.9k
Introduce marp-ai-slide-generator
itarutomy
0
130
フルカイテン株式会社 エンジニア向け採用資料
fullkaiten
0
9.9k
Featured
See All Featured
A better future with KSS
kneath
240
18k
Efficient Content Optimization with Google Search Console & Apps Script
katarinadahlin
PRO
0
250
The innovator’s Mindset - Leading Through an Era of Exponential Change - McGill University 2025
jdejongh
PRO
1
69
We Have a Design System, Now What?
morganepeng
54
7.9k
Have SEOs Ruined the Internet? - User Awareness of SEO in 2025
akashhashmi
0
200
The AI Revolution Will Not Be Monopolized: How open-source beats economies of scale, even for LLMs
inesmontani
PRO
2
2.8k
Faster Mobile Websites
deanohume
310
31k
Digital Ethics as a Driver of Design Innovation
axbom
PRO
0
130
B2B Lead Gen: Tactics, Traps & Triumph
marketingsoph
0
33
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
35
3.3k
Practical Orchestrator
shlominoach
190
11k
4 Signs Your Business is Dying
shpigford
186
22k
Transcript
Takas(@DevTakas) AzureでFeature Flagの運用をしてみよう(2024.06 .NETラボ) AzureでFeature Flagの運用をしてみよう 2024.06 .NETラボ
Takas(@DevTakas) AzureでFeature Flagの運用をしてみよう(2024.06 .NETラボ) 誰? Takas(@DevTakas) Angular / Azure /
.NET / CICD / Microsoft Graph Microsoft MVP M365
Takas(@DevTakas) AzureでFeature Flagの運用をしてみよう(2024.06 .NETラボ) 本日のゴール • Feature Flagを効率よく運用できる方法をしる • ASP.NET
Core(汎用ホスト)を利用してFeature Flagを利用する • Azure App Configurationを使ってFeature Flagを管理する
Takas(@DevTakas) AzureでFeature Flagの運用をしてみよう(2024.06 .NETラボ) そもそもなぜFeature Flagを利用したいのか • 開発はどんどんと展開させていきたい • 並行して複数の機能の開発も行いたい
• すでに展開しているサービスなのでリリースは慎重にしたい スピード感を維持した状態で リリース済の製品の開発を行いたい
Takas(@DevTakas) AzureでFeature Flagの運用をしてみよう(2024.06 .NETラボ) やったこと①: トランクベース開発 • 基本mainブランチ一本のみでそこに開発を実施する • 派生ブランチは短命が望ましいがまだそこまではいかない
• 元々GitFlowだったがブランチ運用が複雑化しコンフリクトが 発生しまくって開発に影響が出てた • とはいえmainをそのままリリースできないのでリリースブラン チを切ったりしている https://trunkbaseddevelopment.com/ より
Takas(@DevTakas) AzureでFeature Flagの運用をしてみよう(2024.06 .NETラボ) 困ったこと • リリースが…リリースができない…! • 結局リリースブランチに混ざったものが邪魔に •
レビュー後に修正発生したり…。 • Cherry Pickマージが結構複雑かつ膨大
Takas(@DevTakas) AzureでFeature Flagの運用をしてみよう(2024.06 .NETラボ) と、いうわけでFeature Flagを使ってみましょう • Feature Flagとは •
コードを変更せずに新機能の公開を簡単に制御する仕組み • 新機能展開はトグルのON/OFFで行うため 新機能をコードにマージし続けることができる • 旧機能と新機能のコンフリクト部分を早めに発見できる • 影響範囲を最小限にした状態で新機能の展開が可能となる • A/Bテストやカナリアリリースなどのコントロールがしやすい
Takas(@DevTakas) AzureでFeature Flagの運用をしてみよう(2024.06 .NETラボ) ASP.NETとFeature Flag • Microsoft.FeatureManagement というライブラリあり •
おなじみのIConfiguratiionからの参照からAzureの利用まで • DIでFeatureを参照することができ.NETのお作法に則って開発可能 • 標準でAction Attributeなどへの拡張もあるため拡張性も高い • Open Featureに則った運用はちょっと面倒かも?
Takas(@DevTakas) AzureでFeature Flagの運用をしてみよう(2024.06 .NETラボ) ASP.NETとFeature Flag Program.cs "FeatureFlags": { "FeatureAddColumn":
false, "FeatureMaterial": false, "FeatureSearch": true }, duilder.Services.AddFeatureManagement(builder.Configuration.GetSection("FeatureFlags")); Program.cs appsettings.json
Takas(@DevTakas) AzureでFeature Flagの運用をしてみよう(2024.06 .NETラボ) ASP.NETとFeature Flag public MyDataController(IFeatureManager featureManager) {
_featureManager = featureManager; // DIでFeatureインスタンス参照 } … [FeatureGate(“XXXXFlag”)] // Attributeでアクセス制御も可能に public async Task<ActionResult> Get() { // DIで読み込んだインスタンスからFeatureFlagの参照も可能 if (await _featureManagemnt.IsEnableAsync(“XXXXFlag”)) { … } } MyDataController.cs
Takas(@DevTakas) AzureでFeature Flagの運用をしてみよう(2024.06 .NETラボ) Front(Angular)でFeature Flagを利用する • 基本的にAPIと同じフラグ運用になるかなということで WebAPIからFeature Flagを取得している。
• 都度フラグを参照するためにHttp通信するのは手間なので Angularのbootstrap時にInjectionTokenに食わせる運用 // WebAPI経由でFeatureFlagを取得している featureFlagOverride(environment.featureFlag).then((env => { bootstrapApplication(AppComponent, genAppConfig(env)) .catch((err) => console.error(err)); }));
Takas(@DevTakas) AzureでFeature Flagの運用をしてみよう(2024.06 .NETラボ) AzureとFeature Flag • IConfigurationを利用できるが毎度環境変数を変更するのは手 間 •
Azure App ConfigurationのFeature Managerを利用する
Takas(@DevTakas) AzureでFeature Flagの運用をしてみよう(2024.06 .NETラボ) デモ • コードの解説→デモ • 実装した機能 •
ただのリストを表示するアプリに検索機能を追加する • Microsoftのドキュメントにあるコードを動かしてみる • リストにカラムを追加してみる: ランダムフィルタ • 一部Materialデザインを導入してみる: ユーザー/グループフィルタ
Takas(@DevTakas) AzureでFeature Flagの運用をしてみよう(2024.06 .NETラボ) Feature Flagのデメリット • 所詮ただのフラグ制御なのでテスト量は膨大になる • フラグの切り替え部分を共通化してテスト回せるとか
• 自動化しておくことで回帰テストを回避するか • フラグが増えると管理が大変になる(テストに通じる) • フラグのライフサイクルを定めてから運用を始めた方が良い • V1の期間…とか2スプリント後に削除する…とか
Takas(@DevTakas) AzureでFeature Flagの運用をしてみよう(2024.06 .NETラボ) ブランチモデルはどうなるか(想像) Mainに雑にマージしてReleaseに持っていっても機能は有効化さ れない
Takas(@DevTakas) AzureでFeature Flagの運用をしてみよう(2024.06 .NETラボ) 余談(時間が余れば) • ASP.NET Core WebAPIの話 •
Feature Flagを返却したり状態による場合分けはいいけどカナリアリ リースやA/Bテストのようなものは向かなそう(そもそも状態を持た ないのがベストなはずなので) • フロントエンドにFeatureの状態を返却するときにランダム値や他設定 値を使用してユーザーセッション内の状態を確定。フロントからはパ ラメーターや通信にフラグ状態を載せるのが良いところか
Takas(@DevTakas) AzureでFeature Flagの運用をしてみよう(2024.06 .NETラボ) まとめ • 開発を加速する方法としてFeature Flagを使った開発が有効そ うということがわかった •
チームの文化や成熟度にもよる • ASP.NET CoreでのFeature Flagの運用方法を理解した • Microsoft.FeatureManagementを利用することで • Angularもちょっと • Azure App Configurationでコードの変更なしでフラグを書き換 えれることを理解した
Takas(@DevTakas) AzureでFeature Flagの運用をしてみよう(2024.06 .NETラボ) 参考文献 • Trunk Based Development •
https://trunkbaseddevelopment.com/ • Feature Flag Deep Dive • https://speakerdeck.com/biwashi/feature-flag-deep-dive • Feature Toggles (aka Feature Flags) • https://martinfowler.com/articles/feature-toggles.html • チュートリアル:ASP.NET Core アプリ内で機能フラグを使用する • https://learn.microsoft.com/en-us/azure/azure-app-configuration/use-feature-flags-dotnet-core • クイックスタート: Azure App Configuration で機能フラグを管理する • https://learn.microsoft.com/ja-jp/azure/azure-app-configuration/manage-feature-flags?tabs=azure-portal • チュートリアル: 機能フィルターを使用して条件付き機能を有効にする • https://learn.microsoft.com/ja-jp/azure/azure-app-configuration/howto-feature-filters • チュートリアル: 対象ユーザーに対して機能をロールアウトする • https://learn.microsoft.com/ja-jp/azure/azure-app-configuration/howto-targetingfilter