連載

プロフェッショナルVB.NETプログラミング
―― VB 6プログラマーのためのVB.NET入門 ――

第21回 コンソール・アプリケーションの開発と活用(前編)

(株)ピーデー
川俣 晶
2002/10/19

Page1 Page2

コンソール・アプリケーションとは何か?

 コンソール・アプリケーションとは、主にコマンド・プロンプトから利用する、ウィンドウを作成しないアプリケーション・プログラムのことである。VB 6(Visual Basic 6.0)までのVisual Basicでは、基本的に作成手段がサポートされていなかったものである。ただし、WSH(Windows Scripting Host)でVBS(Visual Basic Script)を使用する場合は作成することができた。

 コンソール・アプリケーションはCUI(Character User Interface)と呼ばれるカテゴリに分類することができる。CUIの逆はGUI(Graphical User Interface)である。GUIとは、大まかにいえば、ウィンドウを作成してマウスで操作するものである。

 コンソール・アプリケーションは、主にコマンド・プロンプトに対して、呪文のようなコマンドをタイプしてEnterキー(リターンキー)を押すことで実行する。つまり、キーボードから多数の文字をタイピングすることが前提となる。このようなスタイルは、初期のコンピュータではよく見かけたもので、初期のBASIC言語もこのようなスタイルであった。例えば、昔のBASIC処理系では、プログラムを実行する際、Rキーを押し、Uキーを押し、Nキーを押し、Enterキーを押したものである(つまり「RUN」と入力してEnterキーを押す)。恐らく、GUIが当たり前になってからパソコンに接したユーザーの中には、このような面倒なスタイルを利用する意味が分からない人も多いと思う。しかし、いまでもコンソール・アプリケーションには根強いニーズがあり、実際に利用されている。また、コンソール・アプリケーションは現在も開発が続いているのも事実である。

 では、どうしてコンソール・アプリケーションが消えてなくならないのか。その理由は、明らかにCUIにはGUIにない長所が存在し、それを生かした活用法が存在するためだろう。一見、時代錯誤に見えるかもしれないコンソール・アプリケーションの対応が、最新のVB.NETで復活したといえるのである。

コマンド・プロンプトの起動時画面
スタート・メニューから[すべてのプログラム]−[アクセサリ]−[コマンド プロンプト]で起動する(Windows XPの場合)。GUI全盛のいま、時代遅れのインターフェイスのようにも見えるかもしれないが、用途によってはGUIよりも便利な場面が少なくない。VB.NETでは、このコマンド・プロンプトで実行できるコンソール・アプリケーションを開発できるようになった。

 なお、コマンド・プロンプトでのオペレーションについては、Windows Insiderフォーラムの「連載:Windows 2000 コマンドライン徹底活用」で詳細に解説されている。コマンド・プロンプトの経験のない読者の方は、まずそちらを参考にしていただきたい。

VB.NETで作成するコンソール・アプリケーション

 Visual Studio .NETでコンソール・アプリケーションを作成する準備は簡単である。新しいプロジェクトの作成時に、Windowsアプリケーションの代わりに、コンソール・アプリケーションのテンプレートを選ぶだけでよい。

VB.NETでの新しいプロジェクトの作成ダイアログ
コンソール・アプリケーションを作成するには、テンプレートで[テンプレート アプリケーション]を選択するだけでよい。

 すると、以下のような非常にシンプルなソース・コードが自動的に生成される。

 1: Module Module1
 2:
 3:   Sub Main()
 4:
 5:   End Sub
 6:
 7: End Module
テンプレートで[テンプレート アプリケーション]を選択した場合に自動作成されるコード

 たったこれだけである。コンソール・アプリケーションはウィンドウを作成しないので、フォームもない。ラベルやテキスト・ボックスを貼り付けるような開発スタイルは取ることができない。出力したい内容はすべて自分でプログラムとして書き込む必要がある。

 さて、このソースの内容を説明しておこう。まず、1行目のModule文は、このソースがモジュールであることを指定している。つまり、これはクラスやフォームではなく、ただ単にメソッドなどを含むだけのソース・ファイルであることを意味している。そして、3行目のSub Main()は、プログラム実行時に最初に実行されるメソッドを定義するものである。最初に実行されるモジュールやメソッドは、プロジェクトのプロパティで指定されている。

コンソール・アプリケーションにおけるプロジェクトのプロパティの例
プログラム実行時に最初に実行されるモジュールやメソッドはここで指定する。

 ここのスタートアップの設定がModule1となっているため、モジュールModule1にあるSub Main()が最初に実行されることになる。もし、ほかのモジュールにSub Main()があっても、それは実行されない。しかし、このスタートアップの設定をほかのモジュールに変えれば、そのモジュールのSub Mainが最初に実行されることになる。

 なお、この設定では、モジュール名だけでなく、Sub Main()という設定も選ぶことができるが、これはSub Main()が1個だけ存在する場合にそれを最初に実行する設定である。プログラムに2個以上Sub Main()が存在する場合、コンパイルエラーになる。

 さて、このままでは何も出力しないまま終了するプログラムになってしまい分かりにくいので、文字列を出力する機能を与えてみよう。コンソールに文字列を出力するには、クラス・ライブラリのSystem.ConsoleクラスのWriteLineメソッドを使用する。これは引数の値をコンソールに出力して改行する機能を持ったメソッドである。これをSub Main()に組み込んでみよう。

 1: Module Module1
 2:
 3:   Sub Main()
 4:     Console.WriteLine("Hello World!")
 5:   End Sub
 6:
 7: End Module
Console.WriteLineによりコンソールに文字列を出力するサンプル・プログラム1

 さて、さっそく[F5]キーを押してビルドと実行、と思うのはまだ早い。というのは、もしF5キーを押して実行しても、プログラムの実行は瞬間的に終了して、コマンド・プロンプトのウィンドウが閉じてしまい、本当に指定した文字列が出力されたかどうか分からないからだ。ここはVisual Studio .NET上で、5行目のEnd Subにキャレットを移動してから[F9]キーを押して、ブレークポイントを設定しよう。そしてこの設定後に[F5]キーを押してみよう。間違いがなければ、以下のように、新しいコマンド・プロンプトのウィンドウが開いて、指定文字列が表示されるはずである。

サンプル・プログラム1の実行結果

 単独で開いたコマンド・プロンプトから実行すると、以下のようになる。

サンプル・プログラム1をコマンド・プロンプトから実行した結果

 これはcdコマンド(change directoryコマンド。カレント・ディレクトリを移動させる)でカレント・ディレクトリを実行ファイルのあるディレクトリに移動させ、dirコマンド(ディレクトリ内のファイルやサブ・ディレクトリを一覧するコマンド)でファイルの存在を確認後、実際に実行してみた例である。この場合、実行ファイルは、Sample001n.exeなので、「Sample001n」+Enterで実行することができる。


 INDEX
  連載 プロフェッショナルVB.NETプログラミング
  第21回 コンソール・アプリケーションの開発と活用(前編)
  1.コンソール・アプリケーションとは何か?
    2.コマンドライン引数
 
「プロフェッショナルVB.NETプログラミング」


Insider.NET フォーラム 新着記事
  • 第2回 簡潔なコーディングのために (2017/7/26)
     ラムダ式で記述できるメンバの増加、throw式、out変数、タプルなど、C# 7には以前よりもコードを簡潔に記述できるような機能が導入されている
  • 第1回 Visual Studio Codeデバッグの基礎知識 (2017/7/21)
     Node.jsプログラムをデバッグしながら、Visual Studio Codeに統合されているデバッグ機能の基本の「キ」をマスターしよう
  • 第1回 明瞭なコーディングのために (2017/7/19)
     C# 7で追加された新機能の中から、「数値リテラル構文の改善」と「ローカル関数」を紹介する。これらは分かりやすいコードを記述するのに使える
  • Presentation Translator (2017/7/18)
     Presentation TranslatorはPowerPoint用のアドイン。プレゼンテーション時の字幕の付加や、多言語での質疑応答、スライドの翻訳を行える
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

注目のテーマ

Insider.NET 記事ランキング

本日 月間