【UiPath】Xamlファイルを開いてみる

# はじめに

この投稿は、RPA ツールの UiPath でフローのファイルとして使用される「Xaml」ファイルについての記事です。
全部は紹介しきれないので、ざっくり概要だけ紹介します。

この投稿は、UiPathのコミュニティ「UiPath Friends」が企画する「UiPathブログ発信チャレンジ2021サマー」の 14日目の投稿でもあります。

企画の内容は [**こちら**](https://note.com/shumpei_w/n/n651cbdbec4e8) 。カレンダーのURLは [**こちら**](http://u0u1.net/sUwZ) です。

https://twitter.com/ShumpeiWatanabe/status/1405168150736359427?s=20

# Xamlとは

Xaml（ザムル）はExtensible Application Markup Languageの略で、XMLベースのマークアップ言語です。.NET Framework 3.0以降のテクノロジーにおいて広範囲にわたり使用されています。データ構造やUi定義によく使用されますが、UiPath／Windows Workflow Foundation（※）では「ワークフローを定義する」ために使用されます。

:::note info
UiPathは「Windows Workflow Foundation」をベースに作成されています。
:::

# Xamlを開いてみる

今回は、Ref（Robotic Enterprise Framework）の「Main.xaml」を開いてみてみます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/154139/314d6c31-4f3a-3e7e-05ac-ab121ba35dcb.png)

# 上部：ワークフローの設定

xamlの上部には、XMLネームスペース（xmlns）、引数（x:Members）、注釈（AnnotationText）、画面サイズ（HintSize）、使用するDLLネームスペース（NamespacesForImplementation・ReferencesForImplementation）などがあります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/154139/dca71475-3652-6ea8-155f-0251ae2d8c39.png)

XMLネームスペースは、XAML内で記述するタグの説明です。例えば、

```
xmlns:sap="http://schemas.microsoft.com/netfx/2009/xaml/activities/presentation" 
```

とありますが、これは `「SAP」と言ったら「Schemas・・・Activities/Presentation」を指す` という意味です。（ERPのSAPではありません）
同じようなネームスペースで

```
xmlns:sap2010="http://schemas.microsoft.com/netfx/2010/xaml/activities/presentation" 
```

とありますが、これは上記SAP（Schemas・・・Activities/Presentation）の2010バージョンを指しています。
2010年に .NET Framework 4 に対応するために、Windows Workflow Foundation が大きくアップデートされたので、その対応版の機能であることをしてしているようです。

また、「.NET Framework」を示すネームスペース「X」や

```
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml
```

UiPath独自のコンポーネントを示すネームスペース「ui」などもあります。

```
xmlns:ui="http://schemas.uipath.com/workflow/activities
```

ネームスペース以外のブロックを見てみると、引数を示す「x:Members」や変数を示す「x:boolean」などもあります。

「NamespacesForImplementation」や「ReferencesForImplementation」はそのxamlで使用する、DLLのネームスペ－スを表します。

「VirtualizedContainerService.HintSize」はフローの横幅を示します。ちょっと保存しただけで、値が変わってしまうので、GitやSvn等のリポジトリ管理ツール泣かせのタグです。

 ```
<sap:VirtualizedContainerService.HintSize>707.333333333333,860</sap:VirtualizedContainerService.HintSize>
 ```

# 真ん中から下

使用するフローの種類でタグが変わり「Sequence・FlowChart・StateMachine」のいずれかになります。Xamlを追加する時に選択する「フローの種類」と同じです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/154139/590929fe-ac4f-dbff-329b-200439d8e01c.png)

中を見てみると「Variableタグ」で変数が定義されていたり「Sequenceタグ」 で シーケンスが表現されています。UiPath独自のアクティビティなら「Ui：」とタグに書かれます。

見ていくと分かるのですが、Sequence等のフローの大枠は「Windows Workflow Foundation」の機能をそのまま使っているようで、UiPathのベースが「Windows Workflow Foundation」であることが感じ取れます。

# Xamlを解析する

上記の通り、xamlファイルの中身を読み取れば、処理の内容がわかります。

- どういうアクティビティを使用しているか？
- 変数のスコープはどうなっているか？
- 他のアプリケーションを呼び出しているか？

などを出力することも可能で、コードレビューや見直し、ドキュメント作成に利用できます。

そこで、以下のようなツールを作成しました。

https://marketplace.uipath.com/listings/2401

実行すると、プロジェクトの内容をHTMLで出力します

![cb1becf2-8a47-4ac1-9aeb-06c340394809.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/154139/e8e59a1c-c43c-c427-4885-e23ab3da9968.png)




# 終わりに

いかがでしたでしょうか。
xamlを開く機会はあまりないとは思いますが、何かの参考になれば幸いです。

この記事が参考になったら「LGTM」をお願いします。閲覧ありがとうございました。