【OpenRPA】「OpenFlow」と「NodeRED」をローカルインストールしてみる

OpenRPAの記事、ほとんど私しか書いてないですね・・・。
ちまちま記事増やしていきます。

# はじめに
以前、開発者ご本人からこんなコメントをもらいました。

> @skadefro
> Have you seen the new feature of running openflow-nodered locally?

なるほど。OpenFlow-NodeREDをローカルで動かす新機能ですか。

[以前に書いた記事](https://qiita.com/yoshiyuki-iwata/items/0ea7d787441a661d2624)では、Dockerを使ってコマンドどーん！で立ち上げたのですが、今回の方法はOpenFlowとNode-REDをサービスとして起動します。
また、「OpenFlowとNode-REDは、それぞれ違うサーバーで動かそう！」といったことができます。

さっそくやってみましょう。

# 必要なもの

Windowsにインストールする前提です。
以下をあらかじめインストールしておく必要があります。

+ Node.js
  - https://nodejs.org/ja/
+ MongoDB
  - https://www.mongodb.com/try
+ RabbitMQ
  - https://www.rabbitmq.com/download.html

ダウンロード後、インストーラーに従ってインストールします。

## RabbitMQ補足その１

RabbitMQは、Erlangを前提とするためあらかじめインストールしておいてください。
https://www.erlang.org/downloads

## RabbitMQ補足その２

RabbitMQの管理画面を有効化する必要があります。
~~私はこれをやらなかったせいでOpenFlowからシナリオを実行できませんでした。~~
RabbitMQのインストール完了後、コマンドプロンプトから以下のコマンドを入力します。

``` Console
"C:\Program Files\RabbitMQ Server\rabbitmq_server-3.8.8\sbin\rabbitmq-plugins.bat" enable rabbitmq_management
```

※ パスはインストールしたバージョンその他環境に応じて変えて下さい。

コマンド実行後、http://localhost:15672/ にアクセスし、以下のような画面が表示されることを確認します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/517338/f77f828c-4767-ea9e-5490-151f8493dc8b.png)


# OpenFlowをローカルインストール

[OpenRPAのドキュメント](https://github.com/open-rpa/docs) (2.2.1. Quickstart Running OpenFlow using NPM )を参考にやっていきます。

## buildtoolsのインストール

コマンドプロンプトから以下を実行します。

``` Console
C:\> npm install --global windows-build-tools
```

※ マニュアルでは npm install --global windows-buil<b>t</b> -tools となっています。
　 スペルミスっぽいので、上記のコマンドを実行してください。

## openflowのインストール

コマンドプロンプトから以下のコマンドを実行します。

``` Console:openiapのインストール
C:\> npm i openiap -g
+ openiap@1.0.89
added 781 packages from 697 contributors in 116.3s
```

``` Console:設定ファイルの作成
C:\> openflow-cli --init
Creating openflow.env
```

``` Console:サービス登録
C:\> openflow-cli --install openflow
{"message":"Serviceopenflow installed","level":"info"}
```

## 初回アクセス

ブラウザから、http://localhost.openrpa.dk にアクセスしてみましょう。
こんな画面が表示されていれば、インストールは成功です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/517338/a1040a5f-8f5d-1e97-d0e4-02b2703b2874.png)

## ユーザーの作成

OpenFlowのユーザーを作ります。
SIGN INボタンの下に英語が書かれていますが、「新しいユーザー名を入力すると、自動的のそのユーザーが作られるよ」とのことです。

自分のメールアドレスと、任意のパスワードを入力して「SIGN IN」を押すと・・・
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/517338/0efdeaa9-6769-2833-ea6e-d91e8b7c0ca3.png)

新しくユーザーが作成されて、サインインできます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/517338/ebe168c1-5909-8f55-4ba7-cabd6e88cd65.png)


# Node-REDをローカルインストール

余談ですが、Node-REDのインストールでかなりハマってました。
マニュアル見てもNode-REDのインストール手順書いてなかったんですよね。
上記のOpenFlowのインストールをやればNode-REDも使えると思っていたので、Node-REDの画面にアクセスすらできなくてかなり悩んでました。

[OpenFlowのReadme](https://github.com/open-rpa/openflow/blob/master/readme.md)を見て、もしかしてコレか！？と試したところでうまくいったので、以下の通りインストールします。

## Node-REDのインストール

コマンドプロンプトから以下のコマンドを実行します。

``` Console:Node-REDのインストール
C:\> npm i openflow-nodered -g
+ openflow-nodered@1.0.89
added 543 packages from 506 contributors in 92.33s
```

``` Console:設定ファイルの作成
C:\> openflow-nodered-cli --init
Creating noderedlocal.env
Creating noderedremote.env
```

``` Console:サービス登録
PS C:\WINDOWS\system32> openflow-nodered-cli --install noderedlocal
username? [OpenFlowで作ったユーザー名]
password? [OpenFlowで作ったユーザーのパスワード]
{"message":"signed in as [ユーザ名] with id xxxxxxxxxxxxxxxxxxxxxxxx","level":"info"}
{"message":"websocket.close","level":"verbose"}
{"message":"NodeJS version v12.10.0 Config C:\\WINDOWS\\system32\\noderedlocal.env","level":"info"}
{"message":"Installing servicenoderedlocal","level":"info"}
{"message":"Servicenoderedlocal installed","level":"info"}
{"message":"Quit","level":"info"}
```

サービス登録の時に、OpenFlowのユーザー名とパスワードを聞かれるので入力してください。

## 初回アクセス

ブラウザから、http://localhost.openrpa.dk:1880 にアクセスしてみましょう。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/517338/21dbd615-b660-ae6d-49d9-d799e6942078.png)

こんな画面が出ればインストール成功です。

## ログイン

[Sing in with SAML]ボタンを押します。
すでにOpenFlowにログインしているのであれば、SAML認証によってそのままログインできます。
未ログインであればOpenFlowのログイン画面が表示されるので、OpenFlowに作ったユーザーでログインします。

ログインするとこんな画面が表示されます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/517338/d22de8ab-4bba-f3b5-b9c0-06a15c2823f6.png)

これでローカルインストール完了です。

# 補足：サービスの起動停止

コマンドでやる場合は

``` Console:OpenFlow起動
openflow-cli --stop openflow
```

``` Console:OpenFlow停止
openflow-cli --start openflow
```

``` Console:Node-RED起動
openflow-nodered-cli --start noderedlocal
```

``` Console:Node-RED停止
openflow-nodered-cli --stop noderedlocal
```

Windowsのサービスとして登録されているので、サービスの画面からでも起動・停止できます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/517338/e3d67271-e3f6-8d67-e7c9-32b236be5077.png)

# 補足：設定ファイルについて

サービス登録のコマンドを叩くと、以下の設定ファイルが自動的に作成されます。

+ OpenFlowの設定ファイル
  - `C:\Windows\System32\openflow.env`
+ NodeREDの設定ファイル（ローカル接続）
  - `C:\Windows\System32\noderedlocal.env`
+ NodeREDの設定ファイル（デモ環境 app.openiap.io 接続）
  - `C:\Windows\System32\noderedremote.env`

各設定値の内容まで理解できていないのですが、１つわかっていることだけ。
最初に「OpenFlowとNode-REDは、それぞれ違うサーバーで動かそう！」と書きましたが、Node-REDの設定で、どこのOpenFlowに接続するかを定義すればよさそうです。

``` noderedlocal.env（一部抜粋）
saml_federation_metadata=http://localhost.openrpa.dk/issue/FederationMetadata/2007-06/FederationMetadata.xml
saml_issuer=uri:localhost.openrpa.dk
api_ws_url=ws://localhost.openrpa.dk
domain=localhost.openrpa.dk
jwt=
```

4か所のlocalhost.openrpa.dk を、接続したいOpenFlowのURLに書き換えます。
また、`openflow-nodered-cli --install noderedlocal`を実行すると、そのログイン情報として`jwt`が設定されるため、`jwt`を空白に設定した上で再度`openflow-nodered-cli --install noderedlocal`コマンドを実行します。

# おわりに

OpenFlowとNode-REDに関するチュートリアルは、以下の記事をご覧ください。
[【OpenRPA/OpenFlow】Node-REDを使ってRestAPI経由でシナリオ実行する](https://qiita.com/yoshiyuki-iwata/items/f423b657d5df08fa74c7)