1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

UiPathプロセスの依存関係を抽出してみよう(Part3:依存関係解析編)

Last updated at Posted at 2024-12-25

はじめに

「Part2:Nupkg取得編」では、Ochestrator APIを用いてアクティブとなっているパッケージをローカルにダウンロードしました。今回は、ダウンロードされたNupkgを展開し、そのなかのProject.jsonからプロセスの依存関係を抽出する方法を説明いたします。まだPart1とPart2をご覧になっていない方は、以下のリンクで目を通しておきましょう。

環境準備

項目 バージョン
UiPath Studio 2024.10.6
UiPath.WebAPI.Activities 1.21.1
対応OS Windows

Nupkgの解凍

Nupkgファイルは、その拡張子をzipに変換すると解凍できます。Project.jsonファイルを取得するために、解凍のワークフローを作成しておきましょう。

image.png

Part2でダウンロードしたNupkgファイルは、デスクトップ上のDownloaded Nupkgフォルダに保存されます。保存パスはパッケージダウンロード.xamlから引数としてパッケージ解凍.xamlに渡すこともできますが、今回はワークフロー内で直接パスを指定する方法を採用します。

①代入アクティビティで以下の式を代入します。

代入式
Dim stNupkgFolder As String
stNupkgFolder = System.IO.Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Desktop), "Downloaded Nupkg")

あわせて解凍先のフォルダも作成しましょう。

代入式
Dim stUnzippedPackages As String
stUnzippedPackages = System.IO.Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Desktop), "Unzipped Packages")

ワークフローは以下の通りです。

image.png

②フォルダの中のNupkgファイルを取得してループします。

image.png

③本文でファイルの拡張子を.zipに変更します。

image.png

④ファイルを展開アクティビティで、変換されたzipファイルを上記作成したUnzipped Packagesに展開します。

image.png

⑤ワークフローを実行して結果を確認します。

image.png

Project.jsonとは

そもそもProject.jsonファイルとは何かを簡単に説明します。Project.jsonは、自動的に生成されるファイルで、プロジェクトフォルダー内のメインに設定されたxamlファイルに関連付けられます。このファイルには、プロジェクトの依存関係や読み込まれたWebサービスなど、さまざまな情報が記載されています。詳細については、公式ドキュメントをご参照ください。

では、Office365_Work_1.0.3というプロセスを例にして、そのProject.jsonファイルの格納場所と依存関係の記載方法を確認しましょう。

①格納場所

Windowsプロジェクトの場合、Project.jsonは、Packageフォルダ\contentに入っています。

Windowsレガシの場合、Project.jsonは、Packageフォルダ\lib\net45に入っています。

今回の処理対象はすべてWindowsプロジェクトです。

②依存関係の記載方法

Project.jsonを右クリックし、メモ帳(Notepad++でも可)で開いたら、依存関係は下記赤枠のように記載されています。

image.png

今回は、その情報の抽出を目標としています。

依存関係の抽出

いよいよここまでたどり着きました。依存関係抽出器.xamlを作成してワークフローを組み立てましょう。

①データテーブルを構築して抽出情報をこちらに格納する準備をします。

image.png

Unzipped Packages中のプロセスフォルダをループしてProject.jsonを取得します。

具体的なコードは以下の通りです。

コード
'Unzipped Packages中のパッケージフォルダをすべて取得します
Dim arrPackagePath() As String
arrPackagePath=System.IO.Directory.GetDirectories(System.IO.Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Desktop), "Unzipped Packages"))
'Unzipped Packages中のパッケージフォルダをループします
For Each package As String In arrPackagePath
    '各パッケージの名前を取得します
    Dim stPackageName As String = System.IO.Path.GetFileName(package)
    '各パッケージフォルダの中のProject.jsonを探します
    Dim arrProjectJson As String() = System.IO.Directory.GetFiles(package & "\content","project.json")
    For Each jsonfile As String In arrProjectJson
        本文
    Next
Next

以上のコードを用いて組み立てたワークフローは以下の通りです。

image.png

③本文で、Project.jsonをテキストファイルとして読み込み、逆シリアルしてJobject型に整形します。

image.png

jsObject変数はProject.jsonの中身を逆シリアル化してJObject型に整形した結果です。この変数には、dependenciesキーが存在するはずですが、万が一存在しない場合にエラーが発生する可能性があります。そのため、念のためにIF分岐で確認しましょう。dependenciesキーが存在する場合は、それを利用して依存関係を抽出します。一方、存在しない場合はループをスキップします。

image.png

⑤キーが存在する場合は、緑枠(Sequence/DepAnalyzer)を展開して、依存関係を抽出します。抽出する前に、もう一度依存関係の構造を確認します。

image.png

まずは、Valueを取得します。

コード
Dim stAllDeps As String = jsObject("dependencies").ToString

そうすると、以下の部分が取得できました。

image.png

次に、アイエの順で、それぞれ、コンマ、コロン、ダブルコーテーションを分離して、一行一依存関係で情報を整理します。。

ア、コンマで各行の依存関係を分離してループします。

コード
Dim arrAllDeps() As String = stAllDeps.Split(","c)
For Each partDep in arrAllDeps
  本文
Next

イ、本文の中で、コロンを区切り文字にして依存関係名と依存関係のバージョンを分離します。続いてダブルコーテーションと改行コードを消去して、依存関係名と依存関係のバージョンを抽出します(エ)。

上記コードの本文
Dim arrPartDep() As String = partDep.Split(":"c)
Dim stDepName As String = arrPartDep(0).Replace("""","").Replace("{","").Replace(vbCrLf & vbCrLf, vbCrLf).Trim()
Dim stDepVer As String = arrPartDep(1).Replace("""","").Replace("}","").Replace(vbCrLf & vbCrLf, vbCrLf).Trim()

最後に、パッケージ名、依存関係名、依存関係バージョンをデータテーブルに追加します。

image.png

以上の手順を参照して作成した緑枠(Sequence/DepAnalyzer)は以下の通りになります。

image.png

⑥データテーブルをExcelファイルを書き込みます。

image.png

終わりに

それでは、実行して結果を見てみましょう。

image.png

依存関係が正しく抽出できましたね。長いですが、以上がUiPathプロセスの依存関係を抽出する方法でした。それほど頻繫に変わらない情報なので、月に一回ほど、抽出すればよいでしょう。

番外の予告ですが、最近Autopilot For Everyoneが流行っているため、それを利用して依存関係が取得できればいいなという発想で「UiPathプロセスの依存関係を抽出してみよう(番外編:Autopilot for everyoneで遊んでみた)」を執筆しようと思っております!楽しみにしてください。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?