Visual Studioで作成できるVB.NETアプリケーションのうち、代表的なものは次の三つです。

Windowsアプリケーション
フォーム(Windows Forms)をベースとしたWindowsデスクトップ用のアプリケーションを作ることができる。
クラスライブラリ
単体で実行できるユーザーインターフェイスを持たない、コードベースのクラスライブラリ。 VB.NETだけでなく他の.NET言語からも使用できるライブラリを作ることができる。 (クラスライブラリの作成)
コンソールアプリケーション
文字だけからなるコンソールのみを用いたアプリケーション。 ウィンドウを使用しないコマンドラインアプリケーションのほか、デバッグ、テスト用のツールなどにも用いられる。

この他にも、エディションやバージョンによって作成できるアプリケーションにはいくつか種類があります。 ここでは、上記のコンソールアプリケーションを用いて解説をしていきます。

Hello, world!

まずはじめに、おなじみの「Hello, world!」を表示するコンソールアプリケーションを作成してみることにします。

Visual Studioを使う場合

「ファイル」メニューの「新規作成」から「プロジェクト」を選択します。 現れたダイアログから、「VB.NET」の「コンソールアプリケーション」を選択し、適当なプロジェクト名を入れます。

「新しいプロジェクト」ダイアログ

OKボタンを押すと次のようなソースコードが現れるはずです。

Module Module1

    Sub Main()

    End Sub

End Module

このソースコードの真ん中あたりにコードを追加して次のようにします。

Module Module1

    Sub Main()

        Console.WriteLine("Hello, world!")

    End Sub

End Module

このように入力できたらCtrl + F5キーを押して実行します。 このとき、F5キーだけではデバッグモードでの実行となりプログラムの実行が終わった時点でウィンドウが閉じてしまうので、Ctrlキーも一緒に押してください。 実行すると次のような画面が現れるはずです。

実行結果画面

現れたウィンドウの左上に「Hello, world!」と表示されていればこのプログラムは正しく動作しています。

コマンドラインコンパイラ(vbc)を使う場合

コマンドラインでコンパイル・実行する場合は次のようにします。 まず、メモ帳などを使って次のようなソースコードを書き、保存します。 ここではファイル名をhelloworld.vbとします。

helloworld.vb
Module Module1

    Sub Main()

        Console.WriteLine("Hello, world!")

    End Sub

End Module

次にこのソースコードをコンパイルします。 DOSプロンプトを開き、次のようなコマンドを入力します。

ソースコードのコンパイル
E:\>vbc helloworld.vb

vbcはVB.NETのコンパイラで、vbc helloworld.vbとするとこのファイルをコンパイルして実行可能ファイルhelloworld.exeを生成します。 生成された実行可能ファイルを実行すると次のように表示されるはずです。

コンパイルしたプログラムの実行
E:\>helloworld.exe
Hello, world!

環境変数PATHを設定していない場合はvbcコマンドが見つからないので、以下のコマンドでパスを通してください。 以下は.NET Framework 4.0がインストールされている環境でVB.NETコンパイラのパスを通すコマンドの例です。

環境変数の設定
set PATH=C:\WINDOWS\Microsoft.NET\Framework\v4.0;%PATH%

MSBuildを使うとコマンドラインでプロジェクトファイルをコンパイルすることもできます。 詳しくはMSBuildを参照してください。

アプリケーションのエントリポイント

どのようなプログラムでも、最初に呼び出される場所というものがあります。 それをエントリポイントといいます。 エントリポイントはC言語などにおけるmain関数に相当するものです。

Module Module1
  Sub Main()
    Console.WriteLine("Hello, world!")
  End Sub
End Module

このプログラムにおけるエントリポイントは、上から二行目のSub Main()の部分です。 これはMainプロシージャの宣言部分です。 VB.NETではMainと言う名前のプロシージャがアプリケーションのエントリポイント、つまりプログラムの開始点となります。

Mainプロシージャの形式

Mainプロシージャの形式には数種類ありますが、先の形式は一番単純な形式です。 Mainプロシージャではコマンドライン引数を受けることができ、またエラーなどで終了する場合に通知するエラーコードなどを返すこともできます。 それらの形式を次の表にまとめておきます。

Mainプロシージャの形式
宣言の形式 概要
Sub Main() コマンドライン引数を受け取らない。 エラーコードを返さない。
Function Main() As Integer コマンドライン引数を受け取らない。 エラーコードを返す。
Sub Main(ByVal args() As String) コマンドライン引数を受け取る。 エラーコードを返さない。
Function Main(ByVal args() As String) As Integer コマンドライン引数を受け取る。 エラーコードを返す。

Mainプロシージャ(エントリポイント)はモジュールもしくはクラスのどちらかで宣言することができます。 クラスにMainプロシージャを宣言する場合は、これらの宣言の先頭に共有メソッドであることを表す「Shared」を付加する必要があります。

参考までに、コマンドライン引数を取りエラーコードを返すエントリポイントをクラス内に宣言し、「Hello, world!」を表示するプログラムを記述すると次のようになります。

Class Class1
  Shared Function Main(ByVal args() As String) As Integer
    Console.WriteLine("Hello, world!")

    Return 0
  End Function
End Class

コンソールと入出力

コンソールアプリケーションにおいて、コンソールへの文字列の表示やキーボードからの入力を受け付けるにはConsoleクラスを使います。

コンソールへの出力 (標準出力)

まず、文字列を表示するには、Console.WriteLineメソッドを使用します。

Module Module1
  Sub Main()
    Console.WriteLine("文字列を出力")
  End Sub
End Module
実行結果
文字列を出力

変数の値を表示したい場合などもConsole.WriteLineメソッドを使うことができます。

Module Module1
  Sub Main()
    Dim i As Integer = 15

    Console.WriteLine(i)
  End Sub
End Module
実行結果
15

改行したい場合は、引数に何も指定せずにConsole.WriteLineメソッドを呼び出します。

Module Module1
  Sub Main()
    Console.WriteLine("1行目")
    Console.WriteLine()
    Console.WriteLine("3行目")
  End Sub
End Module
実行結果
1行目

3行目

さらに、文字列の途中に変数の値などを含めて表示するには次のようにします。

Module Module1
  Sub Main()
    Dim i As Integer = 15

    Console.WriteLine("変数iの値は{0}です。", i)

    Console.WriteLine("この部分が{0}や{1}に置き換わり表示されます。", "文字", "数値")
  End Sub
End Module
実行結果
変数iの値は15です。
この部分が文字や数値に置き換わり表示されます。

上記の例にあるように、中括弧{ }で囲まれた部分が、その後に指定されているパラメータに置き換えられて表示されます。 {番号}とすると、その中の番号の順でパラメータが置き換えられて表示されます。

Module Module1
  Sub Main()
    Console.WriteLine("0:{2} 1:{1} 2:{0}", "一番目", "二番目", "三番目")
  End Sub
End Module
実行結果
0:三番目 1:二番目 2:一番目

中括弧{ }の中に指定する文字列を変えることで0埋めや右寄せなどの指定をすることもできます。 これについては書式指定子で解説しています。

コンソールからの入力 (標準入力)

コンソールから文字列を入力するにはConsole.ReadLineメソッドを使用します。

Module Module1
  Sub Main()
    Dim str As String

    str = Console.ReadLine()

    Console.WriteLine("入力された文字: {0}", str)
  End Sub
End Module
実行結果
test
入力された文字: test

数値など型を指定した入力を行うことはできないので、そういった場合にはまずConsole.ReadLineメソッドで入力を文字列として受け取り、その後目的の型に変換します。 以下は整数値(Integer型)の値を入力する例です。 Integer.Parseメソッドを使って文字列から整数型に変換しています。

Module Module1
  Sub Main()
    Dim str As String
    Dim i As Integer

    Console.Write("整数値を入力してください >")

    str = Console.ReadLine()

    i = Integer.Parse(str)

    Console.WriteLine("入力された整数値: {0}", i)
  End Sub
End Module
実行結果
整数値を入力してください >123456
入力された整数値: 123456

実数値を入力する場合もSingle型を使うことで同様に入力することができます。

Module Module1
  Sub Main()
    Dim str As String
    Dim s As Single

    Console.Write("数値を入力してください >")

    str = Console.ReadLine()

    s = Single.Parse(str)

    Console.WriteLine("入力された数値: {0}", s)
  End Sub
End Module
実行結果
数値を入力してください >123.4567
入力された数値: 123.4567

型の変換については基本型の変換で解説しています。

標準エラーへの出力

標準エラーへ出力を行う場合は、Console.Errorプロパティのメソッドを使います。 出力先が異なるだけで、使い方はConsole.WriteLineと同様です。 リダイレクトされていない場合は、通常の出力と同様にコンソールウィンドウに表示されます。

Module Module1
  Sub Main()
    ' 標準出力へ文字列を出力
    Console.WriteLine("標準出力")

    ' 標準エラーへ文字列を出力
    Console.Error.WriteLine("標準エラー")
  End Sub
End Module
実行結果
標準出力
標準エラー

標準ストリームの操作

Consoleクラスにはこの他にも標準ストリームに対する様々な操作が用意されています。 より高度な標準入出力の扱い方について詳しくは自プロセスの標準入出力で解説しています。

コマンドライン引数

アプリケーションを起動するときに指定されたコマンドライン引数を取得するには、Mainプロシージャの引数argsを参照します。

Module Module1
  Sub Main(ByVal args() As String)
    Console.WriteLine("指定されたコマンドライン引数: {0}個", args.Length)

    For Each arg As String In args
      Console.WriteLine(arg)
    Next
  End Sub
End Module
実行例
E:\>ConsoleApplication1.exe /? foo /file:bar.txt
指定されたコマンドライン引数: 3個
/?
foo
/file:bar.txt

引数の名前はargsでなくてもコマンドライン引数を受けとることはできますが、文字列型配列にする必要があります。

Mainプロシージャで引数argsを受けとるようにしていない場合でも、Environment.GetCommandLineArgsメソッドを呼び出すことでコマンドライン引数を取得することができます。 Environment.GetCommandLineArgsメソッドでは、配列の先頭にアプリケーションのファイル名が入る点に注意してください。

Module Module1
  Sub Main()
    Dim args() As String

    args = Environment.GetCommandLineArgs()

    Console.WriteLine("指定されたコマンドライン引数: {0}個", args.Length)

    For Each arg As String In args
      Console.WriteLine(arg)
    Next
  End Sub
End Module
実行例
E:\>ConsoleApplication1.exe /? foo /file:bar.txt
指定されたコマンドライン引数: 4個
ConsoleApplication1.exe
/?
foo
/file:bar.txt

その他、コマンドライン引数の取得方法などについてはプロセス・アセンブリの情報 §.コマンドライン引数でも詳しく解説しています。