Visual Basic .NET

Visual Basic .NET （ヴィジュアル ベーシック ドットネット、VB.NET）は、マイクロソフトが開発した、.NETの実行基盤（共通言語ランタイム、CLR）上で動作するオブジェクト指向プログラミング言語である。

2002年に Visual Basic 6.0 の後継として発表されたが、.NET の設計原則に基づいて新たに設計されたため、旧バージョンとの互換性はない。C# とほぼ同時期に導入された .NET 言語の一つである。

 概説 

2000年代初頭、マイクロソフトの「.NET構想」を実現するためのアプリケーション開発・実行環境「.NET Framework」に対応するプログラミング言語として、C#とともにVB.NETが登場したVB2005は.NETへの移行を加速できるのか！？（1/2） - ＠IT。

C++、Java、C#などのC系言語と比較して、VB/VB.NETは文法が自然言語に近いため、。しかし初心者向けの言語というわけではなく、本格的なソフトウェア開発にも使用できる。

Microsoft Windows用のアプリケーション、Webアプリケーション、モバイル向けアプリケーションなどを開発できる。利用可能なVisual StudioプロジェクトテンプレートもVisual C#とほぼ同様である。

アプリケーション実行コードはWindows専用の.NET Frameworkまたはクロスプラットフォームな.NET（.NET Core）上で動作するほか、C#と同等の本格的なオブジェクト指向が取り入れられるなど、前バージョンのVisual Basic 6.0からの変更点は多く両者の互換性は低い。

VB.NETに移行できない旧VB製アプリケーションを延命するため、VB.NETリリース後も旧開発環境やランタイムのサポートが条件付きで継続された。また、VB.NETには、旧VBからの移行を容易にするアップグレードウィザードVB 6.0 ユーザーのための VB .NET 移行ガイド - アップグレードウィザードの利用 | Microsoft Learnや、従来の一部機能を実現する互換ライブラリが実装されているITレポート（動向／解説） - 【速報】これがニューVBだ！：ITproVisual Basic 6.0 互換性ライブラリ | Microsoft Learn。ただし、Microsoft.VisualBasic.Compatibility.VB6名前空間にあるクラスは、VB 6.0から自動的にアップグレードするツールによって使用される目的で用意されていたもので、.NET 4では非推奨となっており、また32ビットプロセスでのみサポートされているMicrosoft.VisualBasic.Compatibility.VB6.<member> is obsolete and supported within 32 bit processes only | Microsoft Learn。アップグレードウィザードはVisual Studio 2010以降はサポートされていない。

VB.NETのコンパイラはマイクロソフトから無料で提供されているので、Windows付属のメモ帳等でプログラミングすることも可能だが、Visual Studioなどの統合開発環境を使うのが一般的である。マイクロソフトによるVB.NET専用の統合開発環境およびVisual C#/Visual C++なども利用可能なVisual Studio製品は、かつては旧VBと同様に有償でのみ提供されていたが、バージョン2005以降は機能制限版であるExpressエディションが、またバージョン2013以降は（利用上のライセンス制約が強いものの）Professionalエディション相当の機能を持つCommunityエディションが、それぞれ無償で配布されている。

姉妹言語であるC#やF#に比べると、VB.NETにおける同等の新しい言語機能サポートなどは遅れる傾向にある。.NET Frameworkの後継かつクロスプラットフォーム版である.NET Coreの言語サポートについても、.NET Core 1.x時点ではC#とF#のみであり、.NET Core 2.0でVB.NETのサポートが追加された.NET Core 2.0 Previewリリース、Visual BasicをサポートWhat's new in .NET Core 2.0 | Microsoft Learn。

マイクロソフトは2020年11月、.NET Coreの将来的な機能のうち、言語仕様の変更を伴うものについてはVB.NETではサポートされない可能性があることを発表したVisual Basic support planned for .NET 5.0 - Visual Basic Blog。また2023年2月、C#は.NETとともに言語仕様を進化させ続けること、F#はコミュニティと協力しながら進化させていくこと、そしてVB.NETには今後新しい言語構文を追加せず、安定性に重きを置く方針であることを発表したUpdate to the .NET language strategy - .NET Blog。

 実行速度 
旧VBはVisual C++と比較して実行速度が遅いこともあったが、.NET FrameworkベースになったVB.NETでは、コンパイラが出力するコードはVisual C#等と同じくCILと呼ばれる中間表現であり、他の.NET言語と比較して速度は遜色ない。CILは実行時にJITコンパイラにより最適化されたネイティブコードに変換される。

Visual C++のようにコンパイル時にターゲットプロセッサ固有の完全なネイティブコードを生成する方式と比べて、JIT方式は移植性が高いものの、アプリケーションの起動に多少時間がかかるなどの問題点もある。そのような問題への解決策として、.NET Frameworkや.NET Coreでは、制限付きではあるがネイティブコードを生成する事前コンパイル技術もサポートしている。

 DirectXのサポート 
Direct3Dなどのマルチメディアコンポーネントを含むMicrosoft DirectXに関しては、C#やVB.NETなどの.NET言語からDirectX 9を操作するための.NETマネージ ライブラリである「Managed DirectX」が、DirectX SDKおよびDirectXエンドユーザーランタイムに同梱される形で提供されていた。なお、XNAのリリースに伴い、Managed DirectXの更新は終了したが、そのXNAもすでに更新が終了している。「Windows API Code Pack for Microsoft .NET Framework」と呼ばれるWindows APIおよびDirectXを含むCOMコンポーネントの.NET用ラッパーライブラリ、もしくはオープンソースとして開発・公開されているSlimDXライブラリやSharpDXライブラリなどを使用することで、.NET言語からもDirectX 9/10/11/12を利用することが可能だが、いずれも更新が停止しており、その後に追加された最新の機能を利用することはできない。

C++/CLIなどのグルー言語により独自のラッパーを明示的に作成することで、.NET言語からDirectXを間接的に利用することも可能である。Windowsランタイム環境であれば、やを使ってラップする方法もある。

 コード例 
以下はコンソールに"Hello, World!"と出力する例である。
Module Module1
    Sub Main()
        Console.WriteLine("Hello, World!")
    End Sub
End Module

旧VBではコンソールアプリケーションの開発は想定されておらず、基本的にGUIアプリケーションの開発のみをサポートしていたが、VB.NETはC#と同じく.NET基本クラスライブラリの全機能にアクセスでき、より汎用的な言語となった。

 旧Visual Basicとの比較 
以下は旧VBとVB.NETの構文の類似点を示したサンプルコードである。いずれもメッセージボックスに"Hello, World"のメッセージとOKボタンを表示させるものである。

旧Visual Basicのコード例:
Private Sub Command1_Click()
    MsgBox "Hello, World"
End Sub

Visual Basic .NETのコード例:
'Imports System.Windows.Forms ' Windows Forms の場合。
'Imports System.Windows ' WPF の場合。
Private Sub Button1_Click(ByVal sender As System.Object, _
              ByVal e As System.EventArgs) Handles Button1.Click
    MessageBox.Show("Hello, World")
End Sub
VB.NETでは、GUIフレームワークにWindows Formsを用いるか、それともWPFを用いるかによって、使用できるMessageBoxクラスの属する名前空間が変わってくる。

旧VBやVBScriptMsgBox 関数 | Microsoft Learnバージョン情報 (VBScript) | Microsoft Learnに実装されていた旧MsgBox関数などの互換機能はライブラリによってサポートされているMsgBox 関数 (Visual Basic) | Microsoft Learn第6回　VB開発者が最新.NET Frameworkを効率よく習得する方法 － ＠ITが、以下のように()を使ったメソッド呼び出しの形で記述しなければならない。
Imports Microsoft.VisualBasic.Compatibility ' ファイル先頭に記述する。
Private Sub Button1_Click(ByVal sender As System.Object, _
              ByVal e As System.EventArgs) Handles Button1.Click
    MsgBox("Hello, World")
End Sub

 オブジェクト指向 
VB6ではクラスモジュールの定義、メンバー変数やメソッドのカプセル化、インターフェイスの実装によるポリモーフィズムをサポートしていた。ただしクラスの継承はサポートせず、オブジェクト指向プログラミングを完全サポートしているとは言い難かった。VB.NETではクラス継承がサポートされ、本格的なオブジェクト指向言語となった。

 .NET Frameworkライブラリ 
VB6では固有のステートメントでフォームの制御や文字列の操作をプログラミングしていたが、VB.NETではC#などと共通に使われる.NET Frameworkの標準ライブラリに従ったプログラミングが必要となった。このため、旧VBプログラマのノウハウが通用しにくい状況が生まれた。。

 エラー処理 
VB6ではエラー発生時にOn Error GoTo文によって、メソッド内に記述されたエラー処理にジャンプさせる方式であった。VB.NETではC#やJavaなどと同様に、Try - Catch - Finallyによる例外処理を記述できる。これによって呼び出し先メソッド内部で生じたエラーを、呼び出し元メソッドで一括して取り扱うことができるなど、プログラムの柔軟性が増した。

 固定長文字列の廃止 
他の.NET言語との互換性確保のためVB 6.0 ユーザーのための VB .NET 移行ガイド - 固定長文字列 | Microsoft Learn、固定長文字列は（基本データ型としては）サポートされなくなった。Visual Basic 6.0互換機能としてMicrosoft.VisualBasic.Compatibility.VB6.FixedLengthStringクラスFixedLengthString Class (Microsoft.VisualBasic.Compatibility.VB6) | Microsoft Learnが用意されているが、

 歴史 
バージョン7.xに限り「Visual Basic .NET」と称しているが、従来のように「Visual Basic」と名称が改められた8.0以降もVB.NETの系列であることに違いはない。Microsoft.VisualBasic.dll、vbc.exe、Visual Studio IDEのバージョン情報ダイアログに見られるように、製品バージョンおよび内部バージョンはVisual Studioと同様のバージョン番号が割り当てられている。内部バージョン13は忌み番のためスキップされた。

+ バージョンの履歴 製品名        備考 Visual Basic .NET  2002  7.0  2002年  言語仕様の大幅変更（完全なオブジェクト指向）。実行環境に .NET Framework 1.0 を採用。   2003  7.1  2003年  .NET Framework 1.1 に対応。 Visual Basic 2005  2005  8.0  2005年  .NET Framework 2.0 に対応。 Visual Basic 2008  2008  9.0  2007年  LINQやラムダ式の導入など言語機能を強化。.NET Framework 3.5 に対応。 Visual Basic 2010201010.02010年.NET Framework 4.0 に対応。 Visual Basic 2012201211.02012年.NET Framework 4.5 に対応。Async/Awaitの導入。 Visual Basic 2013201312.02013年.NET Framework 4.5.1 に対応。 Visual Basic 2015201514.02015年.NET Framework 4.6 に対応。 Visual Basic 2017201715.0, 15.3, 15.5, 15.82017年 Visual Basic 2019201916.02019年 .NET Core対応に重点を置く。

 Visual Basic .NET (2002) (VB.NET 7.0) 
2002年に、Visual Basicを基に本格的なオブジェクト指向プログラミングの概念・機能を取り入れた新しい言語であるVisual Basic .NETの開発環境・処理系として、Microsoft Visual Studio .NET (Microsoft Visual Basic .NET) がリリースされた。VB.NETはVB6の後継言語とされ、マイクロソフト社の.NET Frameworkという新しい技術基盤に対応している。対応する.NETのバージョンは.NET Framework 1.0。

VB.NETは新たにウェブサーバ用のプログラム、Web用のプログラムが開発できるなどのネットワーク開発機能が追加された。VB6の後継といっても、豊富なデバッグ機能が追加されたり、中間コード形式の採用といった言語設計思想そのものが変わったりするなど、様々な点で大幅な機能の追加および削除が行われた。なお、VB6ではサポートされていたエディット＆コンティニュー機能は、VB.NETには搭載されていなかった。

 Visual Basic .NET 2003 (VB.NET 7.1) 
対応する.NETのバージョンは.NET Framework 1.1。

 Visual Basic 2005 (VB 8.0) 
製品名称からは「.NET」という名前がなくなったが、上記のVB.NETと連続性がある言語である。言語仕様が強化され、C# 2.0同様にジェネリックの要素が導入されたほか、パーシャルクラスや演算子のオーバーロードなどがサポートされた。また、開発環境も大きく強化されている。

対応する.NETのバージョンは.NET Framework 2.0であるが、Visual Studio用の拡張をインストールすることで.NET Framework 3.0対応アプリケーションの開発も可能になる。

 Visual Basic 2008 (VB 9.0) 
同時期にリリースされたC# 3.0に合わせて言語仕様が強化され、構造化照会構文であるLINQや、ラムダ式、匿名型などの要素が追加された。
対応する.NETのバージョンは.NET Framework 3.5（.NET 3.5は3.0および2.0の完全なスーパーセットのため、3.0および2.0のアプリケーション開発も可能となっている）。

 Visual Basic 2010 (VB 10.0) 
対応する.NETのバージョンは.NET Framework 4.0（3.5、3.0、2.0での開発も可能）。

C#の言語設計者として知られるアンダース・ヘルスバーグ氏が設計に携わり、VBとC#との間の言語間の格差の低減が図られるようになった VB.NETに未来はあるのか？。

 Visual Basic 2012 (VB 11.0) 
.NET Framework 4.5とともに公開。Visual Studio 2012に同梱される。

C# 5.0同様、非同期プログラミングを言語仕様レベルでサポートするAsync/Await構文を導入した。

 Visual Basic 2013 (VB 12.0) 
.NET Framework 4.5.1とともに公開。Visual Studio 2013に同梱される。Developer Packをインストールすることで.NET Framework 4.5.2対応アプリケーションの開発も可能になるDownload Microsoft .NET Framework 4.5.2 Developer Pack for Windows Vista SP2, Windows 7 SP1, Windows 8, Windows 8.1, Windows Server 2008 SP2 Windows Server 2008 R2 SP1, Windows Server 2012 and Windows Server 2012 R2 from Official Microsoft Download Center。

 Visual Basic 2015 (VB 14.0) 
2015年に.NET Framework 4.6とともに公開。Visual Studio 2015に同梱される。Roslynと呼ばれるコンパイラレイヤーにより、Visual C#と同等のIDE機能を備えるに至ったVisual Studio 2015の新機能“Roslyn”とは - Build Insider。

VB 14の主要な新機能は下記のとおり。
 Null値反映演算子 ?.
 複数行の文字列リテラル
 NameOf演算子
 文字列補間
 行末コメント

 Visual Basic 2017 (VB 15.x) 
2017年にVisual Studio 2017とともに公開。15.0、15.3、15.5、15.8のリビジョンで新しいVisual Basic 15の言語機能を拡張したVisual Basic の新機能 - Visual Basic | § Visual Basic 2017, 15.3, 15.5, 15.8 | Microsoft Docs。

 Visual Basic 2019 (VB 16.0) 
2019年にVisual Studio 2019とともに公開Visual Studio 2019 リリースノート。.NET Core に重点を置いた Visual Basic の最初のバージョンとなったVisual Basic の新機能 - Visual Basic | § Visual Basic 16.0 | Microsoft Docs。

 注釈 

 出典 

 公式サイト 

 関連項目 
 Microsoft Visual Studio Express
 .NET Framework
 Visual Basic
 Visual Basic for Applications

 外部リンク 
 Visual Basic - MSDN
 Visual Basic 6.0 ユーザーのための Visual Basic .NET 移行ガイド - MSDN

Category:BASICコンパイラ
Category:オブジェクト指向言語
Category:統合開発環境
Basic .NET
Category:.NET
Category:マイクロソフトのプログラミング言語