【.NET】Microsoft、Visual Basicの進化やめるってよ

# はじめに
Microsoftの「The Visual Basic Team」のブログが2020年3月11日に久しぶりに更新されました。

>Visual Basicを使用する主な利点の1つは、言語が非常に長い間安定していることです。Visual Basicを使用している多くのプログラマーは、その安定性と記述スタイルが重要であることを示しています。今後、Visual Basicを言語として進化させる予定はありません。
[Visual Basic support planned for .NET 5.0](https://devblogs.microsoft.com/vbteam/visual-basic-support-planned-for-net-5-0/)

.NET 5.0以降もVisual Basicのサポートされるのですが、Visual Basicの言語として進化はやめてしまうようです。
[Visual Basic .NET 5 blog post #497](https://github.com/dotnet/vblang/issues/497)

私は、[Microsoft MVP](https://mvp.microsoft.com/ja-jp/)(2010〜2012)をVisual Basic(現在は言語のカテゴリは無くなった)で取らせて頂いたので、恩義として[Visual Basic Advent Calendar](https://qiita.com/advent-calendar/2019/vb)を2014年から引き継いで主催しています。毎年12/1に振り返りの記事を書くためにウォッチしてきました。Visual Basicの言語として進化はやめるという発表はとても残念です。

# .NET 5.0 とは
.NET Framework は、.NET Framework 4.8 が最新版でこれが最後になります。現在、クロスプラットフォーム対応のフレームワークとして、[.NET Core](https://ja.wikipedia.org/wiki/.NET_Core)を開発しており、.NET Core 3.1(現時点:2020/03/15)が最新版となっています。
.NET Core 4 は Framework 4.X と紛らわしいから欠番にして、次は「5」徐々に .NET Core に一本化して、名前も「.NET」になります。予定では、2020年11月リリースとなります。以降は1年ごとにバージョン番号(.NET 6,7,8...)が上がって行きます。

# WinForms / WPFの対応状況と今後
.NET Core 3.0(2019/09/23リリース)で、Windows Forms や WPF アプリケーションがサポートされましたが、Windows Formsデザイナはまだ対応できてませんでした。.NET Core 3.1(2019/12/03リリース) と Visual Studio 16.5 Preview 1 以降でオプションでプレビュー機能を有効にする必要がありますが、Windows Formsデザイナが表示されるようになりました。

しかし、Visual Basicに関してはサポート対象外になったため、WinForms / WPFのプロジェクトテンプレートが外されました。
自分の方で、ボタンを配置しただけの簡易なアプリケーションを試して動作するのは確認しましたが、マイクロソフトが公式にサポートしていない以上は仕事では使えません。

* [.NET Core 3.x + VB でも WinForms がしたい！](https://qiita.com/yaju/items/a52087c84d27d426fe01)
* [.NET Core 3.x + VB でも Wpf がしたい！](https://qiita.com/yaju/items/23e108ad2e1c49962f27)

.NET 5.0では、WinForms / WPF をVisual Basicでも正式に対応すると今回の記事でアナウンスしたと思っています。

* [Visual Basic support planned for .NET 5.0](https://devblogs.microsoft.com/vbteam/visual-basic-support-planned-for-net-5-0/)
* [Add VB.NET Support to .Net Core 3 WPF/Windows Forms Projects](https://developercommunity.visualstudio.com/idea/750543/add-visual-basic-support-to-net-core-3-wpfwindows.html)

# 言語の進化とは
これまでの大きな進化としてLINQやラムダ式やAsync/Awaitの非同期などC#と共に追加されてきました。
直近の小さな進化として、タプルや2進数リテラルや数字区切り文字などの新機能の追加がありました。

これまでの新機能一覧は下記に記載しています。
[Visual Basic 2017の新機能](https://qiita.com/yaju/items/2b07b54444707ee9abae)

Visual Basicの改善点を有志の方々がいろいろ提案していました。
**今回の進化をやめるという発表は、これらの提案を受け付けないことになります。**

* [Visual Basic Community ＃250](https://github.com/dotnet/vblang/issues/250)
* [dotnet-vblang](https://github.com/dotnet/vblang/issues?page=4&q=is%3Aissue+is%3Aopen)
* [Language-VBのIssues](https://github.com/dotnet/roslyn/issues?q=is%3Aissue+is%3Aopen+label%3ALanguage-VB)

改善案の一例として、パターンマッチングがあります。
[Pattern Matching #124](https://github.com/dotnet/vblang/issues/124)、[Pattern Matching #172](https://github.com/dotnet/vblang/issues/172)

数値や文字列だけであれば、今でもSelect Case文で問題ありません。しかし、型によるパターンマッチングは出来ません。

```vb
Private Sub Button_Click(sender As Object, e As EventArgs) Handles OKButton.Click, CancelButton.Click

    Select Case sender
        Case Is OKButton
            DialogResult = DialogResult.OK
            Close()
        Case Is CancelButton
            DialogResult = DialogResult.Cancel
            Close()
        Case Is Nothing
            Throw New NullReferenceException("sender")
        Case Else
            Debug.Fail("Unknown sender.")
    End Select      
End Sub
```

# 最後に
正直言えば、ついに来てしまったという感じです。
InfoQの「[.NETの将来に関するMicrosoftの計画](https://www.infoq.com/jp/news/2017/02/strategic-net/)」の記事(2017年2月)によれば、将来の設計計画ではC#の設計からVBを切り離し、新しい開発者の.NETのファーストクラス言語としての位置付けにするというのが現実になったということです。
C#は国際標準化機構 (ISO) によって標準化されているのに、Visual Basicはマイクロソフトの独自の言語ですからマイクロソフトの胸先三寸でどうにでもなってしまう。

英語圏からすれば、Visual Basicは最初に使用する言語としては分かりやすいのかも知れませんが、日本語を主とする日本では、最初の使用言語をC#にしても違和感はないです。
Visual Basicの改修案件はともかく、スクラッチ開発であれば今回の発表を理由の1つとして C#一択にしても構わないでしょう。

**Visual Basicの言語の進化はやめるけどサポートは引き続き行なわれます。**