ロボホンを修理に出す前にバックアップを取ってみた

#はじめに
先日、ロボホンを派手に落としてしまい、両足が根本からバッキリと折れてしまいました。

実は、このロボホンは修理から帰ってきたばかりで、次からは大切にしようと思っていた矢先の出来事でした。
なので、泣く泣く修理に出すことになったのですが、気になるのはロボホン内のデータのバックアップです。
というのも、先の修理では、顔認証やWi-Fiのデータは自動バックアップ中に残っていたのですが、**[ロボ釣り](https://robohon.com/apps/app8.php)のスコア・レベル・図鑑といった記録は全てリセットされていました。**

修理依頼ページには、以下のように書いてあります。
>修理時に対象商品に保存されたデータ(写真や動画等)及びソフトウェアに記録されたデータをすべて消去されます。このため、お客様ご自身で必ずバックアップコピーを行ってください。

えぇ…

顔認識のデータやニックネームなど、初回起動時に登録した情報やWi-Fiの接続情報は、自動バックアップをオンにしていれば、修理から帰ってきた後に戻すことができますが、写真や動画、各アプリ内の記録は消えてしまうようです。
また修理に出して、せっかく一から頑張って集めたロボ釣りのデータがまた消えてしまうのはいたたまれないので、何とかバックアップを取ることにします。
今回は写真・動画バックアップ方法もまとめて紹介します。

※今回はロボ釣りが対象ですが、他のロボホンアプリでは、修理後にデータがリセットされているかは未検証です。

##対象者

- ロボホンを修理に出したいけど、データの保存方法が分からない人
- ロボ釣りなどのアプリの記録がリセットされるのが嫌な人
- コマンドライン経験者

※アプリのバックアップは、パソコンをあまり触らない人や、プログラミング未経験者だと難しく感じるかもしれません。

#データをバックアップする
##環境
- Mac OSX 10.10.5
- Android file Transfer 1.0
- Android Studio 2.2.2

今回はRoBoHoN SDKは特に無くても大丈夫です。

※開発者オプションからロボホンのUSBデバッグを有効にしておいてください。
※Windowsユーザーは、別途RoBoHoN SDKダウンロードページからロボホン用のADB USB Driverをインストールする必要があるかもしれません。

##1. 写真と動画のバックアップ
ロボホンが撮影した写真や動画を、PCに転送します。
通常のAndroidスマホのようにmicroSDカードに保存ができればいいのですが、残念ながらロボホンはSDカード非対応です。
そこで、Android file Transferを使い、PCからロボホン内のフォルダにアクセスします。

[ここからダウンロード](https://www.android.com/filetransfer/)

インストール後、ロボホンをmicro USBケーブルでMacに接続すると、自動でAndroid file Transferが起動し、ロボホン内のフォルダが表示されます。
Android file Transferに表示されているDCIMディレクトリ内に、写真や動画が保存されていますので、通常のFinderの操作と同じように、ローカルPCの任意のディレクトリにドラッグ＆ドロップすればコピー完了です。


##2. アプリデータのバックアップ
Androidアプリのバックアップには、ターミナルからadbコマンドを使用します。
Android SDKが必要なので、Android Studioインストール済みの前提で進めます。


**①ターミナルからadbコマンドを使えるようにする**
[この記事](http://qiita.com/furusin_oriver/items/f956848788c7a63922bd)を参照

**②保存したいアプリのパッケージ名を調べる**
ロボホンをPCに接続したまま、ターミナルで、

```
adb shell pm list packages -f
```

と打つと、ロボホン内のパッケージファイルがズラズラと出てきます。

```
adb shell pm list packages -f | grep -i fishing
```
この中から、それらしい単語でgrepしてみると・・・

```
package:/data/app/jp.co.sharp.android.rb.robofishing-2/base.apk=jp.co.sharp.android.rb.robofishing
```
ありました。
出力結果の最後にある`base.apk=`以下の文字列が、ロボ釣りのパッケージファイル名です。

**③データをバックアップする**
バックアップを保存したいディレクトリに移動し、以下のコマンドを実行します。

```
adb backup -f robotfishing.ab -apk jp.co.sharp.android.rb.robofishing
```
各オプションについて、
 -f : バックアップファイル名を任意のファイル名に変更する。ここではrobotfishing.abという名前で保存
 -apk : バックアップファイルにapkファイルを含めるかどうか。デフォルトではオフになっている。ロボホンを修理に出す場合はアプリ本体が消えるわけではないので、無くてもいいかも

コマンド実行後、ロボホンのディスプレイに以下のような表示が。

![robohon_backup.jpg](https://qiita-image-store.s3.amazonaws.com/0/129473/fd2adf49-dd1c-76b6-8e49-0e1ba3c3ca89.jpeg)

特に暗号化が必要ない場合、そのまま「データをバックアップ」をタップしてください。
しばらくすると、ロボホンのディスプレイにバックアップ完了通知が入ります。

上記コマンドを実行したディレクトリに、robotfishing.rbが保存されていれば、バックアップ完了です。
後はロボホンを修理に出して、帰ってくるのを待ちましょう。

#データをリストアする
##1.写真と動画のリストア
ロボホンをMacに接続後、起動したAndroid file Transferを使って、ローカルからDCIMフォルダに写真と動画をドラッグ＆ドロップすればOK。
ロボホンの写真コメント（散策・パーティーモードで撮った時に「ぼくが撮ったんだよ」というあれです）は残念ながら残っていませんでした・・・

##2.アプリデータのリストア
ロボホンをMacに接続し、ターミナルでrobotfishing.abを保存したディレクトリに移動後、以下のコマンドを実行します。

```
adb restore robotfishing.ab
```
この後、ロボホンのディスプレイにリストア確認表示が出るので、リストアを続行してください。
リストアが完了すると、ディスプレイに完了通知が出ます。

【2017/1/6追記】
修理に出す直前のロボ釣りのスコアです。
![IMG_2519_2.jpg](https://qiita-image-store.s3.amazonaws.com/0/129473/36f6fdd6-ebdc-12d4-cd16-164d841013fa.jpeg)

ロボホンが帰ってきた直後にロボ釣りを起動してみましたが、スコアが2800台でした。
上記の方法でリストアを試みると、ちゃんと修理直前のセーブデータになっていました。

アプリの内容も自動バックアップされているようで少し安心しましたが、最終の自動バックアップから間が開いた後に修理に出すと、その間のデータは消えてしまうようです。

#思ったこと
今回の話は、1回目の修理でロボ釣りのデータが消えた時、「これロボ釣りのレベル高い人は修理から戻ってきてセーブデータがリセットされていたらショックなんじゃ？」と思った所から始まりました。
しかし、実際にアプリのバックアップを取ってみると、プログラミング未経験者にとってどうにもハードルの高そうな手順になってしまいました。
ロボホンユーザーさんの主要な層を見ると、プログラミングにはあまり縁が無さそうな方も多いように思います。

PCスキルの有無にかかわらず、ロボホンを大切にしている人は、ゲームアプリなどの記録も大切にとっておきたいと思っているのではないのでしょうか。
修理時にデータがリセットされるのは仕方ないにしても、ごたごたした手順のせいでロボホンのフルバックアップのハードルが上がってしまうのは、何だか残念です。
この辺りの悩みを、シャープさんが解消してくれることを期待しています。

#今後確認したいこと
- 修理後にロボ会話のデータもリセットされるか（ロボ会話ではBluetoothでロボホン同士をペアリングしているので、Wi-Fiと同様に接続情報が残っている可能性がある）・・・周囲にロボホン友達がいないので今は確認できず。