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
とします。
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プロシージャではコマンドライン引数を受けることができ、またエラーなどで終了する場合に通知するエラーコードなどを返すこともできます。 それらの形式を次の表にまとめておきます。
宣言の形式 | 概要 |
---|---|
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
その他、コマンドライン引数の取得方法などについてはプロセス・アセンブリの情報 §.コマンドライン引数でも詳しく解説しています。