最近、就業先でVB.NETのmainメソッドについての質問がありました。今日はそのお話についてご紹介したいと思います。
Question
「javaではmainメソッドからプログラムがスタートしますが、VB.NETではmainメソッドみたいなものはないのですか??参考書にそういうのが余り詳しく書いてないのですが…」鋭い質問ですが、Javaではmainメソッドからプログラムをスタートさせることが仕様になっています。
※ご参考
https://docs.oracle.com/javase/jp/7/technotes/tools/windows/java.html
そのため、Javaの場合は必ず「public static void main(String[] args)」とプログラムに記述する必要があります。mainメソッドが存在しないとJavaのプログラムは動きません。
一方、VB.NETの場合はJavaのような制約はありません。極端な話、画面を1つ用意して実行すればプログラムが動きます。ですが、VB.NETではmainメソッドを作成しないと動かない機能も存在します。(Mutex使用による二重起動チェック等が有名ですね)今日は是非、VB.NETのmainメソッドの作成を覚えて頂きたいです!
目次
1. エントリポイントとは2. Mainメソッドを作成する
2-1. Mainメソッド用のモジュールを作成する
2-2. Mainメソッドを作成する
3. Mainメソッドをエントリポイントに指定する
3-1. MyProjectの設定を変更する
4. まとめ
1. エントリポイントとは
まず、「エントリポイント」という単語が聞きなれない人に簡単にエントリポイントの話をします。エントリポイントとは、アプリケーションで最初に開始される場所のことです。Javaではmainメソッドがエントリポイントと決められており、明示的にmainメソッドを作成する必要があります。しかし、VB.NETでは何も考えずにWindowsフォームを作成して実行すると、最初に作成したWindowsフォームがエントリポイントになります。2. Mainメソッドを作成する
2-1. Mainメソッド用のモジュールを作成する
まずはMainメソッドを作成します。が、先にMainメソッドを作るためのモジュールを用意します。VisualStudioを起動して、フォームアプリケーションで良いので新しいプロジェクトを作ります。次にソリューションエクスプローラーのソリューションを右クリックして、コンテキストメニューの「追加」を選択します。そこでモジュールを追加しましょう。モジュールの名前は仮に「StartUp.vb」としておきましょう。
2-2. Mainメソッドを作成する
いよいよMainメソッドを作成します。先ほど追加したモジュールにMainメソッドを記述します。こんな感じです。
Module StartUp
_
Sub Main()
End Sub
End Module
Mainメソッドは他のメソッドと変わりはありませんが、少しだけ特殊です。今回は説明を割愛します。このMainメソッドの中に起動時の処理を記載します。DBコネクションの生成、メッセージファイルの内容をメモリ上に保持、xmlファイルやiniファイルの読み込み、二重起動チェックなど、初期処理を記述しておきましょう。今はひとまず「Hello,world!」でも良いと思います。
Module StartUp
_
Sub Main()
MessageBox.Show(“Hellow,world!”)
End Sub
End Module
3. Mainメソッドをエントリポイントに指定する
3-1. MyProjectの設定を変更する
作成した「StartUp.vb」モジュールにMainメソッドを記述しました。MainメソッドをエントリポイントにするにはMyProjectの設定を変更する必要があります。プロジェクトを新規作成したときにWindowsフォームを作成した状態だと、エントリポイントがフォームになっています。このままエントリポイントを変更せずにアプリケーションを起動するとフォームが立ち上がって来るだけなので、せっかく作成したMainメソッドが何の役にも立たなくなります。まず、ソリューションエクスプローラーのMyProjectをダブルクリックします。すると、以下の画像のような状態になります。
次に、「アプリケーションフレームワークを有効にする」にチェックが入っていたらチェックを外します。
チェックを外したら、スタートアップオブジェクトのプルダウンをクリックし、「Sub Main」を選択します。
Mainメソッドをエントリポイントに指定が出来ました。これでデバッグ実行してみましょう。メッセージボックスが出てきて「Hello,world!」と書かれているはずです。
フォームがエントリポイントになっている場合は、メッセージボックスが表示されないので、もう一度確認してみて下さい。