図1●メモ帳で開いたC#のソースコード
図2●C#プログラムの構造
リスト1●メッセージボックスを表示するC#プログラム
図3●ソースコードをコンパイルしたコマンドプロンプトの画面
最初の行でcscを実行し,次にdirで実行ファイルを確認。コンパイルが正常に済めば“1stApp.exe”ができている。

 今回はいよいよ実物のC#プログラムを解説します。

 まずはC#で書いた簡単なプログラムの例を見てください(図1[拡大表示])。いろいろな記号に混じって簡単な英単語や日本語が書かれています。C#の文法を知らなくても,どんな処理をしているか想像がつくのではないでしょうか*1

 注目してほしいのは,プログラムをWindowsのアクセサリにある「メモ帳」で開いている点です。近ごろは開発ツールの助けを借りてプログラムを書くのが普通です。この連載でも,マイクロソフトの「Visual Studio .NET(VS .NET)」を利用してプログラムを作っていきます。しかし,どんな開発ツールを使っていても,プログラムはメモ帳でも編集できるただのテキスト・ファイルだということを覚えておいてください。「プログラミング」とは特殊なファイルを作ることではなく,実は人間が見て理解できるテキスト・ファイルを作る作業なのです。

 プログラムを正しく動かすには,必ず一定の決まりに従ってプログラムを書く必要があります。図1のリストを見ると「ファイルを読み込んでそのまま出力する」という機能には直接関係なさそうな行がたくさんありますが,実はこれらこそC#のプログラムにとって重要な要素なのです。そこで最初に,C#のプログラムがどんな構造をしているのか把握しておきましょう。

C#プログラムは「入れ子構造」をしている

 図2[拡大表示]は,図1のプログラムからC#プログラムの典型的な構造を抜き出したものです。この図のように,C#プログラムは中カッコ(“{”と“}”)でくくられたブロックの中にさらに別のブロックが入った「入れ子構造」をしています。namespaceの次の行の“{”が最後の行の“}”と対になっていて,プログラムの大部分をくくっています。

 C#プログラムは,どれほど大規模なものであっても基本的にこれと同じ構造です。大きなプログラムは数多くのブロックを組み合わせて作られています。図2に含まれているプログラムの基本的な要素を順に一つひとつ説明していきましょう。

●using

 usingキーワードは,プログラムの処理の流れには直接関係ありません。その代わり,プログラム全体にわたってどのライブラリを利用するかを明確にする役割があります。

 前回触れたように,C#では基盤にある「 .NET Framework」のライブラリを利用してアプリケーションを作ります。.NET Frameworkでは,ライブラリの各機能を処理内容ごとにツリー状のグループに分類して管理します。ちょうど,パソコンでファイルを管理するときに目的別のフォルダを用意して分類・整理しておくのと似た状態を想像すればいいでしょう。フォルダに相当するグループを .NET Frameworkのライブラリでは「名前空間」と呼びます。

 例えばシステム全般にわたる基本的な機能はSystemという名前空間に,画面描画に関する機能はSystemの下にあるDrawingという名前空間(System.Drawingと表記します)にそれぞれ分類されています*2。usingキーワードを使って,利用するライブラリの名前空間をあらかじめ宣言しておくと,その中の機能を省略形で使えます。

 例えば,図1の中のプログラムに書かれているStreamReaderは,System.IO名前空間にある機能の一つです。正式な表記はSystem.IO.StreamReaderですが,2行目のusingキーワードであらかじめSystem.IO名前空間を参照することを宣言しているため,単にStreamReaderと表記するだけで利用できます。

●名前空間(namespace)

 usingの次に出てくるnamespaceは,それに続くブロックが所属する名前空間を指定するキーワードです。usingのところで,標準ライブラリがSystem以下の名前空間に属していることを説明しましたが,自分で作るプログラムも必ずどこかの名前空間に所属させます。

 図1のようにnamespace NSWと書けば,それに続くブロック内に記述される要素はすべてNSW名前空間に属することになります。なお,このNSWというのは筆者がたまたまこの名前空間に付けた名前です。

●class

 classは,C#プログラムを構成する最小単位である「クラス」を定義するキーワードです。必ずnamespaceのブロック内に書かれます*3。C#プログラムの大部分はこのようなクラス定義の集まりです。本連載でも次回以降でクラス定義に必要な様々な構文を紹介してきます。

 図1や図2はクラス定義が一つだけの単純なC#プログラムですが,大きなプログラムになると,一つのnamespaceブロックの中にこのようなクラス定義がいくつも作られます。なお,図1でclassキーワードに続けて書かれているTestは,先のNSW名前空間と同様に筆者がたまたまこのクラスに付けた名前です。

●メソッド(method)

 メソッドはクラス内で実行される具体的な処理を一つにまとめて名前を付けたものです。methodというキーワードは図1,図2のどこにもありませんが,Mainと書かれている部分とそれに続くブロックがMainという名前のメソッドを定義しています*4

 図1と図2を見比べると,ファイルを読み出して画面に表示させているらしい記述はいずれもこのMainメソッドのブロック内に含まれていることがわかります*5。このように「具体的な処理の流れはメソッドに書く」ことを覚えておいてください。

 メソッドはクラス定義ブロックの中にいくつでも作れます。メソッドの中でほかのメソッドを呼び出したり,ほかのクラスを利用するといったことも可能です。ただ,Mainという名前のメソッドには特別な役割があります。プログラムを起動したときには自動的にMainメソッドが実行されるのです。

●//(コメント)

 この構文だけはほかとは異質で,実はC#プログラムに不可欠な要素ではありません。//と書かれた個所から改行までの部分はプログラムの処理の流れからは一切無視されます。つまり,この//以降を削除してしまってもプログラムは全く同じように動作します。

 この一見ムダな行は,プログラム内に動作などをメモしておくプログラマ向けの注釈文です。プログラム内での処理という点では全くムダですが,実際のプログラミングでは読みやすい注釈を記述することがプログラミングの重要なテクニックです。例えば,思った通りにプログラムが動かずにミスを探す場合などは,わかりやすいコメントがついているかどうかでミス発見までの作業の効率が大きく変わってきます。あるいは他人の作ったプログラムや過去に自分が作ったプログラムを見る場合,処理だけが書かれているのと,適切なコメントがあるのとでは理解のしやすさが大きく違います。

まずはメモ帳でプログラムを書いてみよう

 これでC#プログラムの構造を理解するために最低限必要な知識はそろいました。では実際に簡単なプログラムを作って動かしてみましょう。まずはアクセサリのメモ帳で書いてみます。

 メモ帳でリスト1[拡大表示]を入力して,“1stApp.cs”というファイル名で「マイドキュメント」などのフォルダに保存してください。説明していないキーワードがいくつか含まれていますが,ここはそのまま入力してください。すべて半角で,大文字と小文字も間違えないように注意してください。行頭を少しずつずらして書いていますが,空白の数は適当で構いません。ただし全角スペースは使わないでください。

 今作成したようなプログラムのテキストを「ソースコード」と呼びます。ソースコードはコンパイラで実行形式のファイルに変換することでアプリケーションとして実行できるようになります。C#のコンパイラはマイクロソフトが「 .NET Framework SDK」というパッケージに含めて無償配布しています。Webサイトからダウンロードして,インストールしてください*6。正常にインストールできれば,システム・フォルダ(C:\WindowsあるいはC:\WINNTなど)の下に“Microsoft.NET\Framework\<バージョン番号>”というフォルダが作成されます*7。このフォルダにある「csc.exe」というプログラムがC#コンパイラです。

 このコンパイラはコマンドプロンプトから起動して使います。まずソースコードを保存した場所から簡単にコンパイラを起動できるようにcsc.exeのありかを設定しておきます。スタート・メニューやデスクトップの[マイコンピュータ]を右クリックして[プロパティ]を選び,[詳細設定]-[環境変数]のダイアログボックスに移ってください。[システム環境変数]のリストボックスに「Path」という変数があるので,その値の文字列に,すでに記述されている内容は消さず,末尾に;(セミコロン)を付け,csc.exeのあるフォルダ名を追加します。プロパティを閉じたらコマンドプロンプトを起動してください。まずはそのまま,cscと入力してEnterキーを押し,コンパイラが起動するかどうかを確かめておきます。Microsoft Visual C# .NET Compilerなどのメッセージが出ればOKです*8

 コンパイラを起動できるようになったら,ソースコードを保存したフォルダに移動してください*9。移動したら“csc 1stApp.cs”と入力してEnterキーを押します。ソースコードが正しく入力されていれば実行形式ファイル「1stApp.exe」が生成されます(図3[拡大表示])。エラー・メッセージが表示される場合は,ソースコードのどこかに入力ミスがあるはずです。1stApp.exeが生成されるまで修正とコンパイルを繰り返してください。

 1stApp.exeが生成されたら,コマンドプロンプトで1stAppと入力してEnterキーを押します。すると,Welcomeと書かれたメッセージボックスが開くはずです。メッセージボックスが表示されない場合は,やはりソースコードのミスが考えられます。修正して再度コンパイルしてみてください。うまくいったら今度は「Welcome」と書かれている部分をいろいろ変えてコンパイルし直し,メッセージボックスの表示が変わることも確かめてみてください。

統合開発環境「Visual Studio .NET」で楽々開発

 ソースコードを書いてコンパイル,実行するというプログラミングの一番基本的な流れができました。リスト1はメッセージボックスを表示するだけの簡単なプログラムでしたが,C#で作られたアプリケーションにはみなさんが普段使っているようなものもあります。これらも一般的にソースコードはやはりテキスト・ファイルです。ですから,理論的にはこうした .NET Frameworkで動くあらゆるプログラムはメモ帳と.NET Framework SDKだけで作れるのです。

 しかし,メモ帳のようなテキスト・エディタだけで大きなプログラムを作るのは現実的ではありません。多機能なソフトウエアを作ろうとすれば,プログラムはどんどん複雑になります。しかもC#で利用できるライブラリには,とても覚えきれないほどたくさんの機能があります。誰かが作ったソースコードをそのまま入力するだけならメモ帳で十分かもしれませんが,必要な機能を探し出して,その機能の正しい利用法に従ってソースコードを記述するにはメモ帳ではちょっと無理です。

 そのうえ実際のプログラミングでは一度書いたソースコードを何度も見直したり修正を加えたりする必要があります。動作に不具合(バグ)があれば,それを取り去る「デバッグ」作業も必要です。大きなソフトウエアならプログラムを複数のファイルに分けて,別々の人がそれぞれのファイルを担当するような場合もあります。

 そこで,実際のプログラミングでは,これら開発にまつわる様々な作業を助ける機能を組み込んだ「統合開発環境(IDE:Integrated Development Environment)」と呼ばれる開発ツールを使うのが一般的です*10。この連載で利用するVisual Studio .NET(VS .NET)もその一つです*11

 C#に対応したIDEは,VS .NETのほかにも米Borland Softwareの「C#Builder For the Microsoft .NET Framework」や,IC#Codeという団体が開発している「SharpDevelop」などがあります。C#Builderは商品として売られているほか「Personal download edition」という無償配布版もあります*12。SharpDevelopも無償で利用できます*13

 それぞれに細かな違いがありますが,IDEとしての基本機能はみな備えています。C#プログラミングをちょっと試してみたいときにはまずこれら無償のツールで気軽に始めるのもいいでしょう。ただ,C#BuilderやSharpDevelopに関連した情報はWebや書籍でも非常に少ないのが現状です。どのツールを使っても言語自体が変わることはないのですが,これらのツールでの学習に自信が持てない場合や,豊富な情報を見ながら本格的にC#を学習したい場合は,VS .NETを使うことをお勧めします。