SlideShare a Scribd company logo
.NET 6 ASP.NET Core Web API、
Blazor WebAssembly、Elastic APM で
簡単なアプリを構築してみよう
鈴木 章太郎
Elastic テクニカルプロダクトマーケティングマネージャー/エバンジェリスト
デジタル庁 省庁業務グループ ソリューションアーキテクト
Elastic
Technical Product Marketing
Manager/Evangelist
デジタル庁
省庁業務グループ
ソリューションアーキテクト
元 Microsoft Technical Evangelist
Twitter : @shosuz
Shotaro Suzuki
⚫ .NET 6 における Blazor Update
⚫ ASP.NET Core Web API, AntDesign, Blazor
WebAssembly でアプリを構築
⚫ Elastic APM によるアプリケーションの監視
⚫ まとめ
アジェンダ
.NET 6 における Blazor Update
Modern Web UI with .NET & Blazor
Server WebAssembly Hybrid
HTML、CSS、.NET、C#... JavaScript の代わりに Open Web 標準でアプリ開発
どこにでもホストできる
MVC
Razor
Pages
Blazor
HTTP
APIs
SignalR
Part of the ASP.NET Core family
Web UI Services
Worker gRPC
SPA
Blazor – .NET 5 まで
Blazor Server Blazor WebAssembly
DOM
Blazor
WebAssembly
.NET
Razor Components
Blazor
.NET
Razor Components
DOM
SignalR
✓ DB アクセス含むサーバー機能へのフルアクセス
✓ 高速なスタートアップ
✓ コードがサーバーから離れない
✓ 古いブラウザとシンクライアントをサポート
✓ 永続的な接続が必要
✓ UI の遅延が高い
✓完全にクライアント側で実行
✓必要なサーバー コンポーネントなし
✓静的サイトとしてホスト
✓オフラインで実行可能
✓大きなダウンロードサイズ
✓ランタイムパフォーマンスの低下
Blazor Server (.NET 5) Blazor WebAssembly (.NET 5)
Blazor – .NET 6 による強化
Blazor Server Blazor WebAssembly
DOM
Blazor
WebAssembly
.NET
Razor Components
Blazor
.NET
Razor Components
DOM
SignalR
Blazor WebAssembly の事前 (AOT) コンパイル対応
Blazor WebAssembly アプリのダウンロードサイズの縮小
Error Boundaries
Razor コンポーネント型の推論とジェネリック型の制約
動的コンポーネント
プリレンダリング中の Blazor コンポーネント状態の永続性
Hot Reload, Native File Reference, 他多数
.NET 6
Blazor Server と Blazor WebAssembly の
開発モデルの違い
Blazor Server Blazor WebAssembly
DOM
Blazor
WebAssembly
.NET
Razor Components
Blazor
.NET
Razor Components
DOM
SignalR
Blazor Server
• 開発モデルは C/S 型に近い
• DOM(ブラウザ UI)と Blazor ランタイム(仮想 DOM)
がやりとりし UI 描画(差分更新)
• 画面の入出力部分のみをリモートデスクトップのようにブラウザ
側に持ってきているとみなせる
• SignalR(Web ソケット通信)
• DB に直接アクセス可能
• Web アプリケーションを Client - Server 型に近いモデルで
開発可能
• Web サーバとの常時接続が必要
• サーバ側でリソース効率の高いアプリの作り方が必要
• Hot Reload
Blazor WebAssembly
• サンドボックス制限
• DB アクセス不可 → Native File Reference による
ローカル DBアクセス
• Web API を介して DB アクセス
• 静的な Web サーバにホスト
• アプリ全体がダウンロード(大きくなりがち)
• DOM(ブラウザ UI)と Blazor ランタイム(仮想
DOM)がやりとりしUI 描画(差分更新)、ランタイム
が Blazor アプリ(UI ロジック)とやりとりする
• Hot Reload (デバッグなしで実行)
Web Assembly(WASM) とは
• Web ブラウザ上でバイナリコードを直接実行できる
• 2019 年 12 月 W3C 勧告、正式なウェブ標準に認定
• 様々な言語のバイナリコードを主要なブラウザのサンドボックス内で動作可能
• Web Assembly バイナリコードへのコンパイラなどのツールセットが必要
Edge
Chrome
Safari
Firefox
Web Assembly
バイナリコード
(W3C 標準技術)
C++ WASM
コンパイラ
Rust WASM
コンパイラ
C WASM
コンパイラ
SQLite ソースコード(C)
Rust ソースコード
C++ ソースコード
.NET 6 における
Blazor WebAssembly 新機能
• 事前 (AOT) 実行コンパイル
• カスタム要素
• 小規模なアプリサイズ
• Native File Reference
• Hot Reload
• Component, .NET, HTML, CSS…
…その他数十個の更新あり
Blazor WebAssembly 小規模なアプリサイズ
.NET 5
• Publish size: 1.7 MB
.NET 6
• Publish size: 1.0 MB
• ~40% size reduction
Blazor WebAssembly のホスティング
ASP.NET
Blazor
WebAssem
bly
APIs
Globally
distributed
hosting
Blazor
WebAssem
bly
Serverless
functions
APIs
App Services Azure Static Web Apps
ASP.NET
Globally
distributed
hosting Microservices
Blazor
WebAssembly
APIs
Blazor
WebAssembly
APIs
ASP.NET Core Web API, AntDesign,
Blazor WebAssembly でアプリを構築
今回のデモアプリのイメージ
Azure
SQL Database
Elastic Cloud
東日本リージョン
マスターノード x 1
データノード x 2
ML ノード x 1
https://f79...c67.japaneast
.azure.elastic-
cloud.com:9243/
全文検索クエリ
CRUD
検索・更新 UI
Blazor
WebAssembly
Azure サブスクリプション
Visual
Studio
2022
Azure
App Service
Elastic APM
Endpoint に送信
Azure
Data Explorer
ASP.NET 6
Web API
APM .NET Agent
AntDesign
.NET MAUI Blazor App - モバイル、デスクトップ、
Web ハイブリッドアプリを開発
https://qiita.com/shosuz/items/4218af93343e5cc999ec
このデモアプリを元に、 自分が持って
いる Elastic の books index に
対応したデモを作ろうとしていたところ、
ASP.NET Core Blazor WebAssembly と Web API と Entity Framework
Core で SQL Server のデータを取得したり追加したり更新したり削除したりする
[.NET 6 版]
https://qiita.com/tamtamyarn/items/876a5cd4b9ec9cdc1044
ちょうどこちらのエントリを発見!
とても良い実装なので、参考にさせて
いただきます!Special Thanks!
コードファーストによる Azure SQL Database 生成
• Microsoft.EntityFrameworkCore.SqlServer
• Microsoft.EntityFrameworkCore.Tools
• Elastic.Apm.NetCoreAll
• プロジェクトに Models フォルダを作成し、 book
クラスを作成
• Book.cs に右のコードを記載
public class Book
{
public int BookId { get; set; }
public string Title { get; set; }
public string ThumbnailUrl { get; set; }
public string Isbn { get; set; }
public string Author { get; set; }
public string Category { get; set; }
public Book
(int bookId, string title, string thumbnailUrl,
string isbn, string author, string category)
{
BookId = bookId;
Title = title;
ThumbnailUrl = thumbnailUrl;
Isbn = isbn;
Author = author;
Category = category;
}
}
コードファーストによる Azure SQL Database 生成 2
{
"ConnectionStrings": {
"DefaultConnection":
"Server=tcp:xxx.database.windows.net,1433;Initial Catalog=BlazorWasmDb;Persist
Security Info=False;User ID=(UserID);Password=(Password);
MultipleActiveResultSets=False;Encrypt=True;TrustServerCertificate=False;Connection Timeout=30;"
},
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft.AspNetCore": "Warning"
}
},
"AllowedHosts": "*"
}
Azure Data Studio を使用して
新しいデータベースを確認、データを追加
INSERT INTO Books(Title,ThumbnailUrl,Isbn,Author,Category)VALUES(N'Unlocking Android',N'https://s3.amazonaws.com/AKIAJC5RLADLUMVRPFDQ.book-thumb-
images/ableson.jpg',N'1933988673',N'W. Frank Ableson, Charlie Collins, Robi Sen',N'Open Source, Mobile');
INSERT INTO Books(Title,ThumbnailUrl,Isbn,Author,Category)VALUES(N'ASP.NET Core 6.0 in Practice',N'https://s3.amazonaws.com/AKIAJC5RLADLUMVRPFDQ.bo
ok-thumb-images/bochicchio.jpg',N'1935182463',N'Daniele Bochicchio, Stefano Mostarda',N'Microsoft .NET');
INSERT INTO Books(Title,ThumbnailUrl,Isbn,Author,Category)VALUES(N'Brownfield Application Development in .NET',N'https://s3.amazonaws.com/AKIAJC5RL
ADLUMVRPFDQ.book-thumb-images/baley.jpg',N'1933988711',N'Kyle Baley, Donald Belcham',N'Microsoft');
INSERT INTO Books(Title,ThumbnailUrl,Isbn,Author,Category)VALUES(N'MongoDB in Action',N'https://s3.amazonaws.com/AKIAJC5RLADLUMVRPFDQ.book-thumb-
images/banker.jpg',N'1935182870',N'Kyle Banker',N'Next Generation Databases');
INSERT INTO Books(Title,ThumbnailUrl,Isbn,Author,Category)VALUES(N'jQuery in Action',N'https://s3.amazonaws.com/AKIAJC5RLADLUMVRPFDQ.book-thumb-
images/bibeault.jpg',N'1933988355',N'Bear Bibeault, Yehuda Katz',N'Web Development');
AntDesign
• 人気 No.1 on
Awesome Blazor
• 企業向け製品のための
デザインシステム
• 効率的で楽しいワーク
エクスペリエンスを実現
https://antblazor.com/en-US/
Install-Package -ProjectName BlazorWASMApp.Client -Id AntDesign
AntDesign
• Components
• Image の使用方法を
参照
• Source Code 利用
可能
https://antblazor.com/en-US/components/image
Blazor WebAssembly の Hot Reload
https://docs.microsoft.com/ja-jp/aspnet/core/test/hot-reload?view=aspnetcore-6.0
In Visual Studio 2022 GA (17.0), Hot Reload is only
supported when running without the debugger.
Elastic APM によるアプリケーションの監視
今回のデモアプリのイメージ
Azure
SQL Database
Elastic Cloud
東日本リージョン
マスターノード x 1
データノード x 2
ML ノード x 1
https://f79...c67.japaneast
.azure.elastic-
cloud.com:9243/
全文検索クエリ
CRUD
検索・更新 UI
APM .NET Agent
Blazor
WebAssembly
Azure サブスクリプション
Visual
Studio
2022
Azure
App Service
Elastic APM
Endpoint に送信
Azure
Data Explorer
ASP.NET 6
Web API
AntDesign
// .NETアプリへの Nuget パッケージインストール
dotnet add Elastic.Apm.NetCoreAll
Install-Package -ProjectName BlazorApp.Server -Id Elastic.Apm.NetCoreAll
Elastic APM for ASP
.NET Core
https://www.elastic.co/jp/apm/
Configuration on .NET Core
https://www.elastic.co/guide/en/apm/agent/dotnet/current/configuration-on-asp-net-core.html
ASP
.NET Core Quick Start
https://www.elastic.co/guide/en/apm/agent/dotnet/current/setup-asp-net-core.html
// Program.cs へ
の
追加
---
using Elastic.Apm.NetCoreAll;
//Elastic APM 追加
app.UseAllElasticApm(builder.Configuration);
app.UseHttpsRedirection();
app.UseBlazorFrameworkFiles();
app.UseStaticFiles();
---
// appsettings.json の
更新
---
{
"Logging": {
"LogLevel": {
//"Default": "Information",
//"Microsoft": "Warning",
//"Microsoft.Hosting.Lifetime": "Information"
"Default": "Warning",
"Elastic.Apm": "Debug"
}
} ,
"AllowedHosts": " * " ,
//Elastic ポ
ー
タ
ル
か
ら APM エ
ン
ド
ポ
イ
ン
ト
と Secret を
コ
ピ
ー
&ペースト
"ElasticApm": {
"ServerUrl":
"https://
7d39255475bg8e8e0j99fm870kj48v88.apm.
japaneast.azure.elastic-cloud.com",
"SecretToken": ”f6p81KJytBcGMK2JKS4",
"TransactionSampleRate": 1.0
}
}
Elastic Cloud → Kibana で APM モニタリング
https://cloud.elastic.co/home
まとめ
まとめ
⚫ .NET 6 における Blazor Update
⚫ ASP.NET Core Web API を構築
⚫ Blazor WebAssembly でフロントエンドアプリを構築
⚫ Elastic APM によるアプリケーションの監視
Get started with Blazor
• Go to https://blazor.net
• Install the .NET SDK
• .NET Conf 2021 https://www.dotnetconf.net/
• .NET Conf 2021 – videos/slides/demos
https://github.com/dotnet-presentations/dotNETConf/tree/master/2021/MainEvent/Technical
Visual Studio Visual Studio for Mac Visual Studio Code
+ C# extension
.NET MAUI Blazor App - モバイル、デスクトップ、
Web ハイブリッドアプリを開発
https://qiita.com/shosuz/items/4218af93343e5cc999ec
ASP.NET Core Blazor WebAssembly と Web API と Entity Framework
Core で SQL Server のデータを取得したり追加したり更新したり削除したりする
[.NET 6 版]
https://qiita.com/tamtamyarn/items/876a5cd4b9ec9cdc1044
Elastic リソース
• 公式ドキュメント
https://www.elastic.co/guide/index.html
• クラウドネイティブ アプリでの Elasticsearch
https://docs.microsoft.com/ja-jp/dotnet/architecture/cloud-
native/elastic-search-in-azure
• Azure での検索データ ストアの選択
https://docs.microsoft.com/ja-jp/azure/architecture/data-
guide/technology-choices/search-options
• Elastic APM Agent
https://www.elastic.co/guide/en/apm/agent/index.html
• APM
https://www.elastic.co/jp/apm/
• Configuration on .NET Core
https://www.elastic.co/guide/en/apm/agent/dotnet/current/co
nfiguration-on-asp-net-core.html
• ASP.NET Core Quick Start
https://www.elastic.co/guide/en/apm/agent/dotnet/current/set
up-asp-net-core.html
Thank you for your attention!

More Related Content

PDF
コンポーネント指向による、Reactのベストプラクティスとバッドプラクティス
Kohei Asai
 
PDF
「宴」実装時に得られたUnityプログラムノウハウ
Ryohei Tokimura
 
PPTX
法人向けメタバースプラットフォームの開発の裏側をのぞいてみた(仮)
gree_tech
 
PDF
文脈を操る美しきZenjectプロジェクトからの眺め 〜Contextの扱い方と活用方法〜
Mikito Yoshiya
 
PPTX
[124] 하이브리드 앱 개발기 김한솔
NAVER D2
 
PDF
MediaPipeを使ったARアプリ開発事例 ~カメラをかざして家䛾中で売れるも䛾を探そう~
Chica Matsueda
 
PPTX
PayPal Reference Transaction APIをお財布ケータイぽく使ってみる
Junichi Okamura
 
PDF
BIMからはじまる異世界転生 ~Unity Reflect が叶える新しい建築の世界~
UnityTechnologiesJapan002
 
コンポーネント指向による、Reactのベストプラクティスとバッドプラクティス
Kohei Asai
 
「宴」実装時に得られたUnityプログラムノウハウ
Ryohei Tokimura
 
法人向けメタバースプラットフォームの開発の裏側をのぞいてみた(仮)
gree_tech
 
文脈を操る美しきZenjectプロジェクトからの眺め 〜Contextの扱い方と活用方法〜
Mikito Yoshiya
 
[124] 하이브리드 앱 개발기 김한솔
NAVER D2
 
MediaPipeを使ったARアプリ開発事例 ~カメラをかざして家䛾中で売れるも䛾を探そう~
Chica Matsueda
 
PayPal Reference Transaction APIをお財布ケータイぽく使ってみる
Junichi Okamura
 
BIMからはじまる異世界転生 ~Unity Reflect が叶える新しい建築の世界~
UnityTechnologiesJapan002
 

What's hot (20)

PDF
The Usage and Patterns of MagicOnion
Yoshifumi Kawai
 
PPTX
Using or not using magic onion
Goichi Shinohara
 
PDF
Objective-C のキャストと Swift の型変換を比べてみる #akibaswift
Tomohiro Kumagai
 
PPTX
Retrofit2 &OkHttp 
でAndroidのHTTP通信が快適だにゃん
removed_96f4639f4009e61a478bf38f188e8404
 
PDF
【Unite 2018 Tokyo】そろそろ楽がしたい!新アセットバンドルワークフロー&リソースマネージャー詳細解説
Unity Technologies Japan K.K.
 
PDF
Tekton 入門
Mamoru Shimizu
 
PDF
Unityでパフォーマンスの良いUIを作る為のTips
Unity Technologies Japan K.K.
 
PPTX
UnityでUI開発を高速化した件
Grenge, Inc.
 
PDF
【Unite Tokyo 2018 Training Day】C#JobSystem & ECSでCPUを極限まで使い倒そう ~C# JobSystem 編~
Unity Technologies Japan K.K.
 
PDF
91APP: 從 "零" 開始的 DevOps
Andrew Wu
 
PDF
AWS + Windows(C#)で構築する.NET最先端技術によるハイパフォーマンスウェブアプリケーション開発実践
Yoshifumi Kawai
 
PPTX
今さら聞けないITエンジニアのための7つの習慣
Keisuke Tameyasu
 
PPTX
TextMeshProを使った絵文字対応について
ssuserfefa74
 
PDF
Unityでオンラインゲーム作った話
torisoup
 
PDF
レガシー Web からの脱却 ~ 開発者が次に目指すべき Web アプリの姿とは?
Akira Inoue
 
PDF
VRChatとシリアル通信、現実と仮想を結ぶ ~UdonとPythonによる仮想COMポートのつくり方~
Hirokazu Onomichi
 
PDF
個人開発でも使ってみようAddressableAssetSystem
Takuma Sugaya
 
PDF
Unity C#と.NET Core(MagicOnion) C# そしてKotlinによるハーモニー
Yoshifumi Kawai
 
PPTX
ミクシィ 21卒向け Android研修
akkuma
 
PDF
Azure ADとIdentity管理
Naohiro Fujie
 
The Usage and Patterns of MagicOnion
Yoshifumi Kawai
 
Using or not using magic onion
Goichi Shinohara
 
Objective-C のキャストと Swift の型変換を比べてみる #akibaswift
Tomohiro Kumagai
 
Retrofit2 &OkHttp 
でAndroidのHTTP通信が快適だにゃん
removed_96f4639f4009e61a478bf38f188e8404
 
【Unite 2018 Tokyo】そろそろ楽がしたい!新アセットバンドルワークフロー&リソースマネージャー詳細解説
Unity Technologies Japan K.K.
 
Tekton 入門
Mamoru Shimizu
 
Unityでパフォーマンスの良いUIを作る為のTips
Unity Technologies Japan K.K.
 
UnityでUI開発を高速化した件
Grenge, Inc.
 
【Unite Tokyo 2018 Training Day】C#JobSystem & ECSでCPUを極限まで使い倒そう ~C# JobSystem 編~
Unity Technologies Japan K.K.
 
91APP: 從 "零" 開始的 DevOps
Andrew Wu
 
AWS + Windows(C#)で構築する.NET最先端技術によるハイパフォーマンスウェブアプリケーション開発実践
Yoshifumi Kawai
 
今さら聞けないITエンジニアのための7つの習慣
Keisuke Tameyasu
 
TextMeshProを使った絵文字対応について
ssuserfefa74
 
Unityでオンラインゲーム作った話
torisoup
 
レガシー Web からの脱却 ~ 開発者が次に目指すべき Web アプリの姿とは?
Akira Inoue
 
VRChatとシリアル通信、現実と仮想を結ぶ ~UdonとPythonによる仮想COMポートのつくり方~
Hirokazu Onomichi
 
個人開発でも使ってみようAddressableAssetSystem
Takuma Sugaya
 
Unity C#と.NET Core(MagicOnion) C# そしてKotlinによるハーモニー
Yoshifumi Kawai
 
ミクシィ 21卒向け Android研修
akkuma
 
Azure ADとIdentity管理
Naohiro Fujie
 
Ad

Similar to Building simple-app-using-.net 6 asp.net core web api-blazor web assembly-elastic apm (20)

PDF
Application development with c#, .net 6, blazor web assembly, asp.net web api...
Shotaro Suzuki
 
PDF
Application development with c#, .net 6, blazor web assembly, asp.net web api...
Shotaro Suzuki
 
PDF
Application development with c#, .net 6, blazor web assembly, asp.net web api...
Shotaro Suzuki
 
PDF
Application development with c#, .net 6, blazor web assembly, asp.net web api...
Shotaro Suzuki
 
PDF
New Features of DotNet 6 Blazor WASM
Shotaro Suzuki
 
PDF
【de:code 2020】 「あつまれ フロントエンドエンジニア」 Azure Static Web Apps がやってきた
日本マイクロソフト株式会社
 
PDF
Elastic on Azure Integration & Building React UI Based Search App Using Azure...
Shotaro Suzuki
 
PDF
.NET の過去、現在、そして未来
Akira Inoue
 
PDF
.NET の過去、現在、そして未来 ~ .NET 最新アップデート
Akira Inoue
 
PDF
ASP.NET シングル ページ アプリケーション (SPA) 詳説
Akira Inoue
 
PDF
Building modernapplicationwithelasiccloud
Shotaro Suzuki
 
PDF
Gaming cicd-pipeline gaming-technight-2
Amazon Web Services Japan
 
PDF
.NET 6 と Blazor で作るクロスプラットフォームアプリ概要
Akira Inoue
 
PDF
サーバーレスの今とこれから
真吾 吉田
 
PDF
Developing .NET 6 Blazor WebAssemby apps with Radzen Blazor component library...
Shotaro Suzuki
 
PDF
ASP.NET 新時代に向けて ~ ASP.NET 5 / Visual Studio 2015 基礎解説
Akira Inoue
 
PDF
Windows 開発者のための Dev&Ops on AWS
Amazon Web Services Japan
 
PDF
進化する Web ~ Progressive Web Apps の実装と応用 ~
Microsoft Azure Japan
 
PDF
Realm platform2019
昌桓 李
 
PPTX
DotNetConf2024の資料 BlazorとLowCodeと生成AIの話です
Tatsuya Ishikawa
 
Application development with c#, .net 6, blazor web assembly, asp.net web api...
Shotaro Suzuki
 
Application development with c#, .net 6, blazor web assembly, asp.net web api...
Shotaro Suzuki
 
Application development with c#, .net 6, blazor web assembly, asp.net web api...
Shotaro Suzuki
 
Application development with c#, .net 6, blazor web assembly, asp.net web api...
Shotaro Suzuki
 
New Features of DotNet 6 Blazor WASM
Shotaro Suzuki
 
【de:code 2020】 「あつまれ フロントエンドエンジニア」 Azure Static Web Apps がやってきた
日本マイクロソフト株式会社
 
Elastic on Azure Integration & Building React UI Based Search App Using Azure...
Shotaro Suzuki
 
.NET の過去、現在、そして未来
Akira Inoue
 
.NET の過去、現在、そして未来 ~ .NET 最新アップデート
Akira Inoue
 
ASP.NET シングル ページ アプリケーション (SPA) 詳説
Akira Inoue
 
Building modernapplicationwithelasiccloud
Shotaro Suzuki
 
Gaming cicd-pipeline gaming-technight-2
Amazon Web Services Japan
 
.NET 6 と Blazor で作るクロスプラットフォームアプリ概要
Akira Inoue
 
サーバーレスの今とこれから
真吾 吉田
 
Developing .NET 6 Blazor WebAssemby apps with Radzen Blazor component library...
Shotaro Suzuki
 
ASP.NET 新時代に向けて ~ ASP.NET 5 / Visual Studio 2015 基礎解説
Akira Inoue
 
Windows 開発者のための Dev&Ops on AWS
Amazon Web Services Japan
 
進化する Web ~ Progressive Web Apps の実装と応用 ~
Microsoft Azure Japan
 
Realm platform2019
昌桓 李
 
DotNetConf2024の資料 BlazorとLowCodeと生成AIの話です
Tatsuya Ishikawa
 
Ad

More from Shotaro Suzuki (20)

PDF
This is how our first offline technical event in three years was able to succ...
Shotaro Suzuki
 
PDF
Introducing the new features of the Elastic 8.6 release.pdf
Shotaro Suzuki
 
PDF
NET MAUI for .NET 7 for iOS, Android app development
Shotaro Suzuki
 
PDF
What's New in the Elastic 8.5 Release
Shotaro Suzuki
 
PDF
Centralized Observability for the Azure Ecosystem
Shotaro Suzuki
 
PDF
What's New in the Elastic 8.4 Release
Shotaro Suzuki
 
PDF
Power Apps x .NET ~ Transforming Business Applications with Fusion Development
Shotaro Suzuki
 
PDF
devreljapan2022evaadvoc-final.pdf
Shotaro Suzuki
 
PDF
elastic-mabl-co-webinar-20220729
Shotaro Suzuki
 
PDF
Discover what's new in the Elastic 8.3 release - Find, monitor, and protect e...
Shotaro Suzuki
 
PDF
Building a search experience with Elastic – Introducing Elastic's latest samp...
Shotaro Suzuki
 
PDF
Elastic x Microsoft Azure Integration Evolution - Integrated Monitoring for S...
Shotaro Suzuki
 
PDF
Building 3D mobile apps using Power Apps Mixed Reality controls, Azure SQL Da...
Shotaro Suzuki
 
PDF
What's New in the Elastic 8.2 Release - Seamless User Experience with Search -
Shotaro Suzuki
 
PDF
Building Software Reliability through Distributed Tracing.pdf
Shotaro Suzuki
 
PDF
Building a Flutter Development Environment with VSCode and Useful Extensions
Shotaro Suzuki
 
PDF
Introducing Elastic 8.1 Release - More Integration, Faster Indexing Speed, Lo...
Shotaro Suzuki
 
PDF
Introducing the elastic 8.0 release a new era of speed, scale, relevance, and...
Shotaro Suzuki
 
PDF
Developers-Summit-2022_Improving-Digital-Customer-Experience-with-Enterprise_...
Shotaro Suzuki
 
PDF
Firebase, Firestore Extension for Elastic App Search Integration-20220216
Shotaro Suzuki
 
This is how our first offline technical event in three years was able to succ...
Shotaro Suzuki
 
Introducing the new features of the Elastic 8.6 release.pdf
Shotaro Suzuki
 
NET MAUI for .NET 7 for iOS, Android app development
Shotaro Suzuki
 
What's New in the Elastic 8.5 Release
Shotaro Suzuki
 
Centralized Observability for the Azure Ecosystem
Shotaro Suzuki
 
What's New in the Elastic 8.4 Release
Shotaro Suzuki
 
Power Apps x .NET ~ Transforming Business Applications with Fusion Development
Shotaro Suzuki
 
devreljapan2022evaadvoc-final.pdf
Shotaro Suzuki
 
elastic-mabl-co-webinar-20220729
Shotaro Suzuki
 
Discover what's new in the Elastic 8.3 release - Find, monitor, and protect e...
Shotaro Suzuki
 
Building a search experience with Elastic – Introducing Elastic's latest samp...
Shotaro Suzuki
 
Elastic x Microsoft Azure Integration Evolution - Integrated Monitoring for S...
Shotaro Suzuki
 
Building 3D mobile apps using Power Apps Mixed Reality controls, Azure SQL Da...
Shotaro Suzuki
 
What's New in the Elastic 8.2 Release - Seamless User Experience with Search -
Shotaro Suzuki
 
Building Software Reliability through Distributed Tracing.pdf
Shotaro Suzuki
 
Building a Flutter Development Environment with VSCode and Useful Extensions
Shotaro Suzuki
 
Introducing Elastic 8.1 Release - More Integration, Faster Indexing Speed, Lo...
Shotaro Suzuki
 
Introducing the elastic 8.0 release a new era of speed, scale, relevance, and...
Shotaro Suzuki
 
Developers-Summit-2022_Improving-Digital-Customer-Experience-with-Enterprise_...
Shotaro Suzuki
 
Firebase, Firestore Extension for Elastic App Search Integration-20220216
Shotaro Suzuki
 

Recently uploaded (8)

PDF
MahiroYoshida_セリフに着目したキャラクタロール推定に関する基礎検討_sigcc12th2025
Matsushita Laboratory
 
PDF
20250729_Devin-for-Enterprise
Masaki Yamakawa
 
PDF
【学会聴講報告】CVPR2025からみるVision最先端トレンド / CVPR2025 report
Sony - Neural Network Libraries
 
PPTX
baserCMS『カスタムコンテンツ』徹底活用術〜あなただけの管理画面を自由自在に〜
Ryuji Egashira
 
PPTX
2025_7_25_吉祥寺_設計ナイト_ADR運用におけるデータ利活用の考え方.pptx
ssuserfcafd1
 
PDF
20250726_Devinで変えるエンプラシステム開発の未来
Masaki Yamakawa
 
PDF
TaketoFujikawa_ComicComputing12th_inKumamoto
Matsushita Laboratory
 
PDF
20250730_QiitaBash_LT登壇資料_PDC_Kurashina.pdf
pdckurashina
 
MahiroYoshida_セリフに着目したキャラクタロール推定に関する基礎検討_sigcc12th2025
Matsushita Laboratory
 
20250729_Devin-for-Enterprise
Masaki Yamakawa
 
【学会聴講報告】CVPR2025からみるVision最先端トレンド / CVPR2025 report
Sony - Neural Network Libraries
 
baserCMS『カスタムコンテンツ』徹底活用術〜あなただけの管理画面を自由自在に〜
Ryuji Egashira
 
2025_7_25_吉祥寺_設計ナイト_ADR運用におけるデータ利活用の考え方.pptx
ssuserfcafd1
 
20250726_Devinで変えるエンプラシステム開発の未来
Masaki Yamakawa
 
TaketoFujikawa_ComicComputing12th_inKumamoto
Matsushita Laboratory
 
20250730_QiitaBash_LT登壇資料_PDC_Kurashina.pdf
pdckurashina
 

Building simple-app-using-.net 6 asp.net core web api-blazor web assembly-elastic apm

  • 1. .NET 6 ASP.NET Core Web API、 Blazor WebAssembly、Elastic APM で 簡単なアプリを構築してみよう 鈴木 章太郎 Elastic テクニカルプロダクトマーケティングマネージャー/エバンジェリスト デジタル庁 省庁業務グループ ソリューションアーキテクト
  • 3. ⚫ .NET 6 における Blazor Update ⚫ ASP.NET Core Web API, AntDesign, Blazor WebAssembly でアプリを構築 ⚫ Elastic APM によるアプリケーションの監視 ⚫ まとめ アジェンダ
  • 4. .NET 6 における Blazor Update
  • 5. Modern Web UI with .NET & Blazor Server WebAssembly Hybrid HTML、CSS、.NET、C#... JavaScript の代わりに Open Web 標準でアプリ開発 どこにでもホストできる
  • 6. MVC Razor Pages Blazor HTTP APIs SignalR Part of the ASP.NET Core family Web UI Services Worker gRPC SPA
  • 7. Blazor – .NET 5 まで Blazor Server Blazor WebAssembly DOM Blazor WebAssembly .NET Razor Components Blazor .NET Razor Components DOM SignalR ✓ DB アクセス含むサーバー機能へのフルアクセス ✓ 高速なスタートアップ ✓ コードがサーバーから離れない ✓ 古いブラウザとシンクライアントをサポート ✓ 永続的な接続が必要 ✓ UI の遅延が高い ✓完全にクライアント側で実行 ✓必要なサーバー コンポーネントなし ✓静的サイトとしてホスト ✓オフラインで実行可能 ✓大きなダウンロードサイズ ✓ランタイムパフォーマンスの低下 Blazor Server (.NET 5) Blazor WebAssembly (.NET 5)
  • 8. Blazor – .NET 6 による強化 Blazor Server Blazor WebAssembly DOM Blazor WebAssembly .NET Razor Components Blazor .NET Razor Components DOM SignalR Blazor WebAssembly の事前 (AOT) コンパイル対応 Blazor WebAssembly アプリのダウンロードサイズの縮小 Error Boundaries Razor コンポーネント型の推論とジェネリック型の制約 動的コンポーネント プリレンダリング中の Blazor コンポーネント状態の永続性 Hot Reload, Native File Reference, 他多数 .NET 6
  • 9. Blazor Server と Blazor WebAssembly の 開発モデルの違い Blazor Server Blazor WebAssembly DOM Blazor WebAssembly .NET Razor Components Blazor .NET Razor Components DOM SignalR Blazor Server • 開発モデルは C/S 型に近い • DOM(ブラウザ UI)と Blazor ランタイム(仮想 DOM) がやりとりし UI 描画(差分更新) • 画面の入出力部分のみをリモートデスクトップのようにブラウザ 側に持ってきているとみなせる • SignalR(Web ソケット通信) • DB に直接アクセス可能 • Web アプリケーションを Client - Server 型に近いモデルで 開発可能 • Web サーバとの常時接続が必要 • サーバ側でリソース効率の高いアプリの作り方が必要 • Hot Reload Blazor WebAssembly • サンドボックス制限 • DB アクセス不可 → Native File Reference による ローカル DBアクセス • Web API を介して DB アクセス • 静的な Web サーバにホスト • アプリ全体がダウンロード(大きくなりがち) • DOM(ブラウザ UI)と Blazor ランタイム(仮想 DOM)がやりとりしUI 描画(差分更新)、ランタイム が Blazor アプリ(UI ロジック)とやりとりする • Hot Reload (デバッグなしで実行)
  • 10. Web Assembly(WASM) とは • Web ブラウザ上でバイナリコードを直接実行できる • 2019 年 12 月 W3C 勧告、正式なウェブ標準に認定 • 様々な言語のバイナリコードを主要なブラウザのサンドボックス内で動作可能 • Web Assembly バイナリコードへのコンパイラなどのツールセットが必要 Edge Chrome Safari Firefox Web Assembly バイナリコード (W3C 標準技術) C++ WASM コンパイラ Rust WASM コンパイラ C WASM コンパイラ SQLite ソースコード(C) Rust ソースコード C++ ソースコード
  • 11. .NET 6 における Blazor WebAssembly 新機能 • 事前 (AOT) 実行コンパイル • カスタム要素 • 小規模なアプリサイズ • Native File Reference • Hot Reload • Component, .NET, HTML, CSS… …その他数十個の更新あり
  • 12. Blazor WebAssembly 小規模なアプリサイズ .NET 5 • Publish size: 1.7 MB .NET 6 • Publish size: 1.0 MB • ~40% size reduction
  • 13. Blazor WebAssembly のホスティング ASP.NET Blazor WebAssem bly APIs Globally distributed hosting Blazor WebAssem bly Serverless functions APIs App Services Azure Static Web Apps ASP.NET Globally distributed hosting Microservices Blazor WebAssembly APIs Blazor WebAssembly APIs
  • 14. ASP.NET Core Web API, AntDesign, Blazor WebAssembly でアプリを構築
  • 15. 今回のデモアプリのイメージ Azure SQL Database Elastic Cloud 東日本リージョン マスターノード x 1 データノード x 2 ML ノード x 1 https://f79...c67.japaneast .azure.elastic- cloud.com:9243/ 全文検索クエリ CRUD 検索・更新 UI Blazor WebAssembly Azure サブスクリプション Visual Studio 2022 Azure App Service Elastic APM Endpoint に送信 Azure Data Explorer ASP.NET 6 Web API APM .NET Agent AntDesign
  • 16. .NET MAUI Blazor App - モバイル、デスクトップ、 Web ハイブリッドアプリを開発 https://qiita.com/shosuz/items/4218af93343e5cc999ec このデモアプリを元に、 自分が持って いる Elastic の books index に 対応したデモを作ろうとしていたところ、
  • 17. ASP.NET Core Blazor WebAssembly と Web API と Entity Framework Core で SQL Server のデータを取得したり追加したり更新したり削除したりする [.NET 6 版] https://qiita.com/tamtamyarn/items/876a5cd4b9ec9cdc1044 ちょうどこちらのエントリを発見! とても良い実装なので、参考にさせて いただきます!Special Thanks!
  • 18. コードファーストによる Azure SQL Database 生成 • Microsoft.EntityFrameworkCore.SqlServer • Microsoft.EntityFrameworkCore.Tools • Elastic.Apm.NetCoreAll • プロジェクトに Models フォルダを作成し、 book クラスを作成 • Book.cs に右のコードを記載 public class Book { public int BookId { get; set; } public string Title { get; set; } public string ThumbnailUrl { get; set; } public string Isbn { get; set; } public string Author { get; set; } public string Category { get; set; } public Book (int bookId, string title, string thumbnailUrl, string isbn, string author, string category) { BookId = bookId; Title = title; ThumbnailUrl = thumbnailUrl; Isbn = isbn; Author = author; Category = category; } }
  • 19. コードファーストによる Azure SQL Database 生成 2 { "ConnectionStrings": { "DefaultConnection": "Server=tcp:xxx.database.windows.net,1433;Initial Catalog=BlazorWasmDb;Persist Security Info=False;User ID=(UserID);Password=(Password); MultipleActiveResultSets=False;Encrypt=True;TrustServerCertificate=False;Connection Timeout=30;" }, "Logging": { "LogLevel": { "Default": "Information", "Microsoft.AspNetCore": "Warning" } }, "AllowedHosts": "*" }
  • 20. Azure Data Studio を使用して 新しいデータベースを確認、データを追加 INSERT INTO Books(Title,ThumbnailUrl,Isbn,Author,Category)VALUES(N'Unlocking Android',N'https://s3.amazonaws.com/AKIAJC5RLADLUMVRPFDQ.book-thumb- images/ableson.jpg',N'1933988673',N'W. Frank Ableson, Charlie Collins, Robi Sen',N'Open Source, Mobile'); INSERT INTO Books(Title,ThumbnailUrl,Isbn,Author,Category)VALUES(N'ASP.NET Core 6.0 in Practice',N'https://s3.amazonaws.com/AKIAJC5RLADLUMVRPFDQ.bo ok-thumb-images/bochicchio.jpg',N'1935182463',N'Daniele Bochicchio, Stefano Mostarda',N'Microsoft .NET'); INSERT INTO Books(Title,ThumbnailUrl,Isbn,Author,Category)VALUES(N'Brownfield Application Development in .NET',N'https://s3.amazonaws.com/AKIAJC5RL ADLUMVRPFDQ.book-thumb-images/baley.jpg',N'1933988711',N'Kyle Baley, Donald Belcham',N'Microsoft'); INSERT INTO Books(Title,ThumbnailUrl,Isbn,Author,Category)VALUES(N'MongoDB in Action',N'https://s3.amazonaws.com/AKIAJC5RLADLUMVRPFDQ.book-thumb- images/banker.jpg',N'1935182870',N'Kyle Banker',N'Next Generation Databases'); INSERT INTO Books(Title,ThumbnailUrl,Isbn,Author,Category)VALUES(N'jQuery in Action',N'https://s3.amazonaws.com/AKIAJC5RLADLUMVRPFDQ.book-thumb- images/bibeault.jpg',N'1933988355',N'Bear Bibeault, Yehuda Katz',N'Web Development');
  • 21. AntDesign • 人気 No.1 on Awesome Blazor • 企業向け製品のための デザインシステム • 効率的で楽しいワーク エクスペリエンスを実現 https://antblazor.com/en-US/ Install-Package -ProjectName BlazorWASMApp.Client -Id AntDesign
  • 22. AntDesign • Components • Image の使用方法を 参照 • Source Code 利用 可能 https://antblazor.com/en-US/components/image
  • 23. Blazor WebAssembly の Hot Reload https://docs.microsoft.com/ja-jp/aspnet/core/test/hot-reload?view=aspnetcore-6.0 In Visual Studio 2022 GA (17.0), Hot Reload is only supported when running without the debugger.
  • 25. 今回のデモアプリのイメージ Azure SQL Database Elastic Cloud 東日本リージョン マスターノード x 1 データノード x 2 ML ノード x 1 https://f79...c67.japaneast .azure.elastic- cloud.com:9243/ 全文検索クエリ CRUD 検索・更新 UI APM .NET Agent Blazor WebAssembly Azure サブスクリプション Visual Studio 2022 Azure App Service Elastic APM Endpoint に送信 Azure Data Explorer ASP.NET 6 Web API AntDesign
  • 26. // .NETアプリへの Nuget パッケージインストール dotnet add Elastic.Apm.NetCoreAll Install-Package -ProjectName BlazorApp.Server -Id Elastic.Apm.NetCoreAll Elastic APM for ASP .NET Core https://www.elastic.co/jp/apm/ Configuration on .NET Core https://www.elastic.co/guide/en/apm/agent/dotnet/current/configuration-on-asp-net-core.html ASP .NET Core Quick Start https://www.elastic.co/guide/en/apm/agent/dotnet/current/setup-asp-net-core.html // Program.cs へ の 追加 --- using Elastic.Apm.NetCoreAll; //Elastic APM 追加 app.UseAllElasticApm(builder.Configuration); app.UseHttpsRedirection(); app.UseBlazorFrameworkFiles(); app.UseStaticFiles(); --- // appsettings.json の 更新 --- { "Logging": { "LogLevel": { //"Default": "Information", //"Microsoft": "Warning", //"Microsoft.Hosting.Lifetime": "Information" "Default": "Warning", "Elastic.Apm": "Debug" } } , "AllowedHosts": " * " , //Elastic ポ ー タ ル か ら APM エ ン ド ポ イ ン ト と Secret を コ ピ ー &ペースト "ElasticApm": { "ServerUrl": "https:// 7d39255475bg8e8e0j99fm870kj48v88.apm. japaneast.azure.elastic-cloud.com", "SecretToken": ”f6p81KJytBcGMK2JKS4", "TransactionSampleRate": 1.0 } }
  • 27. Elastic Cloud → Kibana で APM モニタリング https://cloud.elastic.co/home
  • 29. まとめ ⚫ .NET 6 における Blazor Update ⚫ ASP.NET Core Web API を構築 ⚫ Blazor WebAssembly でフロントエンドアプリを構築 ⚫ Elastic APM によるアプリケーションの監視
  • 30. Get started with Blazor • Go to https://blazor.net • Install the .NET SDK • .NET Conf 2021 https://www.dotnetconf.net/ • .NET Conf 2021 – videos/slides/demos https://github.com/dotnet-presentations/dotNETConf/tree/master/2021/MainEvent/Technical Visual Studio Visual Studio for Mac Visual Studio Code + C# extension
  • 31. .NET MAUI Blazor App - モバイル、デスクトップ、 Web ハイブリッドアプリを開発 https://qiita.com/shosuz/items/4218af93343e5cc999ec
  • 32. ASP.NET Core Blazor WebAssembly と Web API と Entity Framework Core で SQL Server のデータを取得したり追加したり更新したり削除したりする [.NET 6 版] https://qiita.com/tamtamyarn/items/876a5cd4b9ec9cdc1044
  • 33. Elastic リソース • 公式ドキュメント https://www.elastic.co/guide/index.html • クラウドネイティブ アプリでの Elasticsearch https://docs.microsoft.com/ja-jp/dotnet/architecture/cloud- native/elastic-search-in-azure • Azure での検索データ ストアの選択 https://docs.microsoft.com/ja-jp/azure/architecture/data- guide/technology-choices/search-options • Elastic APM Agent https://www.elastic.co/guide/en/apm/agent/index.html • APM https://www.elastic.co/jp/apm/ • Configuration on .NET Core https://www.elastic.co/guide/en/apm/agent/dotnet/current/co nfiguration-on-asp-net-core.html • ASP.NET Core Quick Start https://www.elastic.co/guide/en/apm/agent/dotnet/current/set up-asp-net-core.html
  • 34. Thank you for your attention!