BridgePointのサンプルプロジェクトを試す

# BridgePointを試してみたい

この記事は、BridgePointのプロジェクトからコードを生成して実行するまでの手順について、付属するサンプルモデルを例に書いたものです。

# BridgePointについて

BridgePointは、MDD（Model Driven Development：モデル駆動開発）ツールです。オブジェクト指向分析設計手法の1つであるShlaer–Mellor法やその後継であるExecutable UML（xtUML）を活用する開発を支援しています。

BridgePointは、Project Technology社が1980年代に提供を開始し、2004年にはメンター・グラフィックス社が同社（の後継会社）を買収します。のちに、メンター・グラフィックス社は、BridgePointをオープンソースとして公開し、2014年には完全なオープンソースプロダクトになりました。現在は[xtUML.org](https://xtuml.org/) が提供しています。

# 起動時に問題が起きたら

## BridgePointを起動できなかった場合

次のようなダイアログが表示されてBridgePointが起動できない場合は、 [BridgePointのインストール手順（2019年10月以降、Windows）](hhttps://qiita.com/kuboaki/items/092253ed9fdcfbcb587f) を参照してJREのPATHを設定してください。

![GSW-20191028-230029.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3221/ef079672-378f-1dbb-1665-d430acddae5d.png)

> A Java Runtime Environment (JRE) or Java Development Kit (JDK) must be available in order to run Bridgepoint. No Java virtual machine was found afrer searching the following locations: C:\BridgePoint\jre\bin\javaw.exe


## メモリ不足で応答なしになった場合

BridgePointはEclipseのプラグインとして提供されています。Eclipseは巨大なアプリケーションなので、PCの環境によってはメモリ不足になる場合があります。
そのときは、 BridgePointのディレクトリの中にある bridgepoint.ini を編集してメモリ割り当てを増やしてみましょう。次のように、 `-Xms` オプション追加して `512m` に、 `-Xmx` オプションを追加して `2048m` に設定してみてください。

```
-startup
plugins/org.eclipse.equinox.launcher_1.5.700.v20200207-2156.jar
--launcher.library
plugins/org.eclipse.equinox.launcher.win32.win32.x86_64_1.1.1200.v20200508-1552
-vmargs
-Dorg.eclipse.epp.logging.aeri.ui.skipReports=true
-Dbridgepoint.GenerateFunctionsFromList=disabled
-Xss4m

-Xms512m
-Xmx2048m
```

# サンプルプロジェクト Microwave Ovenを試す

自前のプロジェクトを作る代わりに、付属のサンプルのひとつ「Microwave Oven」を使って手順を説明します。

## サンプルプロジェクトを生成する

BridgePointが起動できると、「Welcome to BridgePoint UML」という画面が表示されます。

![GSW-20191029-060729.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3221/2176f643-0c4b-e836-37a5-f4829b51cd19.png)

「Quick Start」をクリックして、「Quick Start」画面を表示します。


![GSW-20201223-183940.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3221/00885b96-7057-acb9-3a96-1ee2fdabcc9f.png)


スクロールして、「Example Application - Microwave Oven」をクリックします。

![GSW-20201223-183801.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3221/8b09b28c-9a54-0732-e143-d1559f864430.png)

そうすると、Importダイアログが開き、予め提供されている MicrowaveOvwn プロジェクトがインポートされます。

> ダイアログが開いても自動でImportされない場合には、「Select root directory」をチェックして、下記のパスを指定して読み込めます。
> `(インストールディレクトリ)\plugins\org.xtuml.bp.welcome_(バージョン.日付)\models\MicrowaveOven`
> GPS_Watch（OAL版）の場合には、「Select archive file」をチェックして、下記のパスを指定して読み込めます。
> `(インストールディレクトリ)\plugins\org.xtuml.bp.welcome_(バージョン.日付)\models\GPS_Watch_OAL.zip`

![GSW-20201223-215112.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3221/d65c007f-f6b8-7844-03f8-3608ee8182aa.png)

Importが完了すると、「xtUML Modeling」パースペクティブが開きます。自動で開かないときは、Welcomeタブを閉じます。

![GSW-20201223-220521.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3221/ad48b2de-e96b-4cd3-ce96-c21242de53b6.png)

## モデルコンパイラを設定する

次に、プロジェクトで使用するモデルコンパイラを設定します。
「xtUML Modeling」パースペクティブでプロジェクト名で右クリックしてポップアップメニューを開き、「BridgePoint Utilities＞Set Model Compilers」を選びます。

![GSW-20201223-220811.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3221/f51da3ee-18fe-fb64-e163-76f98b01b76a.png)

すると「Set Model Compilers」ダイアログが開きます。

![GSW-20201223-221211.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3221/477c61a5-95c1-ec0f-5d3a-a1618271a35f.png)

C言語のソースコードの生成には、MC-3020というモデルコンパイラを使います。
そこで、「MC-3020 (C Model Compiler)」がチェックされているか確認します。チェックされていなかったらチェックして「Finish」ボタンをクリックします。

## Builderを設定する

続いて、「C/C++」パースペクティブに切り替えます。
プロジェクト名で右クリックしてポップアップメニューを開き、「Properties」メニューを選びます。

![GSW-20201223-221540.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3221/73e5de48-dfb7-210a-dadc-255e9cfd49ea.png)

「Properties」ダイアログが開いたら、左ペインの項目から「Builders」を選択すると、
右のペインに「Builders」の項目が表示されます。

![GSW-20201223-221916.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3221/0fd32430-3bbe-b884-5b9d-6b1798cc0635.png)

「MC-3020 Builder」「CDT Builder」「Scanner Configuration Builder」のチェックを残し、他のチェックを外し、「Apply and Close」をクリックします。

## Tool Chain を設定する

Builderの設定と同様に「Porperties」ダイアログを開きます。
左ペインの項目から「C/C++ Build＞Tool Chain Editor」を選択すると、
右のペインに「Tool Chain Editor」の項目が表示されます。

![GSW-20201223-224106.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3221/9849e707-934b-1dc9-074c-7a25a87b69f0.png)

Windows環境では、「Current Tool Chain」の設定が「MinGW GCC」になっていることを確認します。異なっていたら、設定を変更して、「Apply and Close」をクリックします。
もし、コマンドラインからもmakeしたい場合には、 「Current builder」の設定を「Gnu Make Builder」に変更しておきます。

MacやLinux環境の場合には、それぞれに該当する項目を選択してください。

これで、モデルコンパイラを使ってコード生成する準備ができました。

## サンプルをビルドする

実は、サンプルにはビルド済みバイナリが含まれていますので、そのままであればビルドしなくても実行できます。ですが、モデルやアクションを修正したプロジェクトの動作を確認するには、ビルドしてから実行する必要があります。

ビルドしてみましょう。

「C/C++」パースペクティブに切り替えます。
プロジェクト名で右クリックしてポップアップメニューを開き、「Build Project」メニューを選びます。

![GSW-20201223-225014.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3221/942af49f-4e63-defc-46d7-8900e01306bf.png)

そうすると、ソースコードの生成が始まります。
生成が終わると、引き続き生成したコードをビルドして実行プログラムを作成します。
ビルド中の様子は、下のペインの「Console」タブに表示されます。

![GSW-20201223-225447.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3221/427a0e76-f2c2-f51e-1c98-e4858aa67f36.png)

ビルドに成功すると、「Debug」の中に「MicrowaveOven.exe」ができています。

![GSW-20201223-225627.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3221/cfe66ca3-c730-6c1e-996b-98c83420e2e1.png)

## 実行してみる

実行するには、ビルドしたバイナリを選択したところで右クリックしてポップアップメニューを開き、「Open with＞System Editor」メニューを選びます。

すると、コマンドプロンプトが開き、「MicrowaveOven」の実行履歴が表示されます。


![GSW-20201223-225935.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3221/bc7376a3-744f-3107-f396-462ce5f4fc3c.png)

イベントが発生するたびに、ログが更新されているのが見て取れます。

# サンプルプロジェクトGPS_Wactch(OAL版）を試す

基本的な手順は、 Microwave Oven と同じです。
Tool Chain Editorで「MinGW」を選択するのを忘れずに。

## MinGWを使ってビルドするとリンク時にエラーになる

Windows環境のサンプルのビルドには、MinGWを使っています。
GPS_Watchのコードを生成して、実行プログラムをビルドしようとすると、次のようなエラーになる場合があります。

```
 "C:/ev3rt/hrp3/sdk/ws_bp/GPS_Watch/Debug/../src/UI_GuiBridge_bridge.c:67: undefined reference to `send@16' ", ... etc.
```

このようなリンク時のエラーが見つかった場合、MinGWがソケットライブラリを使うとき指定するオプションが不足しています。
そのときは、「Build Configuration＞Set Active」で、「Debug_Windows」を選択します。
このConfigurationでは、MinGWでビルドするときに必要なライブラリオプションを追加してあります。

![GSW-20201231-130531.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3221/14bc2694-265b-2bf4-5819-2c2cbb1c8f0b.png)

これで、 GPS_Watchがビルドできました。

## 実行時にWindowsセキュリティの警告ダイアログが表示される

README.md に書いてある手順で GPS_WatchのJavaクライアントを起動します。
README.mdの手順では、次のようなエラーになって起動できない場合があります。

![GSW-20201230-151253.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3221/cbc0d061-d6d8-d207-641d-5fe0c8682c37.png)

このような場合、コマンドプロンプトから実行します。

まず、コマンドプロンプトでjavaコマンドが使えるか確認します。
次に、UIパッケージのbinディレクトリに移動して、 `lib/WatchGUI` を指定してjavaコマンドを実行します。

![GSW-20201230-151525.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3221/8419567d-c295-b8f4-3929-b85009b79fb1.png)

初めて実行するときには、Windowsのセキュリティ警告ダイアログが表示されるかもしれません。

![Windowsセキュリティの警告_AdoptOpenJDK.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3221/1a5e5cf4-adbe-a14e-d64e-aa837f28a5c6.png)

「アクセスを許可する」をクリックします。

すると、GUI画面が表示されます。

![GSW-20201230-151532.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3221/6d0885ff-c0c8-5519-12c4-cb4e28f063f9.png)

# シミュレーションの手順は省略

BridgePointには、「Verifier」というモデルデバッガあるいはシミュレータに相当する機能があります。

このVerifierの使い方も説明したいところなのですが、この記事の目的はコードを生成してビルドして動かす手順を提供することなので、説明は省略します。

# 最後に

BridgePointを支えているOne Fact inc. 並びにユーザーコミュニティに感謝します。

BridgePointは、パワフルな開発手法である xtUML を支援する環境として長く培われてきた実績のある、大変優れたものです。ぜひ一度、BridgePointを使って xtUML を実践する機会を設けてみてください。