Automation Anywhere A2019ではBotファイルをローカルに保存できない?

Automation Anywhere A2019 Community Editionや無料体験版を利用していて、ふとしたことに疑問に思いませんか？そう、**作成した Bot をどうやって自分のローカルPCに保存したり、他の環境に移行したりすればいいのでしょう？**この記事ではこの疑問に答えます。

**環境**

* Automation Anywhere A2019.07 (ビルド1082/1089)以降

><font color="Red">**注:** 2020年4月リリースのA2019.11以降のCommunity Editionでは、マイBot画面で「Botをインポート」のメニューがめでたくつきました！ただしエクスポートの機能は相変わらずありません。また、無料体験版には引き続き機能はありません。</font>
>![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/479715/6d71f406-24d9-91a6-0f78-1d47d71e8766.png)
>また、API経由ではA2019.11よりエクスポート機能も提供されたようです。
>公式ブログ『[Enterprise A2019 Update: Clone Bots, Bot Import/Export, and More](https://www.automationanywhere.com/company/blog/product-insights/enterprise-a2019-update-clone-bots-bot-import-export-and-more)』より引用
>
>**Bot Import/Export — CI/CD foundation**
With the Bot Import/Export feature, Enterprise users are now able to execute export/import functionality via API. This is key for continuous integration/continuous deployment (CI/CD) pipeline integration. Users are also able to import bots into Test/Prod environments without bot editor licenses in these environments. 
>
>Note: This also allows Community Edition users the ability to export bots so they can be imported into their Enterprise environments (see Figure 2).
>
>![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/479715/c8a0af98-794e-24f3-e9bc-d299ad034d66.png)
>**Figure 2.** The Bot Import/Export feature in Enterprise A2019 ensures continuous integration/continuous deployment by letting users export and import bot functionality.


# ローカルPCへのBotの保存 / ローカルPC上のBotを開く機能はどこにいった！？
以下はCommunity EditionのマイBotの画面です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/479715/690032c3-a9bd-baba-b9a0-db156a3e9153.png)

そして以下はEnterpriseの無料体験版のマイBotの画面です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/479715/3621a434-459e-8a22-88ca-b1bb2b976a5c.png)

無料体験版の方には**「非公開の Bot とファイルは、他のユーザーが表示することはできません。Botまたはファイルが[公開]タブからチェックアウトされた場合、他のユーザーが表示および実行することはできますが、編集はできません。」**という気になる記述があるものの、両方とも「Botを作成」したり編集、コピー、削除、実行、検索、分析するコマンドはあるものの、ローカルPCへのBotの保存 / ローカルPC上のBotを開くようなコマンドは見当たりません！

# 実はちゃんとあります...権限設定により禁止が可能
『[Enterprise Version A2019.07 (Builds 1082 and 1089) リリースノート](https://docs.automationanywhere.com/bundle/enterprise-v2019/page/enterprise-cloud/topics/release-notes/cloud-release-a2019-07.html?_LANG=jpjp)』の記載に、以下のようなものがあります。

>**Bot のインポートとエクスポート**: ユーザーは、依存関係のあるBot をすべてのアクションを含む共通のzipファイルにエクスポートできます。ユーザーは、エクスポートプロセスからパッケージを手動で除外できます。インポートされたすべてのアクション パッケージは、ターゲットのCloud Control Roomに自動的にインストールされ、Bot はユーザーのプライベートワークスペース内に配置されます。

『[Bot のインポート](https://docs.automationanywhere.com/bundle/enterprise-v2019/page/enterprise-cloud/topics/control-room/bots/my-bots/cloud-import-bots.html?_LANG=jpjp)』より引用:
>**前提条件**
>Bot はプライベートワークスペースにのみインポートできます。インポート処理を完了するためには、Bot がインポートされた後、パブリックワークスペースにインポートしたファイルをチェックインする必要があります。
>Bot をインポートするには、次の権限が有効になっていることを確認します。

>* Bot のインポート権限
* Bot Editorライセンス
* パブリックワークスペースへのチェックイン権限
* パッケージ管理権限

>必要なBot はすでにエクスポートされており、インポートするパッケージを含むzipファイルへのリンクが記載された電子メールが受信されます。
>以前にエクスポートされたBot はすべてパブリックリポジトリにあり、新しいコントロールルームから展開できるようにインポートおよびチェックインする必要があります。

『[Bot のエクスポート](https://docs.automationanywhere.com/bundle/enterprise-v2019/page/enterprise-cloud/topics/control-room/bots/my-bots/cloud-export-bots.html?_LANG=jpjp)』より引用:
>**前提条件**
>エクスポートできるのは、パブリックワークスペース内の Bot のみです。 Bot をエクスポートするには、最初にこれらの Bot をパブリックワークスペースにチェックインしてから、プライベートワークスペースにエクスポートします。
>パッケージの表示権限を含む、Botをインポートおよびエクスポートするための正しいロールと権限を持っていることを確認します。

つまり図解するとこんなしくみになっています。Community Editionと無料体験版では、これらの必要な権限がユーザーに割り当てられていないようです...
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/479715/0aadfc2e-7e8a-ba93-2909-c01a8a1a4ad7.png)


オンプレミス版、有料クラウド版では権限をつけることができ、権限がついた画面は以下の通りです。

非公開 (プライベートワークスペース)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/479715/18f28c58-8153-598c-009a-011612f8ae57.png)

公開 (パブリックワークスペース)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/479715/f2d58036-89f8-7bb8-c59a-e7c0c7cdf0f9.png)


# Bot ファイルの拡張子と中身は...!?
メールで受信したダウンロード先からダウンロードできるのはzip形式のファイルです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/479715/84e357db-8ff6-07d9-c804-1dbe9383ec98.png)
以下のような、MessageBoxがひとつだけ含まれる簡単なBotを作成してエクスポートしてみました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/479715/45a3fac6-e64f-3dfb-133a-b5dbeaacea1c.png)
すると、zipファイルの中は以下のようなファイルが入っています。

```
bot-command-messagebox-2.0.0-20191223-210352.jar (パッケージファイル)
manifest.json (マニフェスト)
Automation Anywhere (Folder)
 ┗ Bots (Folder)
     ┗ MessageBox001 (Bot 本体)
```
エクスポート前に、依存関係を確認する画面で確認できるファイル (Bot 本体、依存関係にあるリソースファイル、利用されているパッケージファイル) が含まれていることがわかります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/479715/6bea2b41-95a3-f783-f73e-0d490e0ded4e.png)

.jarファイルはメッセージボックスのロジックを記載したパッケージファイル (Java) です。manifest.jsonとMessageBox001はJSON形式で記載されています。

```JSON:manifest.json
{
    "files":[
    {
        "path":"Automation Anywhere\\Bots\\MessageBox001",
        "contentType":"application/vnd.aa.taskbot",
        "metadataForFile":null,
        "manualDependencies":[],
        "scannedDependencies":[]
     }],
    "packages":[
    {
        "name":"MessageBox",
        "version":"2.0.0-20191223-210352",
        "path":"bot-command-messagebox-2.0.0-20191223-210352.jar"
    }]
}
```

よく見ると、Bot本体もすべてJSONで構造とロジックが定義されていますね。

```JSON:MessageBox001
{
  "triggers":[],
  "nodes":[
    {"uid":"776eb52b-b985-461a-ba4e-d0b02651d0f6",
     "commandName":"messageBox",
     "packageName":"MessageBox",
     "disabled":false,
     "attributes":[
         {"name":"title",
          "value":{
             "type":"STRING",
             "string":"Automation Anywhere Enterprise Client"
          }
     },
     {
          "name":"content",
          "value":{"type":"STRING","string":"Hello World!"}
     },
     {
          "name":"scrollLines",
          "value":{"type":"NUMBER","number":"30"}
     },
     {
          "name":"closeMsgBox",
          "value":{"type":"BOOLEAN","boolean":false}
     }
     ]}
  ],
  "variables":[
   {
      "name":"prompt-assignment",
      "description":"A variable you can use for assignments",
      "type":"STRING",
      "subtype":"UNDEFINED",
      "readOnly":false,
      "input":false,
      "output":false
   }
  ],
  "breakpoints":[],
  "packages":[
       {
        "name":"MessageBox",
        "version":"2.0.0-20191223-210352"
       }
  ]
}
```

より複雑なBotでは、さまざまなパッケージやリソースファイルが同梱されることになります。

# Community Edition、無料体験版では機能はつかないのか？
このように、オンプレミス版、有料クラウド版ではBotのインポート/エクスポート機能が利用できるものの、Community Edition、無料体験版では使えないままのか？というと疑問が残ります。やはり基本的な機能なので、初心者ユーザーにも使えるようにしてほしいところです。これはAA社にリクエストしたいところです。Community Edition、無料体験版とも世界中のユーザーがシングルテナントで使っているから、というのも理由なのかもしれませんが...

><font color="Red">**注:** 2020年4月リリースのA2019.11以降のCommunity Editionで「Botをインポート」が実現されました。

# ローカルPCからBotファイルを実行する機能はつかないのか？
後、関連する機能でもう一つ気になるのが、ローカルPCからBotを実行する仕組みがいまのところないことです。v11の時は.atmxというファイル形式でローカルPCにBotが保存されていたため、これをダブルクリックすればBotを開始することができました。A2019ではローカルにファイルがないので、ファイルトリガーなどを仕掛けてキックするしかないのでしょうか...これもAA社にリクエストしたいところです。

### 有償版ならUnattended Bot RunnerでAPI経由の実行が可能
A2019.13で確認。『[Automation Anywhere A2019でコマンドラインからBotを実行する](https://qiita.com/RPAbot/items/8c313f137ff089a0014d)』を参照。

### ファイルトリガーを動かしてみる
たとえば先ほどのMessageBoxを表示するBotにファイルトリガーを仕込みます。ファイルトリガーをパレットからドラッグ＆ドロップして、リッスンするファイルを指定します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/479715/c0f9824c-10a2-1850-7c07-0f77537f659a.png)

その後、トリガーを有効にするには、Botを保存した後に「トリガーで実行」を行っておく必要があります。すると、トリガーをリッスンする状態となります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/479715/d5fe5c68-d3c7-5a26-6c92-37b00eb4be1b.png)
この画面はそのままに、もうひとつブラウザーを開いて別のBotを作成/編集/実行することも可能です。ファイルトリガーの条件が満たされると、Botが動き出し、メッセージが表示されます。


# まとめ
作成したBotをインポート/エクスポートするには、オンプレミス版または有料クラウド版が必要であることがわかりました。
作成したBotの資産を横展開するためには、有料版が必須となります。

では、また！