Visual Basic 2017年の振り返り


# はじめに
これは、[Visual Basic Advent Calendar 2017](https://qiita.com/advent-calendar/2017/vb)の1日目の記事となります。

何を書こうか迷ったのですが、今年はVisual Studio 2017が3月7日にリリースされたこともあり、Visual Basicに関連することを、つらつらと書いてみます。

# VBの進化の歴史
昨年(2016年05月20日)、Visual Basicは1991年の誕生から25周年を迎えましたので、今年は26周年となります。

* [Happy 25th Birthday, VB! - .NET Blog](https://blogs.msdn.microsoft.com/dotnet/2016/05/20/happy-25th-birthday-vb/)
* [Microsoft marks Visual Basic’s 25th birthday, kicks off marathon celebration - WinBeta](https://www.onmsft.com/news/microsoft-marks-visual-basics-25th-birthday-kicks-off-marathon-celebration)
* [Visual Basicが25周年を迎える - スラド](https://developers.srad.jp/story/16/05/21/1943233/)

今までのVisual Basicの進化の歴史を整理してみます。一部[Visual Basic wikipedia](https://ja.wikipedia.org/wiki/Microsoft_Visual_Basic)から抜粋

|製品名|リリース|内部バージョン|C#|.NET Framework|変更点、備考|
|:---|:---|:---|:---|:---|:---|
|Visual Basic 1.0|1991|1.0 |  |  |オブジェクト指向の基本的な部分を実装。日本では発売されなかった。|
|Visual Basic for MS-DOS|1992|1.0 |  |  |Windows版との互換性は低いが、DOS版QuickBASICの後継バージョンとして使える。PC-98用の日本語版も発売されていた。|
|Visual Basic 2.0|1992|2.0 |  |  |OLE, ODBC対応。日本語版は1993年で当初はODBC対応はなし。|
|Visual Basic 3.0|1993|3.0 |  |  |日本では発売されなかった。|
|Visual Basic 4.0|1995|4.0 |  |  |32 ビット版と 16 ビット版がある。|
|Visual Basic 5.0 CCE|  |5.0 |  |  |ActiveXコントロール作成専用。フリー。Visual Basic 5.0のプロトタイプ。|
|Visual Basic 5.0|1997 |5.0 |  |  |Win32 ネイティブコードへのコンパイル機能をサポート。|
|Visual Basic 6.0|1998|6.0 |  |  |旧来型 Visual Basic (Win32 ネイティブ) の最後のバージョン。<br>歴代VBの名作、未だに使われる|	
|Visual Basic .NET|2002|7.0|1.0| 1.0|初めての.NET|
|Visual Basic .NET 2003|2003|7.1|1.1|1.1|安定してきた.NET|
|Visual Basic 2005|2005|8.0|2.0|2.0,(3.0)|[2005の新機能 - MSDN](https://msdn.microsoft.com/ja-jp/library/we86c8x2(v=vs.80).aspx)|
|Visual Basic 2008|2007|9.0|3.0|3.5,3.0,2.0|[2008の新機能 - MSDN](https://msdn.microsoft.com/ja-jp/library/y17w47af(v=vs.110).aspx)|
|Visual Basic 2010|2010|10.0|4.0|4.0|[2010の新機能 - MSDN](https://msdn.microsoft.com/ja-jp/library/we86c8x2(v=vs.100).aspx)|
|Visual Basic 2012|2012|11.0|5.0|4.5|[2012の新機能 - MSDN](https://msdn.microsoft.com/ja-jp/library/we86c8x2(v=vs.110).aspx?f=255&MSPPError=-2147217396)|
|Visual Basic 2013 |2013|12.0|  |4.5.1|内部変更のみと思われる|
|Visual Basic 2015|2015|14.0|6.0|4.6|[2015の新機能 - MSDN](https://msdn.microsoft.com/ja-jp/library/we86c8x2.aspx)|
|Visual Basic 2017|2017|15.0|7.0|4.6.1,4.6.2|[2017の新機能 - MSDN](https://www.visualstudio.com/en-us/news/releasenotes/vs2017-relnotes#cshappvb)<br>[Visual Basic 2017の新機能](https://qiita.com/yaju/items/2b07b54444707ee9abae)|

※内部バージョン13.0は、[忌み番号のためスキップ](http://qiita.com/yaju/items/4353f621cff3bcc7ed72)されています。

## リリースサイクルの短期化
今後はリリースサイクルの短期化によりマイナーリリースされていくようになります。
C# 7／VB 15（Visual Basic 15）に実装される予定の機能が以下のページにまとまっているわけですが、現状はC#7のマイナーリリースのみとなっています。
[Language Feature Status](https://github.com/dotnet/roslyn/blob/master/docs/Language%20Feature%20Status.md)

Visual BasicタグのIssuesは以下のページとなります。
[Language-VBのIssues](https://github.com/dotnet/roslyn/issues?q=is%3Aissue+is%3Aopen+label%3ALanguage-VB)


* [見えてきたC# 7： C#の短期リリースサイクル化](http://www.buildinsider.net/column/iwanaga-nobuyuki/008)
* [C# 7.1： 半年でのマイナーリリース](http://www.buildinsider.net/column/iwanaga-nobuyuki/017)

## .NET Core 2.0でVisual Basicをサポート
.NET Core 1ではVisual Basicがサポートされず、多くのVisual Basic開発者は落胆したが、.NET Core 2では一転して、Visual Basicがサポートが追加された。
Visual Studio 2017 version 15.3 にて .NET Core 2.0が使用できる。

* [.NET Core の新機能](https://docs.microsoft.com/ja-jp/dotnet/core/whats-new/)
* [Visual Studio 2017 Release Notes](https://www.visualstudio.com/en-us/news/releasenotes/vs2017-relnotes)

# ターニングポイント
私事ですが、仕事でDelphi5で開発しているアプリケーションの改善をやることがあります。Delphi5は1999年に発売されたもので、その当時はVB6.0よりDelphiと盛り上がっていた時期だと思います。その当時から5年間頃までに開発されたアプリケーションが未だに使用されています。使用しているお客さまからすれば動作に問題なければ関係ないですけどね。来年から.NETにリプレースしていく予定です。

そのDelphiを開発した[アンダース・ヘルスバーグ氏](https://ja.wikipedia.org/wiki/%E3%82%A2%E3%83%B3%E3%83%80%E3%83%BC%E3%82%B9%E3%83%BB%E3%83%98%E3%83%AB%E3%82%B9%E3%83%90%E3%83%BC%E3%82%B0)が、BorlandからMicrosoftに1996年に移り、J++の作業後に2000年からC#言語の設計チームとなり2002年4月にC# 1.0をリリースします。

マイクロソフトでは、VS 2008までは言語ごとに開発チームがあり、各言語の特徴に応じた最適な機能が実装できるという利点があったが、その一方で「C#で実装されているものがVBで実装されない」といった言語ごとの格差が発生することになってしまった。
VS 2010の開発に当たり各言語チームを統合し、「Visual Studio Managed Languages Team」という1つのチームにした。また、C#とVBはアンダース・ヘルスバーグ氏が2つの言語を同時に設計することにより、格差がなくなるようにしました。参照:[Visual Basic 2010の新機能](http://www.atmarkit.co.jp/fdotnet/chushin/vb2010features_01/vb2010features_01_01.html)
これにより、機能がC#に近づいた。


VS 2015の.NETコンパイラープラットフォーム「Roslyn(ロズリン)」が採用されました。Roslynでは、ブラックボックス化されたC# や Visual Basicのコード解析やオブジェクト生成のAPI等を公開しました、更に[オープンソース化](https://blogs.msdn.microsoft.com/visualstudio_jpn/2015/04/06/roslyn-1/)で[GitHub](https://github.com/dotnet/roslyn/)を使用しています。
当時、C#/VB間のソースコード自動変換がコピーアンドペーストするだけで自動的に変換されるデモが行われました。C#をコンパイル後にVisual Basicに変換されるために、正確にしかも必ず動作するように変換されるわけです。
これにより、人気が高いC#の開発が進むことになり、より引き離されていくようになった気がします。ただ、 .NET Core 2.0でVisual Basicがサポートされるようになったのも、Roslynがあればこそです。

# 最後に
* [Visual Basicの今後 - InfoQ](https://www.infoq.com/jp/news/2017/03/vb-strategy)
* [.NETの将来に関するMicrosoftの計画 - InfoQ](https://www.infoq.com/jp/news/2017/02/strategic-net)

上記記事によれば、Visual Basicにさほど明るい話題はなさそうです。
将来の設計計画ではC#の設計からVBを切り離し、新しい開発者の.NETのファーストクラス言語としての位置付けとのこと。

弟分であったC#は「出る杭は打たれるが、出過ぎた杭は打たれない。」というほど、出過ぎた杭になってしまい、Visual Basic vs C#なんて話題が懐かしむくらいになってしまいました。
また、さらに弟分の[F#は量子コンピューター向け言語で使われるかも](http://ascii.jp/elem/000/001/569/1569477/)とのことで、未来があります。

兄貴分のVisual Basicは、もう大人になったので未来ある初学者に向けての教育向け言語として、やっていくことになるでしょう。なーんてね！