6
3

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 2022

Day 24

BlazorWebAssemblyを触ってみる

Last updated at Posted at 2022-12-24

Blazor Webassembly触ってみる

初めに

こんにちは!
私は,現在プログラミングに熱中しているしがない大学生です.
今回は,最近勉強しているC#で作れるWebFramework,Blazorを使って簡単なチュートリアルを通して行きたいと思います.

作業環境

今回はVisualStudioを使って,開始~デプロイまで作業を行いました.

今回やること

公式チュートリアル沿ってBlazor Webassemblyを触り,StaticWebAppにデプロイまで通していきます.Static Web Appについての説明は省かせて頂きます.
参考にした記事

いざ触ってみる

アプリの作成

VisualStudioの「新規プロジェクト作成」からBlazor Webassembly(※以下Blazorと省略)の項目を選択し,Blazorのアプリを作成してもらいます.

image.png

Githubにアップロード&Static Web Appにデプロイ

Githubに作成したプロダクトをPushし,Azure PortalからStaticWebAppのリソースを作成します.

リソースグループを作成し
image.png

その中にStaticWebAppを作成.
image.png

これが完了すると,自動で紐づけたrepositoryにworkflowフォルダとGithub Actionsの設定ymlファイルが追加されデプロイされます.すごく便利です.

image.png

本番環境で見ることが出来ました.
これが初期画面です.
image.png

驚いた事に,初期実装でローディング画面がついていました👀
カッコいい…
image.png

アプリの中を書き換える

デプロイが完了したので,開発の方を行っていきます.
今回は,チュートリアルの解説を読みながら自分でTodoアプリを作ってみたいと思います.
(ただしデータバインドの設定は後日)

機能を観察

ナビゲーションタブが左側にあったので,この設定部分を見ていきいます.
このファイルみたいです.
image.png

そこにTodoのナビゲーションを追加
image.png

NavLinkタグでページの遷移を行い,描画する内容を切り替えているみたいなのでそれを真似て,呼び出すページの編集を行います.
今回はTodoリストを書くために,初期実装で存在したCounterページコンポーネントの書き方を編集し挙動を探っていきます.

なので,PagesのフォルダにTodoのコンポーネントを追加します.
image.png

Counterの中の記述はこんな感じでした.
image.png

公式チュートリアルに書いてあったように,Blazorでは@codeにC#で関数や変数を定義し,HTML的な部分で@マークを付けることで呼び出すみたいです.
また,変数については値が更新される度に参照し直してくれるみたいで,Reactで言うところuseEffectのような記述は無くても更新してくれました.

ということで,何となく挙動がわかったので,Todoのコンポーネントを書き換えていきます.

書き換えた結果 (Pages/todo.razor)

@page "/todo"
<h3 class="mb-4">Todo List</h3>


<span class="me-2">見積もり時間(分):</span>
<input id="text1" type="text" @bind="@time" />

<span class="mx-2">タスク:</span>
<input id="text2" type="text" @bind="@task" />

<br />
<button class="my-4" @onclick="ButtonClick">Button</button>

<table class="table">

        <thead>
            <tr>
                <th>見積もり時間()</th>
                <th>タスク</th>
            </tr>
        </thead>
        
        <tbody>
            @foreach (var task in tasks)
            {
                <tr>
                <td>@task.estimateTime</td>
                <td>@task.task</td>
                </tr>
            }
        </tbody>

</table>

<div>@result</div>

@code {
    private int time = 0;
    private string task = "";
    private int sumTime = 0;
    private string result = "";
    private List<Task> tasks = new List<Task>(){};

    public class Task
    {
        public int estimateTime;
        public string? task;
    }

    void ButtonClick()
    {
        sumTime += time;

        var inputTask = new Task()
        {
            estimateTime = time,
            task = task
        };

        tasks.Add(inputTask);

        result = string.Format("合計時間は {0:d}分 です。", sumTime);
    }
}

見た目

image.png

解説

inputで入力された値を保持するために,@code内にTaskを管理するためにTaskのクラスを宣言し,List<>で格納しておくことで,HTML要素で@foreachを使って描画しています.
Table的なレイアウトは,Fetch dataのレイアウトを参考に書きました.

デプロイ(Pushするだけ)

最後にこの差分をgithubにPushします.
先にStatic Web Appのリソースに紐づけておいたので,デプロイのWorkflowが走ります💨
image.png

完了しました!
image.png

今回のプロダクト
https://polite-bush-0e54a3900.2.azurestaticapps.net/

最後に

今回は簡単な実装でTodoアプリを作成しました.
初めてのBlazorでしたが,直感的に書きやすい部分が多く,データの反映も基本的に楽な記述で行ってくれるので,これから使ってみたいと思いました.

次回は,今回のようなアプリで入力されてデータをStrageリソースにバインドする部分までやってみたいです🍵

参考記事

6
3
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
6
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?