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
AzureでFeature Flagの運用をしてみよう
Search
takas
February 02, 2025
Technology
0
95
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
230
GitHub Codespacesの概要
takas0522
0
150
MCPのあれこれを認証込みで使いたい
takas0522
0
30
MCPのResourceにBlob Storageを使いたい
takas0522
0
41
Microsoft Season of Agent AI エージェントの使用開始
takas0522
0
220
(今更)WingetでPC移行をしたお話
takas0522
0
130
Microsoft Playwright TestingのReporting機能を使ってみる
takas0522
0
30
Windows TerminalでAIを使おう!
takas0522
0
65
Semantic KernelとStructured OutputsでAI Orchestrationしてみる
takas0522
0
250
Other Decks in Technology
See All in Technology
Mitigating geopolitical risks with local-first software and atproto
ept
0
120
ABEMAのバグバウンティの取り組み
kurochan
1
110
visionOS 開発向けの MCP / Skills をつくり続けることで XR の探究と学習を最大化
karad
1
820
内製AIチャットボットで学んだDatadog LLM Observability活用術
mkdev10
0
130
プラットフォームエンジニアリングはAI時代の開発者をどう救うのか
jacopen
7
3.9k
フロントエンド刷新 4年間の軌跡
yotahada3
0
500
組織全体で実現する標準監視設計
yuobayashi
3
500
Tebiki Engineering Team Deck
tebiki
0
27k
A Casual Introduction to RISC-V
omasanori
0
390
システム標準化PMOから ガバメントクラウドCoEへ
techniczna
1
140
Keycloak を使った SSO で CockroachDB にログインする / CockroachDB SSO with Keycloak
kota2and3kan
0
160
銀行の内製開発にて2つのプロダクトを1つのチームでスクラムしてみてる話
koba1210
1
150
Featured
See All Featured
The Impact of AI in SEO - AI Overviews June 2024 Edition
aleyda
5
770
Digital Ethics as a Driver of Design Innovation
axbom
PRO
1
230
The Art of Delivering Value - GDevCon NA Keynote
reverentgeek
16
1.9k
ピンチをチャンスに:未来をつくるプロダクトロードマップ #pmconf2020
aki_iinuma
128
55k
Let's Do A Bunch of Simple Stuff to Make Websites Faster
chriscoyier
508
140k
The Cult of Friendly URLs
andyhume
79
6.8k
svc-hook: hooking system calls on ARM64 by binary rewriting
retrage
2
180
A Guide to Academic Writing Using Generative AI - A Workshop
ks91
PRO
0
240
Templates, Plugins, & Blocks: Oh My! Creating the theme that thinks of everything
marktimemedia
31
2.7k
Utilizing Notion as your number one productivity tool
mfonobong
4
260
Rails Girls Zürich Keynote
gr2m
96
14k
How to Grow Your eCommerce with AI & Automation
katarinadahlin
PRO
1
150
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