【IBM App Connect Enterprise】 デバッグの基本

## はじめに
IBM App Connect Enterprise（以下 ACEと略します）は、IBMが提供するシステム間連携のソフトウェアで、システム間のさまざまなギャップを整理して連携を実現します。

メッセージフローの作成は直感的に進められますが、いざ実行すると「メッセージが入力されている筈だが出力まで到達しない、動いているかも分からない」「途中でいつもエラーになる」など、思った通りに進まないのは一般的なプログラム開発と同じです。

当記事では、メッセージフロー開発時に発生する問題の追跡方法をご紹介します（本番運用時に必要なログ出力は、さまざまな要素を考慮した設計が必要です）。
WindowsでToolkitがインストールされている想定です、参考にしているACEのバージョンは13.0.2です。

## ログの出力先
Windows環境では、Windowsのアプリケーションログとして出力されます。何か問題が発生したら、まずはこちらを確認してください。

Windowsのアプリケーションログはイベントビューアーで参照可能です。

<img width="300" alt="qiita-square" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/536604/5d925273-a939-4ccc-b940-3699b276f84c.png">

検索バーから「イベント ビューアー」と入力し、表示されるイベントビューアーを選択してください。

<img width="600" alt="qiita-square" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/536604/ee101b20-1c20-4785-867a-d2d083cb1036.png">

ビューアーでは色々な情報が参照できますが、Windowsログ > Application を選択してください。こちらにログが出力されます。

## Traceノードを使う
メッセージフローのなかでどのようにデータが受け取れているのか、編集されたのか、などメッセージの内容を確認したいことがあります。
これを実現するためにはTraceノードを使用します。フローの処理のひとつとして、現在のメッセージの内容などを出力することができます。

<img width="300" alt="qiita-square" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/536604/fe60eea6-42cb-4ba7-b072-7ebe23cea3dd.png">

Traceノードの主要なプロパティは次のとおりです。

### Destination
トレースの出力先をUserTrace、File、LocalErrorLogから選択できます。
LocalErrorLogは、前出のログにトレース内容が出力されます。
Fileの場合は、Append形式でトレースを出力します。次の**FilePath**に出力先のパスを指定してください。

Windowsであれば、PowerShellを開いて次のようなコマンドを実行しておけば、トレース状況を別ウィンドウでリアルタイムに確認することができます。
```
Get-Content -Wait -Tail 10 -Path トレースファイルのパス
```
UserTraceの説明は当記事では省略します。


### Pattern
Traceとして出力する情報とレイアウトを指定します。

ESQLで参照するデータは${}で囲み宣言します。
例えば次のようなパターンを指定すると、処理時間とメッセージ全体が出力されます。
```
--${CURRENT_TIMESTAMP}--
${Root}
```
<img width="600" alt="qiita-square" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/536604/c092af4d-d510-4053-b502-97c738d775ae.png">

例に示したパターンでは上のようにログが出力されます。

### Traceノードの配置
<img width="600" alt="qiita-square" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/536604/5bf09ce8-81b5-48bc-b0a5-08d774b5e5d5.png">

ノード間に配置することで、トレースの出力有無でフローがどこまで進んだかが直感的に分かると思います。

<img width="600" alt="qiita-square" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/536604/370bc816-bf66-4d9a-9588-c130616efdd2.png">

ノードの間に挟むのではなく、このようにOutターミナルに複数の宛先を設定することもできます。

## LOGステートメントを使う
https://www.ibm.com/docs/ja/app-connect/13.0?topic=statements-log-statement

Computeノードの処理でエラーになる場合、ESQL中の任意のタイミングで変数の状態を参照したいことがあります。
そんなときはESQL中でLOGステートメントを使って、必要な情報をログに出力することができます。

```
SET var1 = OutputRoot.DFDL.mq3msg.record.fld1;
LOG EVENT VALUES ('start', var1, 'end');
```
上はログに出力する例で、1行目で変数に値を設定し、2行目でログ出力を行なっています。
VALUESには表示する値を固定値や変数で10個まで指定可能です。

<img width="600" alt="qiita-square" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/536604/3b370974-447a-4fea-96ee-878fb12e5a39.png">

上記のESQLを実行すると、上のようなログが出力されます。var1には「dd」という値が格納されたことが分かります。

## おわりに
初めて作成するメッセージフローはなかなか狙いどおりに動かなないことがあります。ただ何が起こっているのかを正確に把握できれば、修正手段を考えることは難しくありません。
ぜひ色々な視点からACEを使いこなしてください。

## さらに詳しい情報をお探しの方へ
IBMの最新情報、イベント情報、さらに役立つ資料は、以下のIBM Communityでも発信・格納されています。
最新のトレンドや有益な情報をチェックするために、ぜひご覧ください！
- **WebSphere**: [IBM Community - WebSphere](https://community.ibm.com/community/user/wasdevops/communities/community-home?CommunityKey=d6c93aa2-6e10-48da-96dc-3831da8ee185)
WebSphere関連の最新情報やディスカッション、イベント情報、技術資料を公開中！
- **ELM (Engineering Lifecycle Management)**: [IBM Community - ELM](https://community.ibm.com/community/user/sustainability/communities/community-home?CommunityKey=f8bc69e0-9d61-4688-939b-018f5f74519e)
ELMに関する最新のイベント情報、ナレッジ共有、便利なドキュメントをチェック！
- **Integration**: [IBM Community - Integration](https://community.ibm.com/community/user/integration/communities/globalgrouphome?CommunityKey=fe1b09d3-7042-4a5f-bce0-6bcc19aa0ed9)
Integrationに関する最新のイベント情報、ナレッジ共有、便利なドキュメントをチェック！