Blazorの新しい実験的コンポーネント「QuickGrid」
ASP.NET Coreの.NET7 Preview 6におけるアップデートのブログの中でBlazorの新しい実験的なコンポーネントとしてQuickGridというデータグリッドコンポーネントの紹介があったので早速試してみた。
.NET7のアップデートブログに書かれているが見てみるとこのコンポーネント自体は.NET6から対応しているようだ。
というわけで、普通に.NET6のBlazor WebAssemblyのプロジェクトに上記をNugetする。
次に、「_Imports.razor」に次の記述を追記する。
@using Microsoft.AspNetCore.Components.QuickGrid
グリッドであるので、FetchData.razorを利用することとする。
どうやら、このQuickGridはIQueryable<>型を受け付ける仕様になっているよう。元々はWeatherForcastの配列をforeachでループさせて表示される形になっていたのでそこが変更点となる。
比較のために元の表示を残して以下のようにした。
@page "/fetchdata" @inject HttpClient Http <PageTitle>Weather forecast</PageTitle> <h1>Weather forecast</h1> <p>This component demonstrates fetching data from the server.</p> @if (forecasts == null) { <p><em>Loading...</em></p> } else { <table class="table"> <thead> <tr> <th>Date</th> <th>Temp. (C)</th> <th>Temp. (F)</th> <th>Summary</th> </tr> </thead> <tbody> @foreach (var forecast in forecasts) { <tr> <td>@forecast.Date.ToShortDateString()</td> <td>@forecast.TemperatureC</td> <td>@forecast.TemperatureF</td> <td>@forecast.Summary</td> </tr> } </tbody> </table> <QuickGrid Items="@item"> <PropertyColumn Property="@(p => p.Date.ToShortDateString())" Sortable="true" /> <PropertyColumn Property="@(p => p.TemperatureC)" Sortable="true" /> <PropertyColumn Property="@(p => p.TemperatureF)" Sortable="true" /> <PropertyColumn Property="@(p => p.Summary)" Sortable="true" /> </QuickGrid> } @code { public WeatherForecast[]? forecasts; IQueryable<WeatherForecast>? item; protected override async Task OnInitializedAsync() { forecasts = await Http.GetFromJsonAsync<WeatherForecast[]>("sample-data/weather.json"); if (forecasts != null) { item = forecasts.AsQueryable(); } } public class WeatherForecast { public DateTime Date { get; set; } public int TemperatureC { get; set; } public string? Summary { get; set; } public int TemperatureF => 32 + (int)(TemperatureC / 0.5556); } }
実行結果は以下の通り。
QuickGridの機能としてソートや、ページング、フィルタリングといった機能があります。今までもUIコンポーネントを導入することで類似の機能を使うことはできましたがまだ実験的な機能とはいえ標準的なコンポーネントとしての検討があるということは素晴らしいことと思います。
.NET ラボ勉強会2022年6月登壇まとめ
Web開発者が始める .NET MAUI Blazor App
というタイトルで.NETラボ勉強会2022年6月登壇してきました。
スライドは以下の通り。
要点としては以下の通り。
- 開発スタイルがBlazor WebAssemblyによく似ている
- Web開発者にとってモバイル開発を始めるのに最適なフレームワークの一つである
- 開発スタイルがBlazor WebAssemblyに似ているからといってなにもWebAssemblyが動いているわけではなくれっきとしたネイティブアプリケーションである
- .NET MAUI Blazor Appも標準的な.NET MAUI同様のネイティブAPIを含むGPSや加速度APIなどのさまざまなAPIを使用可能
- BlazorのUIコンポーネントなどBlazorの資産が有効活用できることも
というわけで、当日はAndroidの実機でのデモを交えてこれらのポイントを解説しました。
また、デモはしませんでしたがここまでのものを作る過程で驚きポイントとしてWebアプリやデスクトップアプリなどでホットリロードができるというのはまあリリースの通りできちんと動いているんだなという程度で便利には思ったけども驚きには感じませんでしたが、Android実機に対してもホットリロードできたという点に驚きと感動を覚えました。
やはり、デスクトップなど画面で動いているものとリアルな物理デバイスで動いているものとは少し感動が違うようです。
GitHubにあるBlazor WebAssembly ASP.NET Core HostedなプロジェクトをACRタスクでDockerコンテナイメージビルドする
まず、参考にしたのはここ。
参考のページとの際はプロジェクトの種類だ。
なので、ASP.NET Coreのビルドができれば基本的にはうまくいくはず。
前提条件
Blazor WebAssemblyのテンプレートにASP.NET Core Hostedのオプションをつけたプロジェクトがあり、Serverプロジェクトにコンテナサポートが入っていること。
(プロジェクト名/Server/Dockerfileがあること。)
GitHub個人用アクセストークンを作成する
上に示した参考ページの通りに個人用アクセストークンを作成する。
https://github.com/settings/tokens/new
上記より、[repo:status]と[public_repo]を有効にする。
Azure CLIを使えるようにする
すでに使えるのであればここは飛ばす。
ビルドタスクを作成する
まず、環境変数を設定します。
ACR_NAME=# Azure container registryの名前 GIT_USER= # GitHubのアカウント名 GIT_PAT= # 先ほど生成したトークン
次に、az acr task createコマンドを実行してタスクを生成します。
このときのポイントはDockerファイルはServerプロジェクト内にできているので参考ページとはDockerファイルのパスがずれているというところです。
また、--nameや--imageの名前は適宜変更してください。
az acr task create \ --registry $ACR_NAME \ --name taskhelloworld \ --image helloworld:{{.Run.ID}} \ --context https://github.com/$GIT_USER/<リポジトリ名> \ --file <プロジェクト名>/Server/Dockerfile \ --git-access-token $GIT_PAT
ビルドタスクをテストする
ここまででうまくいくとコンテナビルドができるはずです。
az acr task run --registry $ACR_NAME --name taskhelloworld
ここまでで成功したら、ソースコードを変更して自動的にトリガーするか試してみましょう。
このように、Azure portalのACRリソースのタスクタブにCommitトリガーで成功していたらここでの作業終了です。
Oracle DBでEF Coreを使う(既存テーブルをスキャフォルディングする)
今回は、.NET6のコンソールアプリケーションでサンプルアプリケーションを作成していきます。
まずは、普通にVS2022で.NET6のコンソールアプリのテンプレートでプロジェクトを作成します。
次に、NugetでOracle.EntityFrameworkCoreとMicrosoft.EntityFrameworkCore.Designパッケージをインストールします。
次に、パッケージマネージャコンソールで既存テーブルのスキャフォールディングを行います。
Scaffold-DbContext "データベースへの接続文字列" Oracle.EntityFrameworkCore
データベースへの接続文字列は従来Oracleへの接続文字列として使用していた形式が記述可能です。
オプションなどについては下記を参照してください。
2度目以降のスキャフォールディングは既存のファイルを上書きする必要があるので-Forceオプションをつけるとよいでしょう。
あとは、できたモデルをインスタンス化してあげればDBアクセスができます。
以下実行結果
考慮事項
生成されたデフォルトでは「ModelContext.cs」に接続文字列が直書きされているのでこれを適切な取り扱いをする