先日、いつものようにBOOK☆WALKERにて電子書籍を閲覧しながらTRPGを遊んでいたところ、保存してあるはずの全ての書籍が未ダウンロード状態となっていることに気付いた。
「本棚」にある全ての書籍の書籍の左上に、雲のマークが表示されていたのである。
そのときはゲームがはじまる段階であったため、原因の追究を諦めて使う書籍のみ再ダウンロードしたのだが、後に少々困ったことになった。
不明点は残ったものの、とりあえず対処はできたため、備忘録として書き残しておく。
♦困ったこと
- 書籍の再ダウンロードを強いられる
- 以前のようにSDカードに保存・読み込みできなくなる
- SDカードに軽くない残骸が残ったままになる
すでにダウンロードした書籍の読み込みができなくなっただけでなく、使っているmicroSDカードへの再ダウンロードもできない状況に陥ってしまった。さらにこのままでは、7GBに相当する61冊分の書籍データがデブリと化してしまう。
結論から言えば、再ダウンロード以外の2点については対処できた。
♦環境
♦何が起きたのか
そもそもの原因は、端末が何らかの要因でmicroSDカードの読み込みに失敗していたことにあった。今後の対処法として、書籍が全て未ダウンロード状態になっている場合、まずは端末の電源を落とし、SDカードを入れなおして再起動してみること。
この上で使用する書籍を再ダウンロードした結果、そのデータは改めて本体に保存された*1。このデータの存在が悪さをして、元のパスに戻せない状態になっていた。
本体ストレージ側の書籍データを削除することで、元のパスに戻す際のエラーは解消された。
♦データ保存の仕組み
解決のため、多少詳しい説明が必要なので解説する。
スマホ内のデータをいじる際には、「X-plore」というアプリを使うのがオススメだ。
基本的な仕組み
BOOK☆WALKERでは、購入した書籍のデータを端末に保存することで、通信を行わずに閲覧できるようになっている。
特に設定しなければ、書籍データは端末本体のストレージに保存される。「設定」の「保存先変更」より、保存先を外部ストレージであるSDカードに変更することで、本体の容量を食わずに済む。
書籍を閲覧する際にも設定された保存先にアクセスし、そこにある書籍を呼び出すわけである。
フォルダの多層構造とパス
本体ストレージに保存、SDカードに保存、などと言っても、ダウンロードしたデータを無造作に放り投げておくわけではない。格納する場所は細かく指定されている。
例えば、「ストレージ」というフォルダの中の「データ」というフォルダの中に、「書籍A」のデータをしまう、という感じである。
逆に「書籍A」を読み込みたいときにも、いちいち「ストレージ」の中の「データ」の中を探してくださいね、と命令する必要がある。これを「パスを通す」と言い、先の「保存先変更」ではこれを行っているわけである*2。
「保存先変更」では、保存先として推奨されるSDカードへのパスや本体ストレージへのパスが提案されている。ところがこのパス、使用している端末によって名前が違う*3ため、全ての環境で同じ通し方はできない。提案されているパスは、環境に合わせてBOOK☆WALKERアプリの方で見繕ったものである。
「フォルダ名A/フォルダ名B/.../フォルダ名X」という書き方になっており、見たまま「フォルダAの中のフォルダBの中の...フォルダX」という意味である。
BOOK☆WALKERアプリの提案では、このパスの最初の方、つまり本体かSDカードか、程度を選ばせている*4。ほとんどの場合、SDカードのパスが一番上に正常に表示されるはずだ。
そこまで選べば、あとは勝手にフォルダを作り*5、そこにダウンロードしてくれるようになる。
パスを戻す
要するに、SDカードが読み込めなくなったために保存先・読み込み先を本体ストレージに変更されていたわけであるから、それを元のパスに戻せば解決する...はずだった。
しかしこの際にエラーを吐かれる。パスの変更に伴い、改めて本体にダウンロードされた書籍データを指定先に移動する処理が入ったのだが、「十分な空き容量がありません」と文句を言われて中断され、パスもSDカードのものに戻らない。
SDカードには十分な空き容量があったため、提案されたパスがSDカードのものではない可能性をまず考えたが、やはりSDカードのものに間違いない。
次に同名ファイルの移動処理に思い至り、どうやらこれが当たりのようだった。通常は移動先に同じ名前のファイルがある場合、置き換えるかスキップするか、といった処理が入る。今回の処理の場合はこれが考慮されておらず、移動が完了しなかったようだ。「十分な空き容量がありません」とは、移動に失敗したときのエラーメッセージだったわけである。
本体のストレージを漁り、再ダウンロードされた書籍のデータ*6を削除。
結果、データの移動処理は行われず、元のパスへの再変更に成功。
しかし、何故か再ダウンロードした書籍以外のほとんどの書籍は、依然未ダウンロード状態のままであった。
まあ後遺症が残る部分は修正できたし、正直もう面倒になってきていたので、SDカード内の書籍データも全て削除して再ダウンロードした。正常に読み込めていた書籍も消した際にはちゃんと未ダウンロード状態になっていたし、再ダウンロードした際には指定パスに格納されてまた正常に読めるようになったため、とりあえずパスの問題ではなさそう。
♦まとめ
保存先変更の際の書籍データの移動処理にバグあり。
ふつうは保存先と書籍データは連動しているが、SDカードが読み込めないときに再ダウンロードすると本体に入るので、この場合は本体とSDカードの両方に書籍データが存在できてしまう。
本体側に再ダウンロードされた書籍データを削除することで、エラーなくパスをSDカードのものに戻せる。
♦関連
- その他記事まとめ
*1:SDカードが利用不可となっているため。
*2:この仕組みを理解していれば、好きなところに書籍データを保存することができる。サービス保障外。
*3:基本ルールは同じ
*4:SDカードに保存するようにするための仕組みなので。
*5:Android環境下でSDカード指定であれば、パスの末尾に/Android/data/jp.bookwalker.kreader.android.epub/filesを付けたし、/jp.book~以下を作る。
*6:/storage/emulated/0/Android/data/jp.bookwalker.kreader.android.epub/filesの中。