【UiPath】プロジェクトの内容をドキュメント化したい

# はじめに

この投稿は「UiPathのプロジェクトを読み取って、その内容を出力するツールを作る」という内容です。「コードレビュー」を楽にするために作りました。

# 作成したもの

**PJDocument** という名前で、UiPathMarketに公開しています。（ProjectDocumentの意）
スニペット形式（xamlファイル形式）でアップしているので、自分用にアレンジも可能です。
　[UiPath marketplace - PJDocument](https://marketplace.uipath.com/ja/listings/jpn4jogqcesx9gr9y37nz)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/154139/3fea332f-ef5f-4045-3ba6-09fd5a3e5ff0.png)

# 作成した背景

自分で作ったコードの見直しをしたり、他人の作ったコードのレビューをする際に、多くの人が UiPathStudioの「ワークフローアナライザー」を使うと思います。

　↓↓↓ [UiPath Studio Guide - About Workflow Analyzer](https://docs.uipath.com/studio/docs/about-workflow-analyzer)
![Workflow Analyzer](https://files.readme.io/7111fa6-ribbon.png)

「ワークフローアナライザー」は優秀で「**良くないコード**」を教えてくれますが、レビューでは「**良いも悪いも含めて、一覧で俯瞰したい**」時があります。
が、UiPathこの一覧機能が今のところありません。

なので、例えば「ネーミングに統一感があるか？誤字脱字は無いか？」を見たいときには、現状ではファイルをひとつひとつ開いて確認していきます。これが非常に辛い。

なにか良いツールは無いかな？と思ったら、ありました。

　・[UiPathのコーディングチェックツールを作ってみた【RPA】](https://qiita.com/jw-automation/items/003dd0ef116cf968c3a8)

まさにこれだ！と思ったのですが、使用するにはxamlファイルをアップロードする必要がありそうです。
ワークフローファイルは「業務仕様を記載したドキュメント」なので、ちょっと気が引けます。また、このサイトがなくなったらレビューできなくなり依存してしまうので、気軽には使えません。残念です。

なので、自分で作りました。

カスタムアクティビティやExe形式のプログラムだと「中で何やってるか分からないから使えない。ダメ！」となりそうなので、xamlファイルで書きます。

出力結果はHTMLにして、ネットに接続できないスタンドアローンな環境でも見れるようにします。


# 処理フローのイメージ

プロジェクト内のxamlファイルをループしながら情報を取得しデータテーブルに格納していきます。最後にデータテーブルの内容を、HTMLに出力します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/154139/2825ffab-2bc6-1fe4-2a47-6988135e6680.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/154139/063263b0-d7f9-bf8a-7bc1-59c99084aa3a.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/154139/7137aecc-7cf5-9ca6-7c31-27c365bd7915.png)


# 実行結果

下記のようなHTMLが出力されます。

UiPathアカデミーのReFrameworkを使った課題のプロジェクトを読み込ませました。（一部のファイルはわざと抜粋しています）

まず最初にproject.jsonの内容が出力されます。
「説明が入っているか？」「バージョンは正しいか」等を確認できます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/154139/2810be41-b275-dc36-7665-84af7f803749.png)

次にxamlファイルの一覧が出力されます。
説明（annotation）や呼び出し回数（invokedcount）を確認できます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/154139/2337b430-1a1d-b4a6-a47b-cc8cb092c7dc.png)

次にアクティビティの一覧が表示されます。
表示名（displayName）や説明（annotation）を確認できます
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/154139/1e318963-0548-afac-67ed-7615328c4bf8.png)

次は引数です。方向（direction）や変数名などを確認できます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/154139/91200f5c-6c48-66d2-c32e-cf8e356a760b.png)

次は変数です。初期値（default）やスコープ（ScopeLevel）を確認できます。「Top」と記載されていれば、xamlファイル内全体のスコープです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/154139/97c7a4f4-ef4f-94b9-3b94-ff0bc9bb4254.png)

次はワークフロー呼び出しです。一覧に加えツリー構造でも確認できます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/154139/f47a021d-0dc7-99e6-86a3-1c4bae9cdf30.png)

次はUIセレクターの一覧です。タイムアウトやセレクター値を確認できます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/154139/18a0cf93-872a-a9fd-cd6e-43a8f3b4c85a.png)

最後は起動アプリケーションです。アプリケーション名が確認できます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/154139/18f0a171-76bd-c0f7-ca75-8141afd8618f.png)


# 課題

一応、形にはなりましたが、まだまだ課題があります。

・処理が少し冗長、かつ統一感がない
・無効にしているアクティビティも取得してしまうケースあり
・アクティビティ種類ごとの使用数も知りたい
・アクティビティ種類が英語なので日本語にしたい


# 終わりに

まだまだ初版（作ったばっかり）なので、少しづつ改良して行こうと思います。

作ってから言うのも微妙ですが、いつかこの手の「プロジェクトドキュメント化」ツールが「UiPath公式」で提供されることを期待しています。（Studioの機能にあっても良いのでは）

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