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
MCPのあれこれを認証込みで使いたい
takas0522
0
13
MCPのResourceにBlob Storageを使いたい
takas0522
0
7
Microsoft Season of Agent AI エージェントの使用開始
takas0522
0
110
(今更)WingetでPC移行をしたお話
takas0522
0
28
Microsoft Playwright TestingのReporting機能を使ってみる
takas0522
0
9
Windows TerminalでAIを使おう!
takas0522
0
19
Semantic KernelとStructured OutputsでAI Orchestrationしてみる
takas0522
0
190
Semantic KernelとBingサーチ-202405
takas0522
0
45
Microsoft Playwright Testingを使ってみよう
takas0522
0
370
Other Decks in Technology
See All in Technology
令和トラベルQAのAI活用
seigaitakahiro
0
380
勘違いから始まったProxmox on ProxmoxでGPUパススルー【JPmoxs勉強会#7】/JPmoxs7_GPU_Passthrough_on_Proxmox_on_Proxmox-A_Journey_That_Started_with_a_Misunderstanding
tsukimi_site
1
180
Postman AI エージェントビルダー最新情報
nagix
0
110
他チームへ越境したら、生データ提供ソリューションのクエリ費用95%削減へ繋がった話 / Cross-Team Impact: 95% Off Raw Data Query Costs
yamamotoyuta
0
150
ITエンジニアを取り巻く環境とキャリアパス / A career path for Japanese IT engineers
takatama
3
1.5k
declaration mergingの威力:ライブラリアップデート時の書き換え作業を90%短縮するテクニック
yutake27
2
240
Data Hubグループ 紹介資料
sansan33
PRO
0
1.7k
Cloud Run を解剖して コンテナ監視を考える / Breaking Down Cloud Run to Rethink Container Monitoring
aoto
PRO
0
110
スプリントゴールで価値を駆動しよう
takufujii
3
1.6k
Swiftは最高だよの話
yuukiw00w
0
210
HA K8s Clusterのスタンダードが覆る!? Cilium 1.18の🔥激アツ🔥新機能
logica0419
0
120
Eight Engineering Unit 紹介資料
sansan33
PRO
0
3k
Featured
See All Featured
GraphQLの誤解/rethinking-graphql
sonatard
71
11k
The Illustrated Children's Guide to Kubernetes
chrisshort
48
50k
Code Review Best Practice
trishagee
68
18k
Stop Working from a Prison Cell
hatefulcrawdad
269
20k
Rails Girls Zürich Keynote
gr2m
94
13k
Writing Fast Ruby
sferik
628
61k
Cheating the UX When There Is Nothing More to Optimize - PixelPioneers
stephaniewalter
280
13k
GraphQLとの向き合い方2022年版
quramy
46
14k
Art, The Web, and Tiny UX
lynnandtonic
298
21k
JavaScript: Past, Present, and Future - NDC Porto 2020
reverentgeek
48
5.4k
Building Adaptive Systems
keathley
41
2.6k
Easily Structure & Communicate Ideas using Wireframe
afnizarnur
194
16k
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