7
5

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 3 years have passed since last update.

このページは、祝 .NET 6 GAアドベントカレンダー6日目の記事です。

祝.NET 6 GA

ようやっと出ました。
previewが出てはインストールし、Xamarinの後継というMAUIの状態を確認する日々…。(誇大)
それもこれもMAUIのため…。

MAUI

MAUIは、デスクトップ/モバイル含めた複数のプラットフォームに対応したフレームワークです。
共通のソースから各プラットフォーム用のアプリを作ることができるようになっています。

自分はMAUIに注目してますが、.NET6では他の形式のアプリケーションも作ることができます。
その自由度の高さが.NETの好きなところでもあります。
また、NuGetで公開されているライブラリの多さも好きなところです。

コンソールアプリ

コマンドラインから使用するコンソールアプリも作ることができます。
Windowsなら.exeのファイル、LinuxやmacOSなら拡張子無しで実行できるアプリケーションですね。
.NET6からnamespaceで中カッコが不要になったり、Main関数の形にしなくてよくなったりで、なんだかスクリプト言語のような雰囲気にしつつ、バイナリにできるので高速に実行できる、ということになってます。

Webサーバーアプリ

単一の実行ファイルで、Webサーバーとして動かせるアプリを作成することができます。
MVCだったり.cshtmlだったり.razorだったりできます。
よくわかりませんね。

WebAssemblyアプリ

Blazorという仕組み?でC#からWebAssemblyを作ることができます。
ページは.razorで作ります。

という風に、いろんなものが出来上がるんですが。
ええい、もうお前のよくわからん話はもういい、サンプル見せろサンプル。
ということで、サンプル作ってみました。

サンプルコード

コードはGitHubに置きました。
何をするアプリかというと、某電子書籍サイトの無料マンガの一覧を表示する、というものになっています。
(勢いだけで作ってるのでいろいろやらかしてます。触れないところは見なかったことということでお願いします)

各々のプロジェクトの説明では、どのようにプロジェクトを作ったか、も載せておきます。
まずはVisual Studioで開けるようにソリューションファイル作成

$ mkdir -p ScrapingTest/src ; cd ScrapingTest/src
$ dotnet new sln

各プロジェクト共通ライブラリ(ScrapingTestCommon)

以下のものが入っています。

  • 本のタイトルや書誌URLをパッキングしたクラス
  • サイトからWebページを読み込んで個別の作品に分ける

読んでくるために、AngleSharpというライブラリを使っています。
FreeBookScraping.csの63行目で読み込んで65~75行で各タイトルに分けています。
LINQ万歳!

$ mkdir ScrapingTestCommon ; cd ScrapingTestCommon
$ dotnet new console
$ dotnet add package AngleSharp --version 0.16.1
$ cd ..
$ dotnet sln add ScrapingCommon

コンソールアプリ(ScrapingTestConsole

上記共通ライブラリで読み込んだタイトル一覧を出力するコンソールアプリです。
コマンドラインの解析にSystem.CommandLineというライブラリを使っており、コマンドラインオプション解析が超超楽にできました。

$ mkdir ScrapingTestConsole ; cd ScrapingTestConsole
$ dotnet new console
$ dotnet add package System.CommandLine --prerelease
$ dotnet add reference ../ScrapingTestCommon
$ cd ..
$ dotnet sln add ScrapingTestConsole

Windowsアプリ(WPF)(ScrapingTestWpf

WinUIWindows App SDKだと新しく出ていますが、まだまだWPFで作りますよ。
という方にも答えてくれる.Net6。
こういうアプリではやはりReactivePropertyは外せません。
(といっても、これくらいのアプリなら使う必要もないのですが…)

$ mkdir ScrapingTestWpf ; cd ScrapingTestWpf
$ dotnet new wpf
$ dotnet add package ReactiveProperty
$ dotnet add reference ../ScrapingTestCommon
$ cd ..
$ dotnet sln add ScrapingTestWpf

Webサーバーアプリ(ScrapingTestWebSerer

共通ライブラリで読み込んだタイトル一覧を表示するWebサーバーのアプリです。
確か以前はControllerViewで出来上がってたと思ったのですが、これらがパッキングされるようになった(Pages/Index.cshtmlPages/Index.cshtml.cs)んですね。

$ mkdir ScrapingTestWebSerer ; cd ScrapingTestWebServer
$ dotnet new webapp
$ dotnet add reference ../ScrapingTestCommon
$ cd ..
$ dotnet sln add ScrapingTestWebSerer

WebAssemblyアプリ(ScrapingTestPwa

サーバークライアント形式です。
PWAにしてしまうと、別サイトからデータを取ってこようとしても取ってこれないのですね。
なので、共通ライブラリはサーバー側が使用し、クライアントはAPIで取ってくる、という風になっています。
クライアントはまたもやReactivePropertyを使っています。

$ mkdir ScrapingTestPwa ; cd ScrapingTestPwa
$ dotnet new blazorwasm -p -ho
$ cd Server
$ dotnet add reference ../../ScrapingTestCommon
$ cd ../Client
$ dotnet add package ReactiveProperty
$ cd ../..
$ dotnet sln add ScrapingTestPwa/Server ScrapingTestPwa/Client

モバイルアプリ(ScrapingTestMaui

きました。MAUIです!
でもでも時間切れでした!
本当はShell使ってTabで切り替え、スクロールしていくと下にタイトル追加、とかやりたかったんですが…。
眠さに負けました…。(ちゃんと計画立てとけよ、という話)

$ mkdir ScrapingTestMaui ; cd ScrapingTestMaui
$ dotnet new maui
$ dotnet add package ReactiveProperty
$ dotnet add reference ../ScrapingTestCommon
$ cd ..
$ dotnet sln add ScrapingTestMaui

MAUIのインストールなどは以前の記事見てくださいね。

おわりに

と、こんな風に.NET6ならいろいろなアプリを作れます。
あとはあなた次第、ということで。

7
5
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
7
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?