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
ASP.NETアプリケーションのモダナイゼーションについて
Search
tomokusaba
April 26, 2025
Programming
0
310
ASP.NETアプリケーションのモダナイゼーションについて
ASP.NETアプリケーションのモダナイゼーションについて
.NETラボ 勉強会 2025年4月
https://dotnetlab.connpass.com/event/350190/
tomokusaba
April 26, 2025
Tweet
Share
More Decks by tomokusaba
See All by tomokusaba
ASP.NETアプリケーションのモダナイズ インフラ編
tomokusaba
1
160
Azure AI Foundry Agent Serviceを使用してコードファースト アプリを構築する
tomokusaba
1
270
Part1 GitHubってなんだろう?その1
tomokusaba
3
920
Part1 GitHubってなんだろう?その2
tomokusaba
2
890
Part2 GitHub Copilotってなんだろう
tomokusaba
2
970
Global Azure2025(GitHub Copilot ハンズオン)
tomokusaba
2
900
Fluent UI Blazor 5 (alpha)の紹介
tomokusaba
0
250
Generative AI for Beginners .NETの紹介
tomokusaba
1
310
Visual StudioのGitHub Copilotでいろいろやってみる
tomokusaba
1
420
Other Decks in Programming
See All in Programming
コード書くの好きな人向けAIコーディング活用tips #orestudy
77web
3
290
Bytecode Manipulation 으로 생산성 높이기
bigstark
1
200
Effect の双対、Coeffect
yukikurage
4
1.3k
Haskell でアルゴリズムを抽象化する / 関数型言語で競技プログラミング
naoya
16
3.7k
MLOps Japan 勉強会 #52 - 特徴量を言語を越えて一貫して管理する, 『特徴量ドリブン』な MLOps の実現への試み
taniiicom
2
650
TypeScript LSP の今までとこれから
quramy
1
490
インターフェース設計のコツとツボ
togishima
2
690
Parallel::Pipesの紹介
skaji
2
900
ドメインモデリングにおける抽象の役割、tagless-finalによるDSL構築、そして型安全な最適化
knih
10
1.7k
ワイがおすすめする新潟の食 / 20250530phpconf-niigata-eve
kasacchiful
0
300
Elixir で IoT 開発、 Nerves なら簡単にできる!?
pojiro
1
120
iOSアプリ開発で 関数型プログラミングを実現する The Composable Architectureの紹介
yimajo
2
200
Featured
See All Featured
Practical Tips for Bootstrapping Information Extraction Pipelines
honnibal
PRO
20
1.3k
JavaScript: Past, Present, and Future - NDC Porto 2020
reverentgeek
48
5.4k
Building Better People: How to give real-time feedback that sticks.
wjessup
367
19k
Helping Users Find Their Own Way: Creating Modern Search Experiences
danielanewman
29
2.6k
Designing Dashboards & Data Visualisations in Web Apps
destraynor
231
53k
Build your cross-platform service in a week with App Engine
jlugia
231
18k
The Success of Rails: Ensuring Growth for the Next 100 Years
eileencodes
45
7.3k
The Cult of Friendly URLs
andyhume
79
6.4k
Fantastic passwords and where to find them - at NoRuKo
philnash
51
3.3k
Facilitating Awesome Meetings
lara
54
6.4k
Git: the NoSQL Database
bkeepers
PRO
430
65k
Sharpening the Axe: The Primacy of Toolmaking
bcantrill
42
2.4k
Transcript
ASP.NETアプリケーションの モダナイゼーションについて 草場 友光 .NETラボ勉強会2025年04月
自己紹介 • コミュニティ活動を通じて知識をアッ プデートしています。 • 2022/08-2025 Microsoft MVP (Developer Technologies)
• tomo_kusaba • ドラクエ大好き ドラクエ10のプレイ時間→ 1キャラ目:2615時間 2キャラ目:891時間 3キャラ目:768時間 4キャラ目:190時間(配信用)
注意 • 個人の見解・解釈が多分に入っています。 • 見解の相違・事実誤認などありましたらご指摘ください。 • #dotnetlabでtweetすると左側に表示されます
今日の目的 • まだまだ.NET Frameworkベースのアプリケーションが世の中 にはいっぱいあると思います。 • これらを最新の.NETにモダナイゼーションする動機や手法につい て学んでいきたいと思います。
モダナイゼーションとは? • 老朽化した既存システムを現在のニーズに合うように刷新するこ と • ここでは、.NET Frameworkで構築されたシステムを.NETベー スに刷新し必要に応じてUIを刷新します。
.NET Frameworkベースのアプリケーション • 移行が比較的容易なグループ(.NETにも同様のフレームワークが ある) WindowsForm, コンソール, MVC... • 移行が難しいグループ(.NETに同様のフレームワークがない)
WebForms....
なんで、モダナイしなければならないか? • コストの明瞭化(主にクラウドに移行する場合) • 最新の機能を使用したい • セキュリティの問題 • パフォーマンスの問題
.NET Frameworkにとどまる選択 • メリットを十分に感じられない場合は.NET Frameworkのまま塩漬 けにする選択も • .NETにモダナイズするにはそれなりに開発費用がかかる • メリットによって得られる利益と開発費用によってかかるコストとのバ
ランスによって選択 • とはいえ、そのシステムが未来永劫続くとしたらどこかの時点で.NET にモダナイゼーションすることにはなるかも →やるかやらないかではなく何時やるかの選択
クラウドアプリケーションの場合 • .NET Frameworkのままの場合例えば、コンテナー化するとし てWindowsコンテナーですか?? • App Serviceの場合今はよい。だが、いつまでホストできるの か?? •
セキュリティ面での不安はないか?? • 様々な自動化を推進する上で障害にならないか?
最新の機能を実装したい場合 • AIに関する機能を実装したい場合 一応、Microsoft.Extensions.AIは.NET Framework4.6.1 以降で対応だが言語機能的にいろいろ難しいところも。。。 サンプルなどはたいていC#12以降を念頭に書かれたものが多 く読み替えが必要 たとえば、ストリーミングするのにawait foreachしたいけども
C#8.0など。
.NET Aspireとか使いたいですよね • ローカルの開発段階でダッシュボードがあるだけでもデバッグや テレメトリー情報を使った性能分析ができて便利。 • 開発初期で遅いところを潰しておける効率的な開発ができる。
パフォーマンス改善 • .NETは毎年多くのパフォーマンス改善がされています。 • 特に大規模システムの場合はサーバーのサイジングを小さくでき ることによって得られるコストメリットが大きい
.NETのサポート期間について • .NET FrameworkはOSのサポート期間に準じる • .NETはLST(.NET 8など)はリリースより36ヶ月、STSは (.NET 9など)は18ヶ月
モダナイズにあたってやりたいこと • 既存機能の断捨離 業務プロセスの変化によって必ずしも全機能が使用されていると は限りません。 費用圧縮のためにも機能の見直しは必ず行いましょう。 • 新規機能のフリーズ モダナイズにあたって機能追加などは一旦フリーズしましょう。 モダナイズと設計変更を同時に行うと既存機能を完璧に満たしな
がら機能追加かつモダナイゼーションしなければならなくなり難 易度が上昇します。
モダン化方法の選択肢 • .NET Upgrade Assistant tool ASP.NET(MVC, API), Azure Functions,
WPF, WinForms あたりが対応 必ずしもすべてうまくいくとは限らない • 手動で頑張る Copilotで今はある程度頑張れるかも。。。
.NET Upgrade Assistant tool • 自動で.NET Framework→.NETや.NETのバージョンアップ、 診断などをしてくれるツール • MVC、API、Windows
Forms、WPFが対象 • 独自のコンポーネント・商用コンポーネントを使用しているとまあ まあ手作業が増える
手動で頑張る • 主に、Web Formsで構築されたシステムはこっちで頑張らなけ れば! • とはいえ、最近はGitHub Copilotもあるのでうまく立ち回れば 省力化くらいはできるかも・・・ •
とはいえ、クラス設計とかその辺は人間駆動設計で頑張らないと ぐだぐだに・・・
WebFormsのモダナイゼーションについて • このパターン多い! • 推奨はBlazor Web Apps とはいえ事実上フルスクラッチ Entra IDのテンプレもまだない
つらみ・・・
WebFormsのモダナイゼーションについて • 既存の設計書 or ソースコードをインプットに内部仕様を参考にし てフルスクラッチで設計し直すしか • 既存設計に引っ張られる and 基本設計はある程度Passできる
ので工数的にほぼ新規開発とかわらないレベル感 • 画面設計は再設計を考えた方がいい
クラウドアプリケーションの考慮事項 • 多くのリソースはUTCで動作しています。 JSTを前提にして動作してるアプリケーションは時刻について混 乱します。 • ノンカルチャーで動作します。 日本語カルチャーに依存するメソッドは動作しない・動作が変化す る可能性があります。
タイムゾーンについての設計 • 内部的には日時をUTCで扱う →あらゆるシステムからUTCで日時が取得できるので自然 • 日時を表現する型はDateTimeOffsetを使用する →時差を考慮した表現をしなければいけないので必然 また、TimeProviderから返される型もDateTimeOffsetに なっているので事実上標準 •
表示する時にViewまたはViewに近いところでJSTに変換する
カルチャーについて • stringクラスについては特に要注意 • ローカルの単体テストを単純に実行しただけでは実行結果が変わ ることがある →カルチャーを意識した単体テストの実施が必要
認証・認可における考慮事項 • 古いイントラの中だけで使われていたようなシステムの中には認 証とも言えないようなIDを識別するような仕組みが入っているこ とがままある。
まとめ • 費用対効果を考えて.NETにモダナイゼーションしていこう • とはいえ、そのシステムが続く限り(おそらく)いつかは通る道。や るかやらないかではなく何時やるかの問題
おしまい おしまい