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
15
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
(今更)WingetでPC移行をしたお話
takas0522
0
25
Microsoft Playwright TestingのReporting機能を使ってみる
takas0522
0
7
Windows TerminalでAIを使おう!
takas0522
0
19
Semantic KernelとStructured OutputsでAI Orchestrationしてみる
takas0522
0
180
Semantic KernelとBingサーチ-202405
takas0522
0
43
Microsoft Playwright Testingを使ってみよう
takas0522
0
370
モノレポなライブラリ群をCICDでデプロイした話
takas0522
0
310
モノレポなライブラリ群をCICDしたくて色々試した話
takas0522
0
650
Microsoft SearchとMicrosoft GraphコネクタとGraph
takas0522
1
720
Other Decks in Technology
See All in Technology
C++26アップデート 2025-03
faithandbrave
0
1.2k
AIと共に乗り越える、 入社後2ヶ月の苦労と学習の軌跡
sai_kaneko
0
190
生成AIのユースケースをとにかく集めてまるっと学ぶ!/ all about generative ai usecases
gakumura
3
360
Part1 GitHubってなんだろう?その2
tomokusaba
0
200
フルカイテン株式会社 エンジニア向け採用資料
fullkaiten
0
5.5k
Notion x ポストモーテムで広げる組織の学び / Notion x Postmortem
isaoshimizu
1
150
時間がないなら、つくればいい 〜数十人規模のチームが自律性を発揮するために試しているいくつかのこと〜
kakehashi
PRO
7
510
読んで学ぶ Amplify Gen2 / Amplify と CDK の関係を紐解く #jawsug_tokyo
tacck
PRO
1
300
GraphQLを活用したリアーキテクチャに対応するSLI/Oの再設計
coconala_engineer
0
190
SnowflakeとDatabricks両方でRAGを構築してみた
kameitomohiro
1
570
ペアーズにおける評価ドリブンな AI Agent 開発のご紹介
fukubaka0825
8
2.1k
Part1 GitHubってなんだろう?その1
tomokusaba
1
210
Featured
See All Featured
The Language of Interfaces
destraynor
158
25k
Cheating the UX When There Is Nothing More to Optimize - PixelPioneers
stephaniewalter
280
13k
Principles of Awesome APIs and How to Build Them.
keavy
126
17k
Code Review Best Practice
trishagee
67
18k
"I'm Feeling Lucky" - Building Great Search Experiences for Today's Users (#IAC19)
danielanewman
227
22k
GraphQLの誤解/rethinking-graphql
sonatard
71
10k
Let's Do A Bunch of Simple Stuff to Make Websites Faster
chriscoyier
507
140k
Testing 201, or: Great Expectations
jmmastey
42
7.5k
Site-Speed That Sticks
csswizardry
6
530
実際に使うSQLの書き方 徹底解説 / pgcon21j-tutorial
soudai
179
53k
It's Worth the Effort
3n
184
28k
Practical Orchestrator
shlominoach
187
11k
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