C#かVB.NETかで迷っているなら、C#にするべきです。
VB.NETを使う明確な理由があるならば、VB.NETを使用した方がいいこともあります。しかし、迷っているくらいならば、C#にすべきです。
理由
VBは言語としての進化が停止されることとなり、今後新しい機能がサポートされない可能性があるからです。
これはMicrosoftの開発ブログで、2020年3月に発表されています。
- Visual Basic support planned for .NET 5.0 | Visual Basic Blog
- 参考日本語記事: 「Visual Basic」は.NET Coreでもサポートを継続 ~ただし、言語としての発展は終わり - 窓の杜
Going forward, we do not plan to evolve Visual Basic as a language. This supports language stability and maintains compatibility between the .NET Core and .NET Framework versions of Visual Basic. Future features of .NET Core that require language changes may not be supported in Visual Basic.
(抄訳)
今後VBを言語として進化させる予定はない。
言語を変更する必要のあるような新しい機能は、VBではサポートされない可能性がある。
従来の機能がサポートされなくなったり、言語が非推奨になるというわけではありません。サポートされない可能性のある新しい機能というものがいつ現れるのか、あるいはずっと現れないのかも、確実なことはわかりません。
しかし、サポートされない可能性があると公式に明言されている以上、それはリスクであり、C#と比べれば明確なデメリットです。
そのデメリットを超えるメリットがある場合以外では、VB.NETを選択する理由がありません。
VB.NETを選択するメリットがある場合とは
1. C#(や他の言語)を選択するコストが非常に高い状況にあり、今後新しい機能が使えなくなる可能性を差し引いても、コストを抑えたい場合
- すでに大量のVB.NETのコードが存在し、それに対する修正を行う場合
- 疎結合な部分ならば、一部を別プロジェクトに切り出して部分的にC#に移行することもできます
- チームメンバーがVB.NET以外に習熟していない場合
- そのプロジェクトはそれでいいとしても、将来的にそのままでよいかは検討すべきです
- 周辺ツールの都合で言語を変更できない場合
- 顧客や上司の指示で言語を変更できない場合
- 顧客や上司が上述のリスクを知らずに言っている可能性がある場合は確認した方がいいかもしれません
- プロジェクトの生存期間が非常に短い場合
- 「すぐ捨てるつもりのコードが思いの外重用されてしまった」はよくあることなので、やや説得力に欠けます
2. VB.NETそのものが目的であるとき
- VB.NETが好きで、あえて書いている場合
- ビジネスやチーム作業では自分の好みを理由にはできませんが、個人の趣味なら自由です
まとめ
- 従来通りのVB.NETは今後もサポートされるが、言語としての進化は公式に止まった
- VB.NETは将来的に新しい機能がサポートされない可能性がある
- それはリスクなので、VB.NETを選択する明確な理由がないなら、C#にすべき
補足①:この記事を書いた理由
2021年5月現在、「C# VB.NET」と検索すると、両者を比較したブログ記事やQ&Aサイトの回答がいくつも出てきます。
しかしそれらの多くは2年以上前に書かれたものであり、この記事で引用したVB.NETの進化停止について追記されていません。中には、進化停止の発表後に書かれているにも関わらず、その件に触れないままVB.NETを他者に勧めるような書き込みさえあります。(個人的に、それは非常に無責任だと思います。)
そういった古い情報が広まったままでは正しい判断ができない可能性があると考えて、この記事を書きました。
補足②:(私見)「VB.NETは入門者向け」と言われることがあったが、現在もそうかは疑問
これは私見です。
「プログラミング入門者に向いている言語」は、言語仕様だけでは決まりません。良いドキュメントや書籍があるか、参考になる品質の良いソースコードがたくさんあるか、助けになってくれるコミュニティがあるか、開発環境を整えるのが簡単か……など、言語そのもの以外の部分も非常に重要です。
その点において、VB.NETが入門者に勧められる豊かな環境かは、甚だ疑問です。
かつては、C#とVB.NETのコードサンプルを両方載せている解説サイトがたくさんありました。しかし十数年の間にVB.NETの解説は減少し、いまやMicrosoft公式のドキュメントすらC#のみになってきています。書籍やOSSプロジェクトの数もまるで比較になりません。
そして2020年3月の発表により、この傾向はもはや変わることがないと確定したと言えるでしょう。
.NET基盤のおかげでC#向けの情報を翻訳しながら学習することも可能ですが、それなら最初からC#を学習した方が早いです。
言語仕様がどうかは別にしても、少なくともこの環境は「入門者向け」とは言えないと思います。