清水理史の「イニシャルB」

UiPathでNASを自動操縦! ロボットでNASのファイルを操作する

 「身の回りのいろいろなものをRPAで操作してみよう!」ということで、普段から時間を見つけてはいろいろ試行錯誤しているのだが、今回、SynologyのNASをUiPathから操作する目処が付いたので紹介しよう。NASのパッケージアプリ「File Station」のAPIを利用することで、ファイルのコピーやMD5の取得など、大抵のファイル操作をロボットから制御可能になる。

「StudioX」の話はまた今度

 UiPathで、今、話題にすべきなのは「StudioX」なのだろうが、個人的にまだ十分に使い込んでいないため、機会を改めて取り上げることにしたい。

 ざっと使ってみた限りでは、「できることは減ったが圧倒的に簡単」という印象。カード形式のアクティビティも分かりやすいが、変数を意識しなくて済むため、はじめて使う人でもとっつきやすい。

 テーブル化されているExcelなら、どの見出しのデータをどこに入力していくといった指定をするだけで、Excelの表のデータを連続でウェブアプリに入力するワークフローが簡単にできる。

 StudioXに興味がある人は、UiPathのユーザーフォーラム「UiForum」のこちらのエントリーを参照して欲しいが、最新版のCommunity Editionを使っている場合は、プロファイルを切り替えるだけて試せる場合もあるので、ぜひ使ってみることをお勧めしたい。

プレビュー版がリリースされたStudioX

File Station APIでどんな処理ができる?

 さて、本題に入ろう。

 今回はUiPathを使って、SynologyのNAS上にあるファイルを自在に扱えるようにしてみる。ファイルサーバー上のファイルを扱う場合、コマンドを使ってローカルPC上から操作したり、FTPを使ってファイルをやり取りするのが一般的だが、今回はNASに実装されているAPIを利用する。

 SynologyのNASには、ファイルを操作するためのパッケージアプリとして「File Station」が用意されているが、このアプリにはWeb API経由でのアクセスが可能だ。UiPathからリクエストすることで、さまざまなファイル操作が可能になる。

Synologyの開発ツールページには、「File Station APIガイド」が用意されている

 詳細は、Synologyの開発ツールページにある「File Station APIガイド」を参照して欲しいが、ファイルのリストアップ、検索、MD5の計算、アップロード、ダウンロード、共有、フォルダ作成、コピー、ムーブ、圧縮、展開などが可能だ。例えば、次のようなリクエストで操作ができる。

  • ログイン
    http://servername:5000/webapi/auth.cgi?api=SYNO.API.Auth&version=3&method=login&account=user&passwd=password&session=FileStation&format=sid
  • 共有フォルダーの一覧表示
    http://servername:5000/webapi/entry.cgi?api=SYNO.FileStation.List&version=2&method=list_share

 試しに、ファイル情報を取得する以下のようなリクエストを投げてみよう。すると、次のような情報がJSONで返ってくる。

  • ファイル情報を取得
    http://servername:5000/webapi/entry.cgi?api=SYNO.FileStation.List&version=2&method=getinfo&path="/documents/在庫.xlsx"&additional=["size","time"]
{
    "data": {
        "files": [
            {
                "additional": {
                    "size": 11647,
                    "time": {
                        "atime": 1566629656,
                        "crtime": 1487245377,
                        "ctime": 1494330114,
                        "mtime": 1487245344
                    }
                },
                "isdir": false,
                "name": "在庫.xlsx",
                "path": "/documents/在庫.xlsx"
            }
        ]
    },
    "success": true
}

 こうした操作がUiPathから可能になることで、例えば、次のような処理を実行することが可能になる。

  • ロボットで処理が終わったファイルをアーカイブフォルダーに移動する
  • タイムスタンプやファイル名は違うが中身が同じファイルをMD5で見つけ出す
  • 操作対象のファイルをパスではなく検索で見つけ出す
  • 圧縮されているファイルから特定のファイルを取り出してロボットで処理する
QNAPのFile StationもAPIが公開されている

 UiPathというと、Excelなどのデータをウェブアプリに自動入力する、といった使い方をイメージする人が多いが、こうした処理に伴ってファイルを操作したいというニーズは少なくない。

 Windows上のファイル操作であれば、別のアクティビティやPowerShellなどを使うこともできるが、このAPIを使えば、NAS上のファイルも手軽に操作可能だ。

 なお、今回はSynologyのNASで試したが、QNAPのFile Station向けにも、APIガイド「File Station HTTP API v4.1」が公開されている。これを利用すれば、同様にUiPathから操作することが可能だ。

よく使うAPIをライブラリ化してみた

 UiPathからAPIを操作することは、慣れてしまえば簡単だ。

 使うアクティビティは「HTTPリクエスト」(UiPath.Web.Activitiesパッケージが必要)を使い、NASで公開されているAPIのアドレスに対して、さまざまなパラメーターを指定してリクエストを送信。戻ってきた値(JSON)から必要な情報を取り出せばいい。

 HTTPリクエストとJSONの使い方の基本は、「できるネット」の記事『【できるUiPath】REST APIとJSONを活用して外部のウェブサービスと連携させよう』で公開しているので参照して欲しい。

ウィザード形式で簡単に使えるが再利用しようとすると面倒

 このように、HTTPリクエストはウィザードから簡単に利用できるのだが、ファイルを操作する場合、いろいろな処理を組み合わせて実行するケースが多く、その度にHTTPリクエストを使うのが面倒になってくる。

 同一ワークフロー内なら、アクティビティをコピー&ペーストで複製していくこともできるが、もっと汎用的に使えるようにしておいた方が便利だろう。

 そこで今回は、よく使いそうなAPIをライブラリ化してみた。UiPathのユーザーであれば、パッケージマネージャーを使ってアクティビティパッケージを追加した経験があるかもしれないが、これと同じように、よく使うAPIをパッケージ化して、どのワークフローからも読み込んで再利用できるようにしてみたわけだ。

 起動時にライブラリを選んで、APIごとにワークフローを個別に作成し、引数を設定して外部からパラメーターを受け取れるようにしておく。これをパッケージとしてパブリッシュすれば、ほかのワークフローから簡単に再利用できるようになる。

APIごとにワークフローを作成し、引数を設定しておく
パッケージとしてパブリッシュする
パッケージとしてインストール可能になる

 具体的には、次の画面のようにアクティビティとして作成したライブラリをドラッグするだけで使えるようになる。アクティビティの中身は、ほぼ「HTTPリクエスト」と「JSONをデシリアライズ」なのでシンプルだが、必須のパラメーターをプロパティパネルから設定できるようにしたり、接続に必要なサーバー名などを変数で与えられるようにしてある。

ライブラリ化したAPIを利用

 上の画面のワークフローは、上から順番に次の処理を記述したものだ。

  1. NAS上にアーカイブ用の新しいフォルダーを作成
  2. NAS上の作業フォルダーにある既存のファイルをアーカイブフォルダーにムーブ
  3. PC上のファイルをNAS上の作業フォルダーにコピー
  4. 作業フォルダーのファイルとアーカイブフォルダーのファイルのMD5を計算
  5. MD5で2つのファイルが同じかどうかを比較

 いちから作ろうとすると割と面倒なワークフローだが、ご覧の通り、シンプルなワークフローで済む。

16のアクティビティを作成

 今回作ったアクティビティは次の16個となる。OpenSessionでスタートしてCloseSessionで終わるというルールがあるだけで、後は基本的にドラッグしてプロパティに必要な値を与えるだけで利用できる。

CloseSessionセッションを終了します(最後に配置)
Compressファイルまたはフォルダーを圧縮します(zip/7zip)
CopyMoveファイルをコピーまたは移動します
CreateFolderフォルダーを作成します
Deleteファイルまたはフォルダーを削除します
DownloadFileファイルをダウンロードします
Extract圧縮ファイルを展開します。
GetFileMD5ファイルのMD5を計算して取得します
GetInfoファイルの詳細(タイムスタンプやサイズ)を取得します
ListArchive圧縮ファイルの中身をリストアップします
ListFilesフォルダーのファイルをリストアップします
ListShareFolders共有フォルダーを一覧表示します
OpenSessionセッションを開始します(最初に配置)
Rename名前を変更します
Searchファイルを検索します
UploadFileファイルをアップロードします

 将来的には、UiPathのマーケットプレイス「UiPath Go!」で公開したいと考えているが、ドキュメントを作る必要があるなど、まだ少し手を入れなければならないため、現状はドラフト版のまま止めてある。もちろん、審査に落ちたら公開できないので、お蔵入りの可能性も十分にあるが……。

UiPath Go!に公開したいと考えている

ライブラリやスニペットを公開する取り組みが盛んになることを期待

 以上、今回はUiPathからSynologyのNASを操作する方法を紹介したが、個人的にはオリジナルのアクティビティ(ライブラリ)がとても簡単に作れることに感心した。

 UiPathの場合、こうして作成したライブラリやスニペットをUiPath Go!に公開できる環境も整っているのがメリットで、ユーザーの参加が活発になれば、さらにいろいろな機能をもっと手軽に利用できるようになるはずだ。

 特にREST API関連は、仕様を調べたり、戻り値を確認するだけでもそこそこ時間を取られるので、いろいろなAPIに簡単にアクセスできるようになるアクティビティが増えてくれると大変ありがたい。

 次は、ルーターに対して同じようなことができないかと画策している。うまくいったら、またこの場で紹介することにしよう。

清水 理史

製品レビューなど幅広く執筆しているが、実際に大手企業でネットワーク管理者をしていたこともあり、Windowsのネットワーク全般が得意ジャンル。最新刊「できる Windows 10 活用編」ほか多数の著書がある。