Chapter 01

前書き

eagle
eagle
2021.12.26に更新

本書について

本書ではWindows環境にて、Visual Studio 2022と.NET 6を用いてWindows用デスクトップアプリケーション開発を行います。
開発言語にはF#を採用します。

本書では.NET MAUIに関しては触れないので注意してください。
※本書の執筆時点では.NET MAUIはプレビュー段階です。

本書で作成するアプリケーション


カウンターアプリケーション


疑似予約入力アプリケーション

本書の特長

The Elm Architectureに倣い、MVUアーキテクチャ(Model-View-Update)を部分的に採用します。
F#ではElmishに代表されるようにこのアーキテクチャに則った抽象がなされることが多いため、MVUに慣れ親しんでおくことは非常に重要です。
既にElm言語を習得している方にとっては馴染み深いでしょう。

本書の想定対象者

本書で使うプログラミングの技法は基本的には初歩的なものですが、それでもある程度独学でプログラミング学習を進められる方でないと読み切るのは難しいと想定されます。
例えば、本書ではF#の基本的文法は細かく解説せず、代わりに公式ドキュメントへのリンクを貼るに留めます。
したがって、まずは環境構築から初めてのアプリケーションまでを実際に読み進めていただいて、難易度が合っているかどうかを判断していただければと思います。

あるいは、既にF#を使用しており、何らかの形で周囲の人にF#を広めたいという方にも本書がお役に立つかもしれません。
私個人の経験から、新言語の習得の際にただ漠然と文法をなぞるだけで終わってしまい、実践的なアプリケーション作成に活かせずに終わってしまうということがありました。
本書ではまずはアプリケーションを作成するところを起点とし、それに必要な文法をその都度導入するというスタンスで進めていきます。
ただし、初学者には難しいところや文法の詳細については各々で適宜補足していただくことを前提としています。
私自身、それほどF#歴が特別長いわけではありませんので、より良い書き方がある場合はお知らせいただければ改善したいと思います。

なぜC#ではなくF#か?

F#は.NET系言語で唯一、関数型プログラミングを主軸においた開発言語です。
C#でも関数型プログラミングのエッセンスは取り入れられつつありますが、F#の生産性には敵いません。

例として、変数宣言がデフォルトでイミュータブル(不変)です。
部分適用とパイプライン演算子はC#の拡張メソッドよりも広く使い道があります。
判別共用体は時にインターフェースよりも便利に使用でき、F#のパターンマッチングは強力です。
そしてなによりも、F#コンパイラの型推論は強力で、自明な型注釈をほとんど強制されることなく型安全なコードを書くことができます。(自動ジェネリック化など。)

なぜC#ではなくF#を使うのかは既に語りつくされているトピックでもあります。以下の記事もお勧めです。

https://fsharpforfunandprofit.com/why-use-fsharp/

なぜHaskellではなくF#か?

やはり.NETエコシステムを利用できるというのが大きいです。
それに、F#の開発環境の構築はかなり容易です。

ただし、もちろん良いことばかりではなく、F#は型クラスに相当する機能が弱かったり、純粋関数型言語で無かったりとそれなりに弱点もあります。

なぜWindowsフォームか?

初学者にとって、画面を簡単に作れるというのは大きなアドバンテージであると考えたからです。
コンソールアプリは地味ですし、Webアプリケーション(特にフロントエンド側)を採用する場合も多かれ少なかれHTMLとCSSをセットで学ばなければなりません。
本書ではWindowsフォームのフォームデザイナを積極的に活用することにより、この問題をクリアしています。

Windowsフォームの将来性について

Windowsフォームを採用する上で気になるのはやはりその将来性でしょう。

https://github.com/dotnet/winforms

Windowsフォームは現在も開発が続けられており、.NET 5ではTaskDialogなど新機能が追加されたのが印象的です。利用者も多く、今のところ将来性について心配することはないと考えています。
ただし、WPFと同様にWindowsでしか動かないのでこの点には注意が必要です。
クロスプラットフォーム対応の必要がある場合はAvaloniaを検討すべきでしょう。

なぜ.NET 6か?

.NETは.NET Framework系と.NET Core系に分裂していた過去を持ちますが、それが.NET 5で統合されました。
.NET 6は統合後、初めてのLTS(長期サポート)バージョンとなります。この意味で重要度が高いです。
ただし、厳密な意味で.NET Frameworkの後継であるわけではありませんのでその点にはご注意ください。

本書を学んだ後の展望

本書を学んだ後はF#の経験を活かして他のアプリケーションフレームワークを試してみるのも良いでしょう。
MVUアーキテクチャさえ習得してしまえば、これらは比較的すぐに使いこなせるはずです。

  • Argu コマンドラインパーザー。ちょっとしたCLIツールの開発に。
  • Avalonia.FuncUI クロスプラットフォーム対応のデスクトップアプリ開発。
  • Saturn ASP.NET Coreを利用したWebアプリ(バックエンド)開発。
  • Feliz AltJSであるFableとJSの有名ライブラリReactを利用したWebアプリ(フロントエンド)開発。
  • Fabulous Xamarinを利用したモバイルアプリ開発。

なお、Fabulousは.NET MAUI対応が検討されています。

サポートについて

最後に、Zennではブックに対するコメントを残したり、バッジによるサポートをしたりできるようです。
本書のコードで改善の余地があるところなど、適宜アドバイスをいただければ改訂していく予定ですのでよろしくお願いいたします。

非同期処理以降の内容は現在執筆中ですが、いつ書き終わるかは未定です。別の本として公開するかもしれません。

カバーで使用しているロゴについて

https://foundation.fsharp.org/logo