🧩

F# を推したい

2024/07/31に公開

はじめに

 F# というプログラミング言語があります。世に出てからしばらく経つ[1]のですが、あまり流行っていませんし、流行る兆しも微妙な感じです[2]。F# は他のモダンな言語にも引けを取らないくらい魅力的で痒いところに手が届く言語なのですが、いかんせん知名度が低いのです。本記事では、そんな不遇言語である F# を推したいと思います😌

F# って何?

F# はマイクロソフトが開発した .NET 向けのマルチパラダイムプログラミング言語である。
(引用: Wikipedia)

 要約すると、スクリプト言語でありコンパイル言語でもある関数型プログラミングもオブジェクト指向プログラミングもサポートするクロスプラットフォーム対応のプログラミング言語です。 Python や Ruby のようなスクリプト言語としても、 Java や C++ のようなコンパイル言語としても扱うことができます。関数型で直感的にスクリプトやツールを書くのはもちろんのこと、既存の C# 向けライブラリを利用したり、シングルバイナリでコンパイルすることも可能です。 NuGet パッケージも作れます。昔と違って最近の .NET はクロスプラットフォームなので、Windows + Visual Studio じゃなくても書けちゃいます[3]

スクリプトが書ける!

 基本的に VSCode + Ionide が F# 開発におけるデファクトスタンダードのようです。この Ionide という拡張機能は、インテリセンスやシンタックスハイライト、エラー検出などを一任してくれます。 dotnet fsi で REPL を使えるほか、 .fsx というスクリプトファイルに記述することもできます。ただのスクリプトにとどまらず、 REPL や .fsx でゴリゴリと処理を書きつつ、ある程度固まったら Program.fs 等に記述してコンパイルする、といった使い方もできます。比較的厳格な言語設計ではありますが、不自由なく開発できるのがありがたいです🙏

コマンドラインツール ( CLI ) が簡単に書ける!

 Rust の clap や Golang の Cobra のように、 F# にも CLI を手軽に作成できる便利なライブラリがいくつもあります。私は FSharp.SystemCommandLine というライブラリを利用しており、CLI を書くときは毎回お世話になっています。他の言語にも言えることですが、このようなライブラリの存在は本当にありがたいですね! 頻繁に使うスクリプトを CLI としてコンパイルするなど、 F# ならではのメリットもあります😤

Forms も WPF も ASP.NET も書ける!

WinFormFs という WinForms のラッパーや、 Elmish という WPF を書けるようなライブラリもあります。 ASP.NET でも、ちょっとした API などは F# のほうが書きやすかったりします。とどのつまり、 C# でできることはほぼ F# でもできる[4]、と考えて差し支えないでしょう💪

F# の魅力

 さて、 Hello, World や機能紹介をしようかとも考えたのですが、すでに愛に満ち溢れた紹介記事や書籍がありますゆえ、そちらをご紹介させていただきます。ここで私があれこれいうよりも、よっぽど F# の魅力を存分に感じていただけるはずなので……😇


https://qiita.com/cannorin/items/59d79cc9a3b64c761cd4
 見やすく、わかりやすく、 F# の魅力が語られています。私はこの記事を読んで F# に興味を持ち、無事沼に落ちました🫠


https://zenn.dev/midoliy/books/85dd010d0b2ce7
 Zenn の書籍からも一冊ご紹介させていただきます。後述の F# リファレンスの運営もされている方の著書です。なんと全編無料! みんな読もう。表紙も可愛い🥰

参考資料

 F# を始めるにあたって確実に参考になるであろう資料も併せていくつかご紹介いたします。なお、本記事は上記2つを含めたこれらの資料群を参考に執筆しており、類似・重複した内容等に関しましてはすべて資料を出典とさせていただきます。不都合等ございましたらお手数ですがご一報ください💦


https://swlaschin.gitbooks.io/fsharpforfunandprofit/content/
 体系的に言語仕様を把握できます📓


http://lowlander256.web.fc2.com/fsharp/
 少し古いページですが、関数型プログラミングの書き方について丁寧に解説されています💡


https://midoliy.com/content/fsharp/
 Microsoft 公式ドキュメントをもとに、より明瞭に解説されています🔎


https://karino2.github.io/2020/12/10/fsharp_for_zatuyou.html
 主にスクリプト言語としての側面から魅力を語られています📄


https://qiita.com/kxkx5150/items/febceda472f6e3e356a5
 F# の紹介記事であり、ファミコン用エミュレータを自作されています🎮


https://gist.github.com/sheepla/4fcb01d4ed7ae682817edd83f403b8c5
 前述の CLI 用ライブラリについて日本語で解説されています💻

あとがき

 F# は書籍が少なく学習コストが高いと感じられるかもしれませんが、 Microsoft の公式ドキュメントを皮切りに WWW 上にチュートリアルやリファレンスが揃っているので、実際はそこまでの障壁はないはずです。また、本記事は他の言語を否定する意図は一切ありませんし、もちろん私も他の言語も書きます。 F# がもう少しだけ日の目を浴びてほしい! という勝手なワガママをお許しください。ともあれ、 C# 向けのライブラリが利用でき、スクリプトも書け、コンパイルもでき、何より関数型プログラムは書くのが楽しいのです。ぜひ一人でも多くの方に、 F# での関数型プログラミングを体験してみていただければと思います[5]。最後までご覧いただきありがとうございました🤗

脚注
  1. 2005年にリリース、 Visual Studio 2010から標準搭載となりました。意外にも歴史は深いんです。 ↩︎

  2. Zenn 内の記事を見ても、2024年7月末時点で C# が1,300超に対して F# は100にも満たないです。 ↩︎

  3. 私は極力キーボードから手を離したくない、ターミナルから離れたくない人間なので、 Windows ですが NeoVim で開発しています。 LSP などで整えてあげると VSCode と比較しても遜色ないものになります。 ↩︎

  4. Unity については書けなくもないようですが、あえて F# を利用するメリットも希薄なので、素直に C# で書いたほうがいいかもです。 ↩︎

  5. Haskell ほどモナモナしていないので、専門の方には物足りないかもしれませんが……。 ↩︎

Discussion