更新日: 2010 年 1 月 29 日

執筆者: エディフィストラーニング株式会社 矢嶋 聡

この記事は、「MSDN プログラミング シリーズ」として発行している技術書籍「ステップアップ Visual Basic 2010 ~開発者がもう一歩上達するための必読アドバイス」(日経 BP 社刊) を基に先進的なテクニックを紹介しています。


目次

  1. はじめに
  2. 機能から見る「VB.NET で変わった点」
  3. 構築方法の変化から見る 「VB.NET で変わった点」

1. はじめに

Visual Basic が、.NET 以前の Visual Basic 6.0 から .NET 対応の Visual Basic (VB.NET) に切り替わって、ほぼ 8 年が既に経過し、.NET テクノロジーが本格的に採用されるようになってきました。また、Visual Basic 2010 の登場によって、.NET 対応の Visual Basic も 4 回目のメジャー リリースを迎えることになります。

そのような状況のなか、.NET 登場以降の Visual Basic にも、新機能が後から続々と追加されつつあります。その一方で、Visual Basic を使用する上で、普段見落としがちな機能や、よく理解されないまま使用されている機能もあるようです。また、LINQ などの比較的新しい機能なども、まだまだこれからという方も、いらっしゃるのではないでしょうか。

そこで、この一連のシリーズの記事では、今後、Visual Basic (VB.NET) を有効活用するために、普段見落としがちな機能やキーワード、あまり理解されずに使用されている機能、また、比較的新しい機能 (ジェネリックや LINQ) などについて、改めて取り上げ解説していきます。

この記事の対象者としては、主に Visual Basic .NET の初級者向けの書籍等で既に学ばれた方や、Visual Basic の文法を今ひとつ完全にはマスターされていない方を想定しており、「次に進む一歩」となるような記事にする予定です。また、今まで Visual Basic 6.0 を使用していた方にとっても、改めて Visual Basic .NET を見直す機会となるよう、.NET 以前の Visual Basic との比較も取り上げたトピックも、いくつか扱う予定です。

なお、ここで取り上げるトピックは、主に、プログラミング言語としての Visual Basic .NET に焦点を当てています。Visual Basic .NET を使用する上では、.NET Framework に関する知識も必要ですが、この一連の記事では、プログラミング言語としての Visual Basic .NET について、改めて見直し、有効活用することを目指しています。

Note: 現在、.NET 版の Visual Basic の名称は、初期のリリースの頃の「Visual Basic .NET」のように .NET を末尾に付けることはなく、単に「Visual Basic」と表記します。
しかし、ここでは、.NET 以前の Visual Basic と対比する上で、.NET 版の Visual Basic であることを明示するために、必要に応じて、「Visual Basic .NET」 や 「VB.NET」、または「.NET 版の Visual Baisic」と表記することにします。
ただし、比較の話題ではない際に、「Visual Basic」 と表記した場合は、全般的に Visual Basic 、または、現行の Visual Basic (.NET 版の Visual Basic) を意味しています (これらは文脈から判断できると思います)。

第 1 回である今回は、.NET 版の Visual Basic の全般的な特徴を改めて把握するために、特に、.NET 以前の Visual Basic 6.0 から、どう変わったかという点に着目して、新機能を含め、その特徴を確認します。ただし、各機能の解説については、2 回目以降で必要に応じて取り上げることにします。ここでは、今後、.NET 版の Visual Basic をさらに習得する上での指針や着眼点につながるよう、全体的な特徴について、確認することにします。

ページのトップへ


2. 機能から見る「VB.NET で変わった点」


まず、Visual Basic.NET の特徴を端的に理解するために、Visual Basic 6.0 より後に登場した主な新機能をリストアップしてみましょう。ここでは、言語としての新機能に着目して挙げてみます。

表1. .NET 版の Visual Basic の新機能

Visual Basic の名称
(バージョン番号)
主な新機能
Visual Basic .NET 2002 (7.0)
  • 新しいデータ型への対応
  • 構造化例外処理
  • 名前空間による型 (オブジェクト) の分類
  • 新しいイベント駆動モデル、動的なイベント ハンドラの構成
  • クラス継承ほか本格的なオブジェクト指向対応
  • マルチ スレッド対応
Visual Basic .NET 2003 (7.1) For Each 文などの構文の一部改訂
Visual Basic 2005 (8.0)
  • ジェネリックの導入
  • パーシャルクラス、Using などの新しい構文の追加
Visual Basic 2008 (9.0)
  • LINQ の導入
  • 拡張メソッド、ラムダ式など新しい構文の追加
Visual Basic 2010 (10.0)
  • Auto-Implemented Properties、Collection Initializers などの新しい構文の追加
  • DLR への対応

前述の表では、すべての新機能を網羅的に列挙したわけではなく、全般的な傾向を示すために、主な新機能をいくつかピック アップしました。

これらの新機能が導入された主な理由は、.NET Framework の恩恵を受けるために、.NET Framework に対応する必要から導入されたもの以外に、他の言語との歩調を合わすため、また、導入することでより便利になる機能などが挙げられます。いずれにしても、必要に応じて追加された新機能であるので、今後、Visual Basic について、さらに一歩理解を深めるならば、前表の項目について習得していない項目がないか確認し、これらを習得することから取りかかるとよいでしょう。本シリーズの記事でも、これらの項目の中で、主なものをいくつか取り上げる予定です。

Note: 新機能の一覧については、次のページを参照してください。

ここで前表から、ざっと特徴を確認するほか、このシリーズの記事で、どの点を取り上げるかなども、簡単に触れておきましょう。

前表のうち、 Visual Basic .NET 2002 に挙げられた 6 項目は、Visual Basic 6.0 から VB.NET にバージョンアップした際の、最も基本的な違いであり、.NET Framework の基本的な仕組みに対応するために追加された機能であると言えます。この中で、最初の 4 項目に挙げた「データ型」、「構造化例外処理」、「名前空間」、および「イベント駆動モデル」などは、.NET Framework や Visual Basic をある程度学習された方なら、既に理解されている方も多いでしょう。これらのうち、本シリーズでは、イベントに関して、踏み込んだ使い方など、いくつか、取り上げる予定です。

さらに5番目の項目にある「オブジェクト指向」も、Visual Basic .NET にとって重要な特徴です。オブジェクト指向プログラミングについては、これ自体、大きなテーマになるので、ここではオブジェクト指向自体について深く取り上げることはできませんが、本シリーズでは、クラス継承に関して、初心者が陥りそうな誤解などについて取り上げるつもりです。

また、マルチ スレッドに関しても、.NET Framework に基づいており、初心者にとってやや難解なデリゲートや、見落としがちな SyncLock ステートメントも関係してくるので、これらについても別途取り上げます。

前表のとおり、Visual Basic .NET 2003 以降も、新しい構文や機能が導入されています。特に、.NET Framework のバージョンアップに伴って導入された新しい仕組みに依存している主な点としては、Visual Basic 2005 の「ジェネリック」、Visual Basic 2008 の「LINQ」、そして、Visual Basic 2010 の 「DLR」対応などが挙げられます。これらについても、別途、取り上げていく予定です。

このように、Visual Basic .NET は、Visual Basic 6.0 以降、.NET Framework の機能強化とともに、進化を続けています。これら Visual Basic .NET の新機能に目を向けることで、.NET Framework をさらに有効活用できるようになるでしょう。

ページのトップへ


3. 構築方法の変化から見る 「VB.NET で変わった点」

ここまでは、機能の面から、VB.NET で変わった点を箇条書きで確認してきました。では、アプリケーションを作成する上で、従来でのVisual Basic 6.0 プログラマーはどのような点を意識して VB.NET を利用していけばよいか確認してみましょう。それは、Visual Basic の最も基本的な作成単位であるフォームの構築方法の中に伺い知ることができます。以降では、このフォームのコードを例にして、Visual Basic 6.0 から VB.NET への開発スタイルの変化について説明しましょう。

フォームは、.NET 以前と .NET 以降に関わらず、Visual Basic の最も特徴的な構成要素です。そもそも、Visual Basic 1.0 がリリースされる前の 1990 年代はじめ、ボタンやメニューなどの基本的な機能を備えたウィンドウ 1 つのアプリケーションでさえ、C言語のプログラムで 100 ステップ程度かかり、そのために多くの知識を必要としていました。ところが、Visual Basic の登場によって、Visual Basic のフォーム デザイナを使用すれば、見た目の通りのフォームをマウス操作で簡単に作れるようになり、その結果、基本的なフォームの構成については、ほとんどコードを書かなくても作成できるようになりました。

このような優れた開発環境の1つであるフォーム デザイナは、Visual Basic .NET にも引き継がれています。しかし、そのフォーム デザイナの振舞いには、若干の違いがあります。

.NET 以前の Visual Basic のフォーム デザイナを使用した場合、拡張子 .frm のファイルの中に、イベント プロシージャなどのプログラマが記述したコードとともに、フォーム上に配置されたボタンなどのレイアウト情報など、フォーム デザイナ上で操作して構築したフォームの定義情報が書き込まれます。これらの定義情報は、次の例に示すように、Visual Basic のソースコードではありません。これは、フォーム デザイナによって自動的に編集される独自の定義言語であって、Visual Basic のプログラマからは隠ぺいされ、そのような定義言語を意識する必要はありませんでした。プログラマは、あくまで、フォーム デザイナというビジュアル ツールを介して作成していました。

例1. Visual Basic 6.0 で使用されていたフォーム用の定義言語 (ボタンを配置した例)

Visual Basic
Begin VB.Form Form1 
  
    Caption = "Form1" 
 
    : (省略) 
 
    Begin VB.CommandButton Command1 
 
        Caption  = "Command1" 
        Height   = 360 
        Left     = 240 
        TabIndex = 0 
        Top      = 480 
        Width    = 1440 
 
    End 
 
End 
 
 

一方、Visual Basic .NET では、フォーム デザイナ上で構築したフォームの情報は、Visual Basic 言語のソースコードとして拡張子 .vb のファイルの中へ出力されます。つまり、フォームのコードは、"本来 プログラマーが管理すべき" プログラム コードとして公開されています。当然、そのような生成されたソースコードと整合性の取れないソースコードをプログラマが追加する訳にはいきません。デザイナが生成したソースコードが、アプリケーション全体の中でどのような役割を持っているかプログラマは意識しながら、それらと連動するソースコードを書く必要が出てきたのです。この点に関しては、.NET 以前の Visual Basic のような、独自のフォーム定義言語を内部に隠ぺいしたフォーム デザイナとは異なり、プログラマは、より多くのことを意識しなければならなくなったと言えます。

しかし、一方で、そのコードと連動するきめ細かいカスタマイズは可能になったと言えます。実際、.NET Framework は、それ以前のプラット フォームに比べ、より多くの機能が提供されています。それらの機能を、フォーム アプリケーションの中で、ニーズに合うように柔軟にカスタマイズして利用できます。

簡単に言うと、VB.NET に変わったことによって、より多くのことを意識しなければならなくなったという面はありますが、その分、アプリケーションに対して、より多くの機能を柔軟に実装できる "可能性" が広がりました。

これを乗り物にたとえて言うならば、最初の Visual Basic 1.0 はゴーカートのようなものです。操作する部分といえば、アクセスとブレーキ、そしてハンドルがあるくらいで、特別な訓練をしなくとも乗りこなすことができます。しかし、Visual Basic はバージョンを上げて機能が強化されるなか、自動車へと進化して、企業レベルで本格的に使用され、大規模システムでも利用されるようになり、現在の .NET 版の Visual Basic では、今や、旅客機規模の飛行機になっています。ただし、旧来からのビジュアルな開発環境での開発生産性は引き継がれているので、飛行機でいうところの自動操縦装置やナビゲーション機能は備わっています。濃霧の中、有視界で位置を確認しながら、手動操縦しなければならない、という負荷は大幅に軽減されています。ほとんどの時間は自動操縦で進めることができるでしょう。しかしながら、パイロットには、いざという時にトラブルに対処し、離着陸は手動で行う能力が要求されます。

Visual Basic .NET でも、同様のことが言えます。ソフトウェア開発者は、ソフトウェア開発の効率化のために Visual Basic .NET が提供するフォーム デザイナなど、様々な効率化をもたらす機能を使用することができます。その一方で、そのようなフォーム デザイナによって自動化されたコードが、アプリケーションの中でどのような役割を持つかなど、周辺知識を備え、場合によってはカスタムコードを記述することも必要です。これから、Visual Basic についてさらにもう一歩習得したいという方は、この点について知識を深めていく必要があります。この一連の記事でも、この点について取り上げていきます。

この部分の知識は、Visual Basic といいながら、「ビジュアルではない」点もあり、手動でカスタム コードを記述しなければならない場合も多くあります。しかし、これらの知識によって Visual Basic をより活用でき、Visual Basic の大空へ、より遠くまで羽ばたくことができるようになるのです。


Code Recipe .NET Framework デベロッパー センター

ページのトップへ