BizRobo! の RFS を社内運用しながら作成した FAQ を紹介します。

## はじめに

これまで社内ユーザ（開発者？）から受けた `RFS` に関する質問をベースに FAQ を作成しました。今後も追記予定です。

## FAQ

### 環境構築

#### Q. `RFS` は `MC` や `Kapplets` と同じサーバ上に構築することは可能ですか？

>**可能です。**
いずれも `Tomcat` で動作するシステムであり、同居構成は可能です。

:::note warn
`MC` と `RFS` を同一のサーバに構築する場合にも、以下の `RFS` のURLに `localhost` を設定するのはやめましょう。`RFS` への接続は RoboServer から実行されるため、接続エラーになってしまうことがあります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3090491/aa14a09e-e47a-3d2a-f252-94d37fcb8641.png)
:::

#### Q. `RFS` と接続する `MC` は、Tomcat 別建て構成の環境を用意する必要がありますか？

> **必ずしも必要ではありません**
`RFS` の用途が本番環境での運用という場合には Tomcat 別建ての `MC` をご用意ください。ただし、開発環境・検証環境用に簡易に `MC` を準備したい場合には、`組み込みMC` をご利用いただけます。

https://qiita.com/ParakeetOnTheHead/items/b48d4d9293109858754d

#### Q. `RFS` のルートディレクトリにリモートパスを設定することはできますか？

> **出来ません。**
ルードディレクトリ（`data-path`） には `RFS` を構築するサーバのローカルパス（`C:/RFS` など）を設定してください。
>
> `RFS` でリモートパス（`\\san-server\remote-rfs`）を設定する場合には、`RFS` に接続した `MC` のレポジトリ（> ロボット ファイルシステム）へ以下の様に設定してください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3090491/b5f98a89-8787-e518-32d7-b6d991840f99.png)

#### Q. `RFS` にリモートパスやFTPサーバのパス（RFSサーバ外のパス）を設定する場合、`allow-absolute-paths` の設定を `true` にする必要はありますか？

> **無いです。**
`RFS` では `data-path` で設定したディレクトリ以下の領域をファイルシステムとして識別しますが、同一サーバ内で `data-path` 外の領域を `RFS` のファイルシステムとして識別したい場合に設定を `true` にします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3090491/0b2b28f7-c2c9-4305-4613-25b3c79c0f6e.png)

#### Q. 一つの `MC` に `RFS` を複数設定することはできますか？

> **できません**
またその逆も同じで、一つの `RFS` を複数の `MC` で共有することもできません。 `MC` と `RFS` は１:１の関係となります。


### RFSの利用

#### Q. `RFS` って、どんな時に使うのですか？

> `net use` コマンドを使ったリモートドライブアクセスにウンザリしている時や、ロボットに読み込ませるファイルパスの環境依存にウンザリしている時[^1]などに使ってください。

[^1]: `C:\Users\user1\rpa\input` の様にログインユーザや実行環境に依存したファイルパスをロボット内で読み込ませる場合や、そのような実行環境に依存したファイルパス一式をまとめた `Config.xlsx` ファイルを環境ごと特定の場所に配置して、それを読み込ませる場合など。 

https://qiita.com/ParakeetOnTheHead/items/a07d7dadb6b0b1630881

#### Q. `RFS` って、リモート端末からしか使えなですか？

> :no_good: そんなことはないです。
BizRobo! v11.3 時点の構築手順書には「一例」として `DAS` 経由でリモート端末を使用する場合の手順が書かれていますが、リモート端末を使用しない場合でも以下の様に指定デバイスで `local` を選択することでサーバ上で処理されるようになります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3090491/6bd2bb41-d7e7-f33e-72e2-28b0d64abd60.png)



#### Q. 同じ `ファイルシステム名` の `RFS` 設定をプロジェクトごとに作成することはできますか？

> **できません。**
`ファイルシステム名` は `RFS` 全体でユニークな値である必要があります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3090491/1993a733-8ecf-fdb7-6aff-cb56464754a0.png)


#### Q. 特定の `ロボット ファイルシステム` 設定を、プロジェクトを超えて全体で共有することはできますか？

> **できません。**
`ロボット ファイルシステム` の設定は基本的に `プロジェクト` 単位で設定する必要があります。

::: note
ただし、ロボット個別であれば `プロジェクト外` のロボットについてもアクセストークンを登録することでアクセスが可能になります。
:::

#### Q. 運用中のロボットなので `MC` の設定内容は正しいはずですが、Design Studio で編集しようとすると `it may be disabled in Management Console` とエラーが出るのはなぜでしょうか？

> Design Studio から接続している `Management Console` に問題があるというエラーです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3090491/70c542ab-9872-b92f-fadb-c56e20ac38e3.png)
Design Studio 内には複数の Management Console を登録することが可能ですが、優先的に参照に行く先（`プライマリ設定`）が `RFS` の設定がされている MC に向けられていることを確認します。
> 
> Design Studio のメニューバーから 「設定」> 「Design Studio 設定(S)...」を選択し、サブウィンドウを開きます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3090491/5663f9f4-ca7c-a986-0cf0-f3259ae2fa48.png)
> 一番右のタブ（Management Console）を選択し、`プライマリとして使用` を ON に設定してください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3090491/a312a92d-db75-724b-b004-27e10f207c4f.png)

#### Q. `RFS` で扱えるファイルサイズの上限はありますか？

> v10.7 当時は FTP 経由のファイルサイズに上限(100MB)がありましたが、v11.3 現在ではソフトウェア的な上限はありません。[^2]

[^2]: Tomcat 上で動作するシステムですが、Tomcatの設定ファイルはデフォルトのままで、400MB強のファイルのやり取りを実施しているので、Tomcatの設定も気にする必要はありません。


#### Q. `ロボット ファイルシステム` の一般情報を設定する際に `ユーザー名` と `パスワード` は必要ですか？

> **基本的に不要です**
とはいえ、アクセスするために認証が必要なリモートドライブやFTPを設定する際には必要です。既存のアカウントを使いまわすのではなく、 ロボット用に専用に発行したアカウントを設定して認証しましょう。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3090491/95c7dddd-e16d-e0a7-fb05-50ea5a928a3a.png)

#### Q. BOX 上のフォルダを `RFS` に割り当てると日本語のフォルダやファイルが文字化けしてしまいます。回避策は？

> 残念ながら文字化けを防ぐ方法は現在のバージョン（v11.3）ではないので、「日本語の文字列を使わない」範囲での利用を探るしかありません。

#### Q. `RFS` のログってどこに出力されますか？

> Tomcat をセットアップしたフォルダ配下の `logs` フォルダ内に、catalina.log などの他のログファイルと一緒に出力されます。
```cmd:ログファイルのパス
📁 apache-tomcat-9.0.x
 ├─ 📁 webapps
 ├─ 📁 logs  
 │  └─ 📄 rfs.log
 :
```

#### Q. `RFS` のログが記録されるタイミングはいつですか？

> ロボットにより `MC` 経由で `RFS` にアクセスされるたびにログが記録されます。
`MC` から `ロボット ファイルシステム` の設定を登録/変更した記録は `RFS` の利用ログではなく、`MC` の監査ログに記録されます。

#### Q. RFS はどのくらいリソース使う？

> ファイルの保管と読み書きを行う機能に見えるため一見大量のリソースを消費しそうな雰囲気ですが、簡単な実験をしてみたところ、以下のような結果になりました。
>
> 特にチューニングをしていないデフォルト設定の Tomcat9 上に構築した `RFS` に対し、405.2MBのファイルを読み書きした結果です。
>
> `ロボット ファイルシステム` のパスはBOX上に設定し、FTPSによりデータの読みこみ（ダウンロード）と書き込み（アップロード）を行いました。
>
> ローカルディスクに対しての読み書きであれば、OSレベルでのメモリやCPUの消費、ディスクIOなどが更に発生したと思いますが、下のグラフを見る限りでは `RFS` 自体はピークであっても 150MB程度のヒープ消費にとどまり、プロセスレベルでも300MB弱のメモリ消費でした。大きなファイルであっても `RFS` 内に溜め込んでディスクに書き出すのではなくストリーミングデータとして小出しに転送し、リソースの大量消費を防ぐ構造の様に思えます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3090491/3c363eb6-df3a-aa59-8492-23e9c6633dd0.png)

:::note warn
`RFS` 自体は大きなファイルを取り扱ってもリソースを大きく消費することはないですが、ロボットの組み方によっては RoboServer側 や DAS内の変数にデータを一時保管することにより、リソースを消費してしまうのでご注意ください。

`RFS` 自体には取り扱えるサイズの上限は設定されていませんが、`RFS` を使用する際には一度データをロボットの変数に格納する必要があります。DAS や RoboServer側のLocalHub（Node.js）のヒープサイズ上限が1.4GBだとした場合、それ以上/それに近いサイズのファイルを `RFS` で読み込もうとすれば、ロボット自体が `Out of Memory` でダウンする可能性が高いと思われます。
:::

## まとめ

製品の特長を理解し、無理なく正しく利用しましょう。

以下も参考にしてください。

### RFS に関する関連投稿

https://qiita.com/ParakeetOnTheHead/items/7177e81d30275e9b7193