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
HybridWebViewでJSベースのView開発 / Development JavaSc...
Search
Sponsored
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
Yusuke Yamada
September 28, 2024
Technology
0
920
HybridWebViewでJSベースのView開発 / Development JavaScript based View with HybridWebView
2024/09/28
https://dotnetlab.connpass.com/event/329105/
のLTで発表
Yusuke Yamada
September 28, 2024
Tweet
Share
More Decks by Yusuke Yamada
See All by Yusuke Yamada
VS CodeとGitHub Copilotで爆速開発!アップデートの波に乗るおさらい会 / Rapid Development with VS Code and GitHub Copilot: Catch the Latest Wave
yamachu
3
1.2k
AIにコードを生成するコードを作らせて、再現性を担保しよう! / Let AI generate code to ensure reproducibility
yamachu
8
7k
Enterprise以外でもMergeQueueしたい! / Use Merge Queue without GitHub Enterprise
yamachu
0
340
Web開発者におくる .NET 7時代の .NET WebAssemblyとの付き合い方
yamachu
0
170
Other Decks in Technology
See All in Technology
GCASアップデート(202601-202603)
techniczna
0
220
進化するBits AI SREと私と組織
nulabinc
PRO
1
250
It’s “Time” to use Temporal
sajikix
3
230
AI実装による「レビューボトルネック」を解消する仕様駆動開発(SDD)/ ai-sdd-review-bottleneck
rakus_dev
0
160
Agent ServerはWeb Serverではない。ADKで考えるAgentOps
akiratameto
0
120
Go 1.26 Genericsにおける再帰的型制約 / Recursive Type Constraints in Go 1.26 Generics
ryokotmng
0
140
AWSの資格って役に立つの?
tk3fftk
2
370
コンテキスト・ハーネスエンジニアリングの現在
hirosatogamo
PRO
5
550
身体を持ったパーソナルAIエージェントの 可能性を探る開発
yokomachi
1
130
Everything Claude Code を眺める
oikon48
13
8.1k
脳内メモリ、思ったより揮発性だった
koutorino
0
390
Zero Data Loss Autonomous Recovery Service サービス概要
oracle4engineer
PRO
2
13k
Featured
See All Featured
YesSQL, Process and Tooling at Scale
rocio
174
15k
How to Ace a Technical Interview
jacobian
281
24k
The Mindset for Success: Future Career Progression
greggifford
PRO
0
280
ラッコキーワード サービス紹介資料
rakko
1
2.7M
The AI Revolution Will Not Be Monopolized: How open-source beats economies of scale, even for LLMs
inesmontani
PRO
3
3.1k
個人開発の失敗を避けるイケてる考え方 / tips for indie hackers
panda_program
122
21k
Side Projects
sachag
455
43k
How to audit for AI Accessibility on your Front & Back End
davetheseo
0
220
Ethics towards AI in product and experience design
skipperchong
2
230
Neural Spatial Audio Processing for Sound Field Analysis and Control
skoyamalab
0
220
Designing Powerful Visuals for Engaging Learning
tmiket
0
290
So, you think you're a good person
axbom
PRO
2
2k
Transcript
HybridWebViewで JSベースのView開発 .NETラボ 勉強会 2024年9月 当日LT ちゅうこ / yamachu
自己紹介 経歴 • Xamarin歴 2014- • Microsoft MVP 2018- ちゅうこ
(山田 裕介) GitHub: yamachu X(Twitter): y_chu5 趣味 • ポケカ、ゲーム • GitHubのExploreのだら見
HybridWebView • WebView 内のコンテンツの JavaScript コードと、 ホストの C# コード間の通信を可能にするコントロール ◦
例えば、WebView 上の React アプリケーションと C# 間で通信が可能に • アプリの UI の一部として利用が可能 ◦ HybridWebView 自体がコントロールであるため、 .NET MAUIの他のコントロールと共存が可能 ◦ 複雑な UI の実装を JavaScript アプリケーションに委譲し、 ロジック部分を C# のような使い方も可能 • .NET 9 Preview 7 以降で利用可能
HybridWebView を試す 1. .NET MAUI プロジェクトの作成 2. プロジェクトに Web アプリケーションのコンテンツを追加
3. HybridWebView コントロールの配置 4. HybridWebView API を使用するコードの追加
HybridWebView を試す 1. .NET MAUI プロジェクトの作成 2. プロジェクトに Web アプリケーションのコンテンツを追加
3. HybridWebView コントロールの配置 4. HybridWebView API を使用するコードの追加
.NET MAUI プロジェクトの作成 $ dotnet --version 9.0.100-rc.1.24452.12 $ dotnet workload
install maui $ dotnet new maui
HybridWebView を試す 1. .NET MAUI プロジェクトの作成 2. プロジェクトに Web アプリケーションのコンテンツを追加
3. HybridWebView コントロールの配置 4. HybridWebView API を使用するコードの追加
プロジェクトに Web アプリケーションのコンテンツを 追加 https://learn.microsoft.com/ja-jp/dotnet/maui/user-interface/controls/hybridwebview?view=net-mau i-9.0&viewFallbackFrom=net-maui-8.0
プロジェクトに Web アプリケーションのコンテンツを 追加 https://learn.microsoft.com/ja-jp/dotnet/maui/user-interface/controls/hybridwebview?view=net-mau i-9.0&viewFallbackFrom=net-maui-8.0 C# -> JavaScript 方向のメッセージの受信
e.detail.message に C# からのメッセージが含まれる
プロジェクトに Web アプリケーションのコンテンツを 追加 https://learn.microsoft.com/ja-jp/dotnet/maui/user-interface/controls/hybridwebview?view=net-mau i-9.0&viewFallbackFrom=net-maui-8.0 JavaScript -> C# 方向のメッセージの送信
後述する HybridWebView.js で定義した SendRawMessage を利用する
プロジェクトに Web アプリケーションのコンテンツを 追加 https://learn.microsoft.com/ja-jp/dotnet/maui/user-interface/controls/hybridwebview?view=net-mau i-9.0&viewFallbackFrom=net-maui-8.0
プロジェクトに Web アプリケーションのコンテンツを 追加 https://learn.microsoft.com/ja-jp/dotnet/maui/user-interface/controls/hybridwebview?view=net-mau i-9.0&viewFallbackFrom=net-maui-8.0 C# -> JavaScript 方向のメッセージの
受信ハンドラの設定 初期化時に一度実行され、以後触る必要はない
プロジェクトに Web アプリケーションのコンテンツを 追加 https://learn.microsoft.com/ja-jp/dotnet/maui/user-interface/controls/hybridwebview?view=net-mau i-9.0&viewFallbackFrom=net-maui-8.0 JavaScript -> C# 方向のメッセージの送信
プロジェクトに Web アプリケーションのコンテンツを 追加 https://learn.microsoft.com/ja-jp/dotnet/maui/user-interface/controls/hybridwebview?view=net-mau i-9.0&viewFallbackFrom=net-maui-8.0 C# から JavaScript コードを実行するのに使用
JavaScript コードから触る必要はない
プロジェクトに Web アプリケーションのコンテンツを 追加 Resources/Raw/wwwroot 以下に 先ほど作った 2 つのファイルを配置 •
index.html • scripts/HybridWebView.js
HybridWebView を試す 1. .NET MAUI プロジェクトの作成 2. プロジェクトに Web アプリケーションのコンテンツを追加
3. HybridWebView コントロールの配置 4. HybridWebView API を使用するコードの追加
HybridWebView コントロールの配置 MainPage.xaml の中身を以下のように変更 コードビハインドにハンドラーがないため Error が出るが、一旦無視
HybridWebView を試す 1. .NET MAUI プロジェクトの作成 2. プロジェクトに Web アプリケーションのコンテンツを追加
3. HybridWebView コントロールの配置 4. HybridWebView API を使用するコードの追加
HybridWebView API を使用するコードの追加 MainPage.xaml.cs の中身を以下のように変更
HybridWebView API を使用するコードの追加 MainPage.xaml.cs の中身を以下のように変更 .NET MAUI の Button コントロールの
Click Handler JavaScript アプリケーションに対し、文字列を含むメッセージを送信
HybridWebView API を使用するコードの追加 MainPage.xaml.cs の中身を以下のように変更 JavaScript アプリケーションからのメッセージを受信するハンドラ e.Message に受信したメッセージが含まれる
完成したアプリがこちら
紹介していない機能 • C# から JavaScript コードを呼び出す ◦ EvaluateJavaScriptAsync ◦ InvokeJavaScriptAsync
macOS Sequoia ユーザ向けの注意点 .NET 9 RC 1 時点では、HTML コンテンツのホストにアドレスの 0.0.0.0
を使用 0.0.0.0 へのアクセスに制限が加わったため以下の Workaround が必要 (追記) https://github.com/dotnet/maui/pull/24884 0.0.0.1 になるそうです https://github.com/dotnet/maui/issues/23390#issuecomment-2202295194 MauiProgram.cs に以下を追記
まとめ • HybridWebView は JavaScript と C# の通信手段を与える • アプリの一部として利用できるため、
.NET MAUI のコントロールとの共存は容易 • アプリの View に JavaScript アプリケーションを採用するの も現実的に
参考リポジトリ 今回の流れに沿ったサンプルプロジェクト https://github.com/yamachu/sample-hybrid-web-view ReactやVueを利用した発展的なプロジェクト(宣伝) https://github.com/yamachu/PokedexWithDotnetWebTechnologies 公式ドキュメント https://learn.microsoft.com/ja-jp/dotnet/maui/user-interface/controls/hybridwebview