チュートリアル:.NET マネージ COBOL の開発

概要

このチュートリアルでは Visual Studio IDE を紹介し、「Hello World」と表示する Windows フォームを持つ Windows アプリケーションのソリューションの作成方法について説明します。

Visual Studio の起動

このチュートリアルを実行するには、あらかじめ Microsoft Visual Studio と Enterprise Developer の両方をインストールしておく必要があります。

Visual Studio を起動する方法は、次のとおりです。

  1. [スタート] メニューで、[スタート > Visual Studio 2017] とクリックします。
    注:Windows 8、Windows 10、および Windows Server 2012 では、スタート画面からプログラムを呼び出します。
  2. インストールされているバージョンに応じて、環境を設定するように求められる場合があります。プロンプトが表示された場合は、[General development environment] を選択します。このセットアップでは、Visual Studio は、COBOL プロジェクトを使用できるようにカスタマイズされています。

下の図には IDE が示されていますが、大きいペインに表示される情報は異なります。

大きいペインには、ソリューションとプロジェクトが開きます。現時点では、Visual Studio に関する最新情報を含むスタート ページが表示されています。作業を開始すると、このペインにコードが表示されます。

下部のペインは、出力ウィンドウです。ここには、IDE およびコンパイラのメッセージが表示されます。

右側のペインは、ソリューション エクスプローラーです。ここには、ソリューションおよびプロジェクトの構造が表示されます。ソリューション エクスプローラー ペインの下には、タブが表示されます。ソリューション エクスプローラーは、デフォルトで表示されます。

これらのペインのいずれかが表示されていない場合は、[表示] メニューから表示できます。

ソリューションとプロジェクトの作成

最初の作業は、ソリューションとプロジェクトの作成です。ソリューションは、アプリケーション作成のために連携して動作するプロジェクトを格納するコンテナーです。ソリューションの拡張子は .sln で、人が読んで理解できるテキスト ファイルです。Microsoft では、Visual Studio 以外ではファイルを編集しないことを推奨しています。

COBOL プロジェクトの拡張子は .cblproj です。この場合も人間が理解できるファイルですが、Microsoft では、編集しないことを推奨しています。プロジェクトのタイプが異なると、拡張子も異なります。たとえば、C# プロジェクトの拡張子は .csproj です。

ここでは、プロジェクトとソリューションを作成します。次の手順で行います:

  1. Visual Studio を起動します。
  2. [ファイル > 新規作成 > プロジェクト] の順にクリックして、プロジェクトを新規作成します。
  3. [新しいプロジェクト] ダイアログで [インストール済み > テンプレート > COBOL] を選択し、[マネージ] をクリックします。
  4. テンプレート ペインで [Windows アプリケーション] をクリックします。

    テンプレート ペインの上のドロップダウン リストでは、ターゲット フレームワークのバージョンを変更できます。クライアントが使用しているフレームワークを選択して、アプリケーションでサポートされているクラスおよびメソッドがアプリケーションに含まれていることを確認します。このデモンストレーションでは、デフォルトの .NET Framework をそのまま使用できます。

  5. ウィンドウ下部にある [プロジェクト名] フィールドで、プロジェクトの名前として WinHello を指定します。

    [名前] フィールドと [ソリューション名] フィールドの名前が同じであることに注意してください。プロジェクトの名前を変更すると、ソリューションの名前が自動的に変更されます。

  6. [場所] フィールドで、このチュートリアルを配置するディレクトリを指定します。

    たとえば、c: ドライブに「Tutorials」というフォルダーを作成する場合は、場所を c:\tutorials に変更します。ソリューションは、プロジェクト名に対応したサブディレクトリ WinHello に保存されます。

  7. [OK] をクリックします。

ソリューション、プロジェクト、および空のフォームが作成されます。空のフォームは、フォーム デザイナで開かれます。ソリューション エクスプローラー ペインに、WinHello プロジェクトが表示されます。これには次が含まれます。

  • プロパティ。プロジェクト全体のプロパティが含まれます。
  • 参照設定。プロジェクトが使用する System.Windows.Forms などのクラスを含むアセンブリへの参照が含まれます。参照設定フォルダーのコンテキスト メニューから、他の .NET アセンブリやマシンに登録されている COM オブジェクトへの参照のほか、.NET コードで参照している他のプロジェクトへの参照を追加できます。
  • Form1.cbl。フォームのコードが含まれます。Form1.cbl を展開すると、その下にフォーム デザイナーによって作成された Form1.Designer.cbl があります。このコードは編集しないでください。このコードによってフォームが定義されているため、変更するとデザイン ウィンドウを開けなくなる場合があります。また、変更を行ってもフォーム デザイナーによって上書きされる可能性があります。
  • Main.cbl。メイン フォームを表示するトリガー プログラムが含まれます。

プロジェクト ディレクトリの内容を表示する場合は、次のように IDE から開くことができます。

  • ソリューション エクスプローラーで WinHello プロジェクトを右クリックし、[エクスプローラーでフォルダーを開く] を選択します。

ボタンとラベルのペイント

ここでは、ページやフォームのボタンとラベルのペイントを行います。

  1. 次の手順で、ボタンをペイントします。
    • をクリックするか、[表示 > ツールボックス] をクリックします。
    • [ボタン] オブジェクトが表示されていない場合は、ツールボックスの [コモン コントロール] をクリックします。
    • [ボタン] オブジェクトをポイントし、それをページまたはフォーム上にドラッグします。
  2. ボタンのテキスト プロパティを編集してボタンのテキストを「Say Hello」に変更します。次の手順で行います。
    • ボタンをクリックします。
    • プロパティ ペインの [Appearance] セクションで、[Text] プロパティまでスクロールします。
      注:デザイナーのボタンを右クリックし、[プロパティ] をクリックして、表示されていない場合はプロパティ ペインを表示します。
    • テキストを「Say Hello」に変更して Enter キーを押します。

      プロパティ ペインのデザイン セクションにあるボタンの名前プロパティが「button1」のままであることに注意してください。

  3. Button オブジェクトと同じ方法で Label オブジェクトをドラッグして、フォームのどこかにラベルをペイントします。
  4. テキスト プロパティ フィールドのテキストを削除して Enter キーを押すと、ラベル内のデフォルトのテキストが消去されます。

    ラベルは基本的にこの操作で消えますが、フォーム上には残るため、アプリケーションをビルドして実行する際に表示されます。ラベル コントロールの名前のプロパティは Label1 (または label1) のままです。

クリック イベント ハンドラーの追加

ここでは、イベント ハンドラーを追加し、ボタンをクリックすると「Hello World」と表示されるようにします。

  1. ボタンをダブルクリックして、ボタンにクリック イベント ハンドラーを作成します。

    コードに button1_Click というメソッドが生成されます。

    button1_Click メソッドのコードを確認します。コードは単なるスケルトンで、何も行いません。手続き部は空です。このチュートリアルでは、アプリケーションの実行後に、残りのコードを確認します。

  2. button1_Click メソッドの手続き部に、次の行を挿入します。
    move "Hello World!" to self::label1::Text
  3. または、同じことを、次のように書くこともできます。
    set self::label1::Text to "Hello World!"

    これにより、テキスト「Hello World」が、ペイントしたラベルのテキスト プロパティに転記されます。

COBOL アプリケーションのビルドと実行

各プロジェクト タイプに対する 2 つのデフォルトのビルド構成として、デバッグおよびリリースがあります。これらの構成は、状況に応じてプロジェクトをビルドする方法を定義します。

プロジェクトをデバッグ用にビルドし、実行する方法は、次のとおりです。

[ビルド] メニューで、ソリューションやプロジェクトを、ビルドまたはリビルドするかを選択できます。[ビルド] を選択すると、前回のビルド後に変更されたファイルのみがビルドされます。[リビルド] を選択すると、前回のビルド後に変更があったかどうかにかかわらず、プロジェクト内のすべてのファイルがビルドされます。

プロジェクトをビルドして実行する方法は、次のとおりです。

  1. [ビルド > 構成マネージャー] をクリックして、使用するビルド構成をオンにします。
  2. [アクティブ ソリューション構成] で、[デバッグ] を選択されていることを確認して [閉じる] をクリックします。

    IDE の上部にある標準ツール バーに注目してください。[デバッグ] がアクティブな構成として表示されます。

  3. [ビルド > WinHello のビルド] の順にクリックします。
  4. 出力ペインを表示して、プロジェクトが正しくコンパイルされたことを確認します。このペインを表示するには、[表示 > 出力] をクリックします。
  5. [デバッグ > デバッグなしで開始] または をクリックして、アプリケーションを実行します。
  6. ページまたはフォームが表示されたら、[Say Hello] ボタンをクリックします。

    これで、ラベルに「Hello World!」と表示されます。

  7. 右上にある X をクリックして、ページまたはフォームを閉じます。

プロジェクトの参照

プロジェクトを作成すると、プロジェクト全体のプロパティに、System アセンブリや Windows アプリケーションの System.Windows.Forms などの、プロジェクトで使用されるクラスを含むアセンブリへの参照が含まれます。これは、プロジェクト全体のプロパティの [名前空間] ページで確認できます。

他のアセンブリの他のクラスを使用するコードを作成する場合は、参照としてアセンブリを追加します。次の手順を行います。

  1. ソリューション エクスプローラーで WinHello プロジェクトを右クリックします。
  2. [参照の追加] をクリックします。
  3. [参照の追加] ダイアログボックスで、[アセンブリ] を展開し、[フレームワーク] をクリックして .NET Framework アセンブリまたはその他の .NET アセンブリを選択します。[アセンブリ] の下にある [拡張] をクリックし、Micro Focus までスクロールして、使用可能な Micro Focus アセンブリを参照します。
  4. [COM] を展開し、[タイプ ライブラリ] をクリックして、マシンに登録した COM オブジェクトを選択します。
  5. [ソリューション] を展開し、[プロジェクト] をクリックして、.NET コードが参照する他のアセンブリを選択します。このチュートリアルでは、プロジェクトに使用できるアセンブリはありません。
  6. 選択項目が完了したら、[OK] をクリックします。

詳細は、Visual Studio のヘルプを参照してください。

プロジェクト プロパティ

プロジェクト プロパティにより、プロジェクトの特性の定義と、特にプロジェクトの動作を制御が可能です。

ソリューション エクスプローラーの下のプロパティ ペインに、プロジェクトのプロパティの概要がデフォルトで動的に表示されます。プロジェクト プロパティの概要の表示方法は次のとおりです。

  • プロジェクト プロパティの概要を表示するには、ソリューション エクスプローラーでプロジェクトまたはソリューションを選択します。プロパティ ペインは、デフォルトでソリューション エクスプローラーの下に表示されます。
  • プロパティ ペインが表示されていない場合は、[表示 > プロパティ ウィンドウ] をクリックして表示します。
  • 選択したプロパティの説明は、プロパティ ペインの最下部に動的に表示されます。この説明の表示と非表示を切り替えるには、プロパティ ペインのツールバーを右クリックします。

プロジェクトのプロパティの詳細な内容は、ソリューション エクスプローラーでプロジェクトを選択して、[プロジェクト > ProjNameプロパティ] をクリックすると表示できます。ネイティブ プロジェクトまたはマネージ プロジェクトに指定できる全体プロパティは、すべての構成に適用することも、選択した設定 (デバッグやリリースなど) にのみ適用することもできます。

アセンブリ

各プロジェクトは、1 つのコードアセンブリにビルドされます。

アセンブリについては、Visual Studio のヘルプを参照してください。Visual Studio のヘルプでは、アセンブリを「1 つの単位としてバージョンが設定されディプロイされた 1 つまたは複数のファイルの集合」と説明しています。アセンブリは、.NET フレームワーク アプリケーションの主要なビルド ブロックです。マネージ タイプとマネージ リソースはすべてアセンブリに格納され、アセンブリ内のみでアクセス可能であるか、または、他のアセンブリのコードからアクセス可能であるかがマークされます。

アセンブリは、セキュリティ面でも重要な役割を果たします。コード アクセス セキュリティ システムでは、アセンブリの情報を使用して、アセンブリ内のコードが与えられた特権セットを判断します。アセンブリの基本概念については、Visual Studio のヘルプを参照してください。

アセンブリは、プロジェクトをビルドすると、自動的に作成されます。アセンブリをグローバル アセンブリ キャッシュに含める場合は、厳密な名前のアセンブリを作成する必要があります。厳密な名前を使用すると、アセンブリのセキュリティを向上させ、マシン上のすべてのアプリケーションでそのアセンブリを共有できます。

生成コードの確認

このチュートリアルのページまたはフォームに対し、概して 2 つのパーシャル クラスがフォーム デザイナーによって作成されます。一方のパーシャル クラスには、アプリケーションの生成コードが含まれています。このコードは、編集や追加ができます。他方のパーシャル クラスは、ファイル Form1.Designer.cbl にあります。このファイルにはデザイナーに所有されているコードが含まれています。このコードは編集しないでください。

生成コードを含むパーシャル クラスには、特に次のものが含まれています。

  • Windows フォーム用の、次のようなパーシャル クラスとしてのクラスの宣言。
       class-id WinHello.Form1 is partial
                 inherits type System.Windows.Forms.Form.
  • オブジェクトの作業場所節。フォームのコントロール用、より正確には、コントロールのオブジェクト参照用に記憶域を割り当てます。
  • New メソッド。デザイナーが所有するパーシャル クラスで InitializeComponent メソッドを起動します。
  • button1_Click メソッド。「Hello World」と表示するために編集したものです。

デザイン ビューでのイベント ハンドラーの確認

デザイン ビューのコントロールをダブルクリックすると、クリック イベント ハンドラーが作成され、メソッドが生成コードに挿入されます。この方法で、Button1_Click イベント ハンドラーを作成しました。

イベント ハンドラーにより、イベント名の変更や、他のイベントの追加および削除が可能です。

注:これらの作業はデザイン ビューで行う必要があります。アプリケーションのコード上では行わないでください。コードでこれを行うと、デザインからコードが再生成された場合に上書きされる可能性があります。

イベント ハンドラーの名前を変更する方法は、次のとおりです。

  1. デザイン ビューを表示します。1 つの方法としては、ソリューション エクスプローラーでページまたはフォームを選択して [デザイナーの表示] をクリックします。
  2. [Say Hello] ボタンを選択します。
  3. プロパティ ペインで、 をクリックしてイベントを表示します

    (イベントはこのペインの [アクション] セクションにあります)。イベントをスクロールして、使用できるものを確認します。

  4. クリック イベント ハンドラーの名前を「readButton1_Click」に変更して Enter キーを押します。

    これにより、readButton1_Click (Form1.cbl に含まれる) の新しいメソッドが追加されます。

  5. デザイン ビューを再表示します。
  6. Say Hello ボタンのイベント ハンドラーを確認します。

    ドロップダウン リストに、ボタン用の 2 つのクリック イベント ハンドラーがあることに注意してください。button1_Click イベント ハンドラーは削除して、その機能をreadButton1_Clickに移す必要があります。

  7. Form1.cbl を編集し、次のコードをbutton1_Click のメソッドからreadButton1_Clickのメソッドの手続き部に移します。
    set self::label1::Text to "Hello World!"
  8. button1_Click のメソッドを削除し、ファイルを保存します。
  9. デザイン ビューを再表示します。
  10. Say Hello ボタン用のクリック イベント ハンドラーは 1 つだけ (readButton1_Click) です。

誤ってコントロール (ラベル コントロールなど) をダブルクリックした場合、不要なイベント ハンドラーが生成されます。このイベント ハンドラーは、コード ビューで単純に削除することはできません。イベント ハンドラー コードはデザインにもあるためです。つまり、この場合はイベント ハンドラーをデザイン ビューで削除する必要があります。その方法はイベント ハンドラーの名前を編集したときとほぼ同じですが、この場合は名前を編集するのではなく削除します。

スタートアップ フォームの変更

ここでは、もう 1 つ別のフォームを追加してスタートアップ フォームとして使用します。

先に作成したフォームは、Form1 という名前になりました。アプリケーションを実行すると、このフォームが開きます。フォームの名前を変更する場合は、アプリケーションを起動するフォームの名前も変更する必要があります。同様に、このフォームを削除する場合は、別のフォームをスタートアップ フォームとして指定する必要があります。

この作業を実際に行ってみるために、もう 1 つフォームを追加し、これをスタートアップ フォームとして使用します。次の手順で行います。

  1. 2 番目のフォームを最初のフォームと同様に作成します。
    1. ソリューション エクスプローラーでプロジェクトを右クリックします。
    2. [追加 > 新しい項目] をクリックします。
    3. [新しい項目の追加] ダイアログで、[インストール済み > COBOL] を展開し、[マネージ] をクリックします。
    4. [Windows フォーム] を選択してフォームに名前 (「HelloAgain」など) を指定します。
    5. [追加] をクリックします。
    6. フォームをペイントし、イベント ハンドラーを追加します。「Hello World」の場合と同様のフォームをペイントできますが、テキストを「Hello again」のように少し変えます。
  2. メイン フォームを新しいフォームに設定するには、main.cbl プログラムでメイン フォームを定義し作成する行を次のように編集します。
    1. ソリューション エクスプローラーで Main.cbl をダブルクリックします。
    2. 局所記憶節で、次の行を
      01 mainForm type WinHello.Form1.

      次のように変更します。

      01 mainForm type WinHello.HelloAgain.
    3. 手続き部で、次の行を
      set mainForm to new WinHello.Form1()

      次のように変更します。

      set mainForm to new WinHello.HelloAgain()
  3. アプリケーションをビルドして実行します。

COBOL プロジェクトのデバッグ

IDE には、ステップ実行、データ項目の値の確認、ブレークポイントの設定などのデバッグ機能が用意されています。これらの機能を参照する方法は、次のとおりです。

  1. ツールバーで、[デバッグ > ステップ イン]、または をクリックします。

    プロジェクト構成をリビルドするかどうかを確認するメッセージが表示されたら、[はい] をクリックします。

    IDE がデバッグ モードに入ります。エディター ウィンドウの左側にある黄色の矢印が、実行する最初の行を指していることがわかります。

  2. [デバッグ > 続行] をクリックします。または、ツールバーで緑色の [続行] 矢印をクリックします。

IDE ウィンドウを閉じます。ファイルはビルドすると自動的に保存されるので、保存操作を行う必要はありません。