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