このページは、祝 .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)
WinUI
だWindows 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サーバーのアプリです。
確か以前はController
とView
で出来上がってたと思ったのですが、これらがパッキングされるようになった(Pages/Index.cshtml
とPages/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ならいろいろなアプリを作れます。
あとはあなた次第、ということで。