18
23

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

BlazorAdvent Calendar 2021

Day 1

Blazorプロジェクトのテンプレートについて

Last updated at Posted at 2021-11-30

Blazorアプリケーションを作り始める時に使えるプロジェクトテンプレートを紹介したいと思います:thumbsup:
テンプレ2.png

Blazorテンプレート

VisualStudioなどを使用してBlazorのプロジェクトを作成するとき、初めから入っているBlazorテンプレートをベースにプロジェクトが作成されます。

Blazorのデフォルトテンプレートではプロジェクト作成の種類に応じて、いくつかの種類に分けることができます。

Blazor WebAssembly アプリ
Blazorアプリケーションの実行をWebAssemblyだけで構成します。
Blazor WebAssembly アプリ+ ASP.NET Core Host
Blazorアプリケーションの実行をWEbAssemblyで実行します。データを提供する機能として、ASP.Net Coreコントローラーを含んだプロジェクトが作成されます。プロジェクトの種類に「Blazor WebAssembly アプリ」を選択し、追加情報で「ASP.NET Coreでホストされた」を選択することで作成することができます。
Blazor サーバー
Blazorアプリケーションの実行をサーバーサイドで実行します。データの提供にASP.Net Core コントローラーは必須ではなく、フロントエンドとバックエンドを一つのプロジェクトに実装することができます。

デフォルトテンプレートに学ぶ

デフォルトテンプレートに含まれるBlazorの機能をいくつか見てみましょう。デフォルトテンプレートにはBlazor開発者に向けてのヒントやアイデアが詰まっており非常に参考になります:sparkles:
sol.png

Pages/Index.razor

Pagesフォルダに格納されているページ(Counter/FethData/Index)は、デフォルトテンプレートの主な画面が格納されています。
Index.razorコンポーネントは初めの画面に表示されるページです。

これらの画面では、Blazorにおける@pageディレクティブを使用したルーティング定義の実装方法を見ることができます。

Index.razorのルーティング

Index.raozr
@page "/"

Counter.razorのルーティング

Counter.raozr
@page "/counter"

Pages/Counter.razor

このページはボタンをクリックすると画面上のカウンターがインクリメントされるページの実装例です。BlazorがJavascriptレスでWebアプリケーションをコーディングできることを証明した非常に分かりやすい例と言えます。

JavaScriptレスなコード

Counter.razor
@page "/counter"

<PageTitle>Counter</PageTitle>

<h1>Counter</h1>

<p role="status">Current count: @currentCount</p>

<button class="btn btn-primary" @onclick="IncrementCount">Click me</button>

@code {
    private int currentCount = 0;

    private void IncrementCount()
    {
        currentCount++;
    }
}

Pages/FetchData.razor

FetchData.razorは、日付と気温、天気を表形式で表示するコンポーネントです。このコンポーネントの実装方法はBlazorプロジェクト種類により大きく違ってきます。

Blazor WebAssemblyアプリ
Blazor WebAssmeblyアプリでは、表示するデータの取得先として静的に配置されたファイルを読み込みます。読み込むファイルはwwwroot/sample-dataディレクトリに配置されています。Program.csでHttpClientインスタンスを生成しており、ASP.Net CoreのDI(Dependency Injection)の使い方を知ることができます。
Blazor WebAssemblyアプリ + ASP.NET Core Host
このプロジェクトは、クライアント側はBlazor WebAssemblyアプリと同じですが、データを提供するサーバー側(ASP.Net Core)のプロジェクトが生成されます。FetchDataの表示データとして、サーバー側プロジェクトにWeatherForecastControllerが生成されています。単に静的なファイルを読み込ませるのではなく認証などの仕組みを作成するプロジェクトでは参考になるでしょう。また、クライアントとサーバーの共通的なインタフェースとして、BlazorApp.Shared/WeatherForecastプロジェクトが作成されており、共通的な定義を集約できるクラスライブラリの作成方法を知ることができます。
Blazor サーバー
Blazorサーバーは、バックエンド側の処理をフロントエンドと同一インスタンス内で処理できる為、Blazor WebAssembly アプリと大きく異なります。Blazor サーバーではデータの取得にHttpClientを使用せず、画面側のコードで直接データを提供するクラスを生成することが可能になります。

Shared/SurveyPrompt.razor

SurveyPrompt.razorは、Pagesフォルダにあるコンポーネントではなく、画面内で部品のように扱うことができるコンポーネントです。コンポーネントはBlazorを扱う上での基本的な構成要素です。C#でクラスライブラリを作成するように、Blazorではコンポーネントを作ることで部品化することができます。

使いたいところでSurveyPromptコンポーネントを記述する

Index.razor
<SurveyPrompt Title="How is Blazor working for you?" />

qiita3.png

このコンポーネントでは、Title というコンポーネントパラメータを使用する側で指定し、描写時に渡されたパラメータを表示する、という処理をしています。コンポーネントパラメーターの使い方がわかる実装例です。

テンプレートを使う上での注意点

テンプレートやライブラリは.Net のバージョンに大きく依存します。Blazorのデフォルトテンプレートも以前から見た目こそ同じですが、.Net のバージョンアップと共に少しずつ変化してきました。テンプレートやライブラリを使う際は、バージョンによる非互換に注意が必要です。

互換性に影響を与える変更点

サードパーティーのBlazorテンプレート

nugetパッケージとして、テンプレートが公開されているもののうち、UIフレームワークのBlazorテンプレートをいくつか紹介します。

MudBlazor.Templates

qiita4.png

BlazorのUIフレームワークとして人気の高い MudBlazorのテンプレートです。
プロジェクト作成時のオプションに Default を選択すると、デフォルトテンプレートと同じ機能を見ることができます。機能はシンプルですが、初めからライブラリを使用する環境が組み込まれているため、その手間を省けるだけでも大いに活用する意義があります。

qiita6.png

プロジェクト作成時のオプションに AdminDashboardを選択すると、多彩なコンポーネントを使用したダッシュボードの作成例を見ることができます。だいたいモックアップではありますが、いくつか動きのある機能もあり、実装の参考になります。

AntDesign.Templates

qiita9.png

こちらも人気であるAnt Design Blazorを使用したテンプレート。プロジェクトの作成でオプションの fullにチェックを入れないとシンプルなプロジェクトが作成されます。

qiita11.png

プロジェクト作成のオプションでfullにチェックを入れると、ダッシュボードアプリケーションが表示されます。Chart部分は実際に動作するので機能が非常に豊富ですね:muscle:

Bootstrap.Blazor.Templates

qiita7.png

BootstrapBlazorを使ったテンプレート。シンプルですが、BootstrapBlazorも多くのコンポーネントが揃っています:thumbsup:

BlazorWithIdentity.Template

qiita12.png

このテンプレートはログイン認証の実装について知ることができます。プロジェクトはWebAssemblyアプリ + ASP.Net Core コントローラーで構成されていて、画面の「Create account」で作成したアカウントで認証する仕組みが実装されています。認証・認可を行うアプリケーションのベースとして、非常に参考になるテンプレートです:thumbsup:

他にもテンプレートはいくつかありますが、、、メンテナンスされなかったりして、実用性のあるものはそれほど多くはないですね:sweat_smile:

その他のComponentライブラリ

Awesome Blazorは、Blazor開発者が初めに見るべきサイトです。
Blazorに関するありとあらゆる情報が掲載されていて日々進化し続けています。

その中でも、Libraries & ExtensionsにはUIフレームワークをはじめとした様々なライブラリについて知ることができます。
ライブラリによってはテンプレートを提供していませんが、GitHubページからプロジェクトファイルをダウンロードして使うのも良いですね:sunny:

Awesome Blazor

終わりに

Blazorのデフォルトテンプレートには、BlazorでC#を使ってこんなことできるよ!というのが詰まっていることがわかりました:raising_hand_tone1:
Blazorアプリケーションを作成する時、サードパーティーのテンプレートをベースにすることで初めから豊富なコンポーネントを使用することができます:thumbsup:
また、Awesome Blazorを見ると世界中で様々な人がBlazorに注目しており素晴らしいコミュニティを作っています:relaxed:
以上、これからBlazorで開発をする人や、Blazorの知見を深めたい人の参考になれば幸いです:zap::zap::zap::rocket:

18
23
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
18
23

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?