1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

マークシートシステム Mark2 を .NET 10 に

Posted at

Mark2 とは

Mark2 は Blazor WebAssembly で動くマークシートシステムです。スキャンした画像ファイルから、マーク欄の塗りつぶし情報を画像処理で認識して、ファイルに出力します。開発の経緯などは、以前のアドベントカレンダーの記事で公開しました。

2025年の振り返り

2025年は Mark2 の開発は何もできなかったです。引き続き自治体の学力調査や、全国各地の調査で利用されているのですが、私にとって2025年は高速で過ぎていき、いつの間にかアドベントカレンダーの季節になってしまいました。

アドベントカレンダーに書けるような作業内容が無いので、まずは .NET 10 に対応しようと思います。

作業開始

Mark2は基本的には単一画面のみのシンプルなアプリなので、既存のプロジェクトをアップデートするのではなく、 .NET 10 でプロジェクトを作成してから Mark2 のファイルをコピーしていく方法にしました。

まずは以下のコマンドを実行します。

dotnet new blazorwasm -o Mark2

あとで気づいたのですが、 Mark2 は PWA に対応しているので、以下のオプションを有効にしておくべきでした。

dotnet new blazorwasm -o Mark2 --pwa

そして既存のファイルをコピーしてきます。コピーする際、 .NET 10 で書き方が変わったところなどがあれば注意して、新しい書き方をするようにします。

変更した箇所

主な変更箇所は以下になります。もしかしたら .NET 10 ではなく、それ以前の変更に関する箇所があるかもしれません。

NotFound ページ

以前の Mark2 では<NotFound>というタグを利用していたのですが、新しい書き方になっていたので、それに合わせて変更しました。

App.razor
+ <Router AppAssembly="@typeof(App).Assembly" OnNavigateAsync="OnNavigateAsync">
- <Router AppAssembly="@typeof(App).Assembly" NotFoundPage="typeof(Pages.NotFound)">
    <Found Context="routeData">
        <RouteView RouteData="@routeData" DefaultLayout="@typeof(MainLayout)"/>
        <FocusOnNavigate RouteData="@routeData" Selector="h1" />
    </Found>
-   <NotFound>
-       <PageTitle>Not found</PageTitle>
-       <LayoutView Layout="@typeof(MainLayout)">
-           <p role="alert">Sorry, there's nothing at this address.</p>
-       </LayoutView>
-   </NotFound>
</Router>

以下のファイルが追加されています。別のファイルになり、管理しやすくなりました。こうやって分割できていると、きれいな Not Found ページを作ろうという気になります。

Pages/NotFound.razor
@page "/not-found"
@layout MainLayout

<h3>Not Found</h3>
<p>Sorry, the content you are looking for does not exist.</p>

静的アセットのフィンガープリント

これは Blazor Advent Calendar 2025 の19日目で @jsakamoto さんが投稿されていた記事です。私の場合はプロジェクトをゼロから作成してコピーしたので問題なかったですが、既存のプロジェクトをアップデートする場合は注意する必要がありそうです。

Mark2 で廃止した機能

.NET 10 とは関係ないのですが、いくつかの機能を廃止しました。

WebAssemblyの判定を削除

Mark2 を公開した2021年当時はブラウザのセキュリティ設定次第で WebAssembly が実行できなかったので、以下のような処理をしていました。 HTML の <noscript> みたいな役割の処理です。

wwwroot/index.html
-   <script>
-     if (typeof WebAssembly !== "object") {
-       if (navigator.language.startsWith("ja")) {
-         document.getElementById("wasm-error-message").innerHTML =
-           "このブラウザーはWebAssemblyが有効になっていないため、Mark2を実行できません。";
-       } else {
-         document.getElementById("wasm-error-message").innerHTML =
-           "This browser cannot run Mark2 because WebAssembly is not enabled.";
-       }
-       document.getElementById("app").style.display = "none";
-       document.getElementById("wasm-error").style.display = "block";
-     }
-   </script>

最近のブラウザでは WebAssembly の実行ができないというケースを聞かなくなったので、この処理は削除することにしました。利用トラブルが報告されたら、復活させるかもしれません。

Google Analytics のアクセス解析を削除

アプリを公開していると、どのくらい利用されているかは気になるもので、 Google Analytics でアクセス解析を導入していました。ただ、結局はアクセス解析の結果を見ることはなく、この機会に該当するコードを削除しました。

ONNX Runtime の手書き数字認識機能を削除

こちらも Mark2 の開発当初に導入した機能でしたが、あまり利用されることがなく、ひとまず削除することにしました。 ONNX Runtime の呼び出しが少し面倒なので、このあたりが解決したら、また復活させるかもしれません。

2026年に向けて

Mark2については、いろいろと取り組んでみたいこともあったのですが、それができなかったのは残念でした。ただ、安定してサービスを提供するという最低限の目標は達成できましたし、 .NET 10 にも対応できて、また少し Mark2 の寿命も延びたかなと思います。

来年のアドベントカレンダーではおもしろい報告ができるよう、取り組んでいきたいと思います。

1
0
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
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?