Visual Basic .NET
Visual Basic .NETのロゴ | |
パラダイム | 構造化プログラミング, 命令型プログラミング, オブジェクト指向, 宣言型プログラミング |
---|---|
登場時期 | 2001年[1] |
設計者 | マイクロソフト |
開発者 | マイクロソフト |
最新リリース | 2019 (16.9)[2]/ 2021年3月2日[3] |
型付け | 強い静的型付けまたは動的型付け[注釈 1] |
主な処理系 | .NET Framework、.NET(.NET Core)、RoslynコンパイラおよびMono |
方言 | .NET 2002 (7.0), .NET 2003 (7.1), 2005 (8.0), 2008 (9.0), 2010 (10.0), 2012 (11.0), 2013 (12.0), 2015 (14.0), 2017 (15.x), 2019 (16.x) |
影響を受けた言語 | Visual Basic, C# |
影響を与えた言語 | Small Basic |
プラットフォーム |
.NET Framework: Microsoft Windows Mono/.NET: Windows, macOS, Linux他 |
ウェブサイト | Visual Basic |
拡張子 |
.vb |
Visual Basic .NET (ヴィジュアル ベーシック ドットネット)はマイクロソフトが開発したプログラミング言語およびその処理系。VB.NETとも呼ばれる。旧来のVisual Basic(バージョン6.0まで、VB6)の後継であり、C#とほぼ同時期に.NET Frameworkおよび本格的なオブジェクト指向に対応する新しい言語として登場した。
なおVisual Studio 2005以降では、「Visual Basic .NET」や「VB.NET」という呼称ではなく、従来のように「Visual Basic」という呼称が用いられるようになっている[5]が、6.0以前との互換性はなく、また.NETベースであることには変わりない。
概説
[編集]2000年代初頭、マイクロソフトの「.NET構想」を実現するためのアプリケーション開発・実行環境「.NET Framework」に対応するプログラミング言語として、C#とともにVB.NETが登場した[6]。
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からの移行を容易にするアップグレードウィザード[7]や、従来の一部機能を実現する互換ライブラリが実装されている[8][9]。ただし、Microsoft.VisualBasic.Compatibility.VB6
名前空間にあるクラスは、VB 6.0から自動的にアップグレードするツールによって使用される目的で用意されていたもので、.NET 4では非推奨となっており、また32ビットプロセスでのみサポートされている[10]。アップグレードウィザードはVisual Studio 2010以降はサポートされていない。
VB.NETのコンパイラはマイクロソフトから無料で提供されている[注釈 2]ので、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のサポートが追加された[11][12]。
マイクロソフトは2020年11月、.NET Coreの将来的な機能のうち、言語仕様の変更を伴うものについてはVB.NETではサポートされない可能性があることを発表した[13]。また2023年2月、C#は.NETとともに言語仕様を進化させ続けること、F#はコミュニティと協力しながら進化させていくこと、そしてVB.NETには今後新しい言語構文を追加せず、安定性に重きを置く方針であることを発表した[14]。
実行速度
[編集]旧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ランタイム環境であれば、C++/CXやC++/WinRTを使ってラップする方法もある。
コード例
[編集]以下はコンソールに"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やVBScript[15][16]に実装されていた旧MsgBox
関数などの互換機能はライブラリによってサポートされている[9][17][18]が、以下のように()
を使ったメソッド呼び出しの形で記述しなければならない。
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プログラマのノウハウが通用しにくい状況が生まれた。このことがVBプログラマがVB6からVB.NETへの移行が進まない原因の一つではないかとの指摘がある[要出典]。
エラー処理
[編集]VB6ではエラー発生時にOn Error GoTo
文によって、メソッド内に記述されたエラー処理にジャンプさせる方式であった。VB.NETではC#やJavaなどと同様に、Try - Catch - Finally
による例外処理を記述できる。これによって呼び出し先メソッド内部で生じたエラーを、呼び出し元メソッドで一括して取り扱うことができるなど、プログラムの柔軟性が増した。
固定長文字列の廃止
[編集]他の.NET言語との互換性確保のため[19]、固定長文字列は(基本データ型としては)サポートされなくなった。Visual Basic 6.0互換機能としてMicrosoft.VisualBasic.Compatibility.VB6.FixedLengthString
クラス[20]が用意されているが、マルチバイト文字では正常に動作しないため、目的の出力形式にエンコードしてバイト数をカウントしてから処理するといったコーディングが必要となる。[要説明]
歴史
[編集]バージョン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 を採用。 |
Visual Basic .NET 2003 | 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 2010 | 2010 | 10.0 | 2010年 | .NET Framework 4.0 に対応。 |
Visual Basic 2012 | 2012 | 11.0 | 2012年 | .NET Framework 4.5 に対応。Async/Awaitの導入。 |
Visual Basic 2013 | 2013 | 12.0 | 2013年 | .NET Framework 4.5.1 に対応。 |
Visual Basic 2015 | 2015 | 14.0 | 2015年 | .NET Framework 4.6 に対応。 |
Visual Basic 2017 | 2017 | 15.0, 15.3, 15.5, 15.8 | 2017年 | |
Visual Basic 2019 | 2019 | 16.0 | 2019年 | .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には搭載されていなかった[6]。
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#との間の言語間の格差の低減が図られるようになった[21] [22]。
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対応アプリケーションの開発も可能になる[23]。
Visual Basic 2015 (VB 14.0)
[編集]2015年に.NET Framework 4.6とともに公開。Visual Studio 2015に同梱される。Roslynと呼ばれるコンパイラレイヤーにより、Visual C#と同等のIDE機能を備えるに至った[24]。
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の言語機能を拡張した[25]。
Visual Basic 2019 (VB 16.0)
[編集]2019年にVisual Studio 2019とともに公開[26]。.NET Core に重点を置いた Visual Basic の最初のバージョンとなった[27]。
脚注
[編集]注釈
[編集]- ^
Option Strict
で変更可能[4]。 - ^ Windows Vista以降のOSには、.NET Framework用のC#/VBの旧コンパイラが標準的に付属する。
出典
[編集]- ^ VB .NET プログラミングリファレンス - はしがき | Microsoft Learn
- ^ What's new - Visual Basic | Microsoft Learn
- ^ Visual Studio 2019 version 16.9 Release Notes | Microsoft Learn
- ^ Option Strict Statement - Visual Basic | Microsoft Learn
- ^ Visual Basic | MSDN ライブラリ, Internet Archive
- ^ a b VB2005は.NETへの移行を加速できるのか!?(1/2) - @IT
- ^ VB 6.0 ユーザーのための VB .NET 移行ガイド - アップグレードウィザードの利用 | Microsoft Learn
- ^ ITレポート(動向/解説) - 【速報】これがニューVBだ!:ITpro
- ^ a b Visual Basic 6.0 互換性ライブラリ | Microsoft Learn
- ^ Microsoft.VisualBasic.Compatibility.VB6.<member> is obsolete and supported within 32 bit processes only | Microsoft Learn
- ^ .NET Core 2.0 Previewリリース、Visual Basicをサポート
- ^ What's new in .NET Core 2.0 | Microsoft Learn
- ^ Visual Basic support planned for .NET 5.0 - Visual Basic Blog
- ^ Update to the .NET language strategy - .NET Blog
- ^ MsgBox 関数 | Microsoft Learn
- ^ バージョン情報 (VBScript) | Microsoft Learn
- ^ MsgBox 関数 (Visual Basic) | Microsoft Learn
- ^ 第6回 VB開発者が最新.NET Frameworkを効率よく習得する方法 - @IT
- ^ VB 6.0 ユーザーのための VB .NET 移行ガイド - 固定長文字列 | Microsoft Learn
- ^ FixedLengthString Class (Microsoft.VisualBasic.Compatibility.VB6) | Microsoft Learn
- ^ “Visual Basic 2010の新機能 - @IT”. 2011年11月3日閲覧。
- ^ VB.NETに未来はあるのか?
- ^ 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 Studio 2015の新機能“Roslyn”とは - Build Insider
- ^ Visual Basic の新機能 - Visual Basic | § Visual Basic 2017, 15.3, 15.5, 15.8 | Microsoft Docs
- ^ Visual Studio 2019 リリースノート
- ^ Visual Basic の新機能 - Visual Basic | § Visual Basic 16.0 | Microsoft Docs