ロボアプリ上でのデータ保存(1)


 ロボアプリを作っていると、どこかにデータを保存し、それを再利用したいことがあります。ロボアプリではどのように処理を行うべきなのでしょうか。
 ソフトバンクロボティクスが発行している『ロボアプリ品質チェックリスト』をみながら保存すべき場所を探ってみます。

『ロボアプリ品質チェックリスト』
https://developer.softbankrobotics.com/jp-ja/documents/checklist

※本記述の内容は全て個人の解釈です。

APIドキュメントから探る

 APIドキュメントからデータの保存に使えそうなものを探してみます。ALPreferenceManagerモジュールの説明を見ると以下のように書いてあります。

ALPreferenceManager allows managing the robot preferences.
Robot preferences are used to store, among other, all the settings for the applications running on the robot.

 ロボットアプリのデータの保存に使えそうですね。

 ですが、『ロボアプリ品質チェックリスト』のチェック項目005-004-001では

PreferenceDBへの書き込みやPreferenceの使用がないこと

と書いてありAPIとしては存在しているものの、使ってはいけないと定義されています。

チェックリストから探る

 ではどこに保存するべきなのでしょうか。
 チェック項目007-001-004には

データ保存場所:アプリ内でデータ保存する場合はアプリフォルダ内(UUID配下)に保存していること※ソース上でもデータ格納先を確認すること

という記載がありました。
 アプリフォルダ内部に保存すれば良いようです。

UUID:ロボアプリのUUIDという意味だと思います。Application IDと同義と認識しています。

アプリフォルダ内部のパスを考える

 ロボアプリがインストールされる位置は、Choregrapheから[▶︎]ボタンを押した場合と、パッケージでインストールされ実行される場合で異なります。

インストール方法 アプリフォルダのパス
Choregrapheから[▶︎]ボタン <Applications>/.lastUploadedChoregrapheBehavior
パッケージでインストール <Applications>/<ApplicationID>

 違いを吸収するために、以下のように取得します。

アプリフォルダのパスを求める
appFolder = self.behaviorAbsolutePath().replace(self.behaviorRelativePath(), "")

 ビヘイビアの完全パスから、ビヘイビアの相対パスを削り取った文字列がアプリがインストールされている位置です。これで、Choregrapheから[▶︎]ボタンでインストールされようがパッケージでインストールされようが、実行場面に応じて適切な場所を得られるようになりました。

 次にデータを保存するフォーマットを考えてみましょう。
 ロボアプリ上でのデータ保存(2)に続きます。