Expoクライアントアプリで「Building Javascript bundle」が動作しなくなったときの解決法
ExpoとReactNativeを使ってアプリを作成しているときに発生した問題の解決方法です。
私はスマホ端末にExpoのクライアントアプリをインストールして、実機による確認を行いながら開発しています。 Expo クライアントアプリ Android
今回はExpoのホットリロードが効かなくなり、expo start
をやり直しても、端末のExpoで更新ボタンを押してもテストしたいアプリが更新されない状態になりました。
修正前のテストアプリがキャッシュされて動いている印象で、他のアプリをExpoで動かしてもずっと同じアプリが立ち上がる奇妙な現象が発生しました。
急に発生したので困っていましたが解決できたので内容を記録しておきます。
結論を先に言うと
Androidの設定の「ストレージ」で、Expoアプリの「キャッシュ削除」と「データ削除」を行うことで解決出来ました。 破損したデータが消去された、または領域が確保されたことによって現象が解決しました。
概要
- 現象
- 調査によりわかった状況
- 解決方法
- 注意点
現象
最初は突然ホットリロードが動作しなくなりました。手動で更新ボタンを押すことでテストアプリの開発中プログラムを反映するようにしました。
さらにしばらく立つと、ずっと同じアプリが立ち上がるようになってしまいました。プログラムを修正しても反映されず、別のアプリを動かそうと他のソースでexpo start
してもずっと同じアプリが動き出します。
任意のアプリの開発が出来ず、修正した内容も検証することが出来ないので困りました。
印象としては、端末にキャッシュしているプログラムをずっと立ち上げている様子でした。
ただ起動時のSplashはアプリごとの画像が表示されている様子で、expo start
したディレクトリ内の画像が表示されることがありました。
調査によりわかった状況
以下その時の状況です。
- 他の端末では正常に動作する。
- 問題の端末では、expoと連携しても「Building Javascript bundle」がコンソールに表示されず、すぐにテストアプリが動き出す。
- expoの通知領域から確認できるテストアプリ情報の「SHOW MANIFEST」の内容がいつも同じで、最後の方にある
loadedFromCache
がtrue
になっている - 端末の再起動では解決出来ず、Expoの通知領域から選択できる「CLEAR DATA」でも解決できない
- Expoクライアントアプリのデータが大きくなっている。 アプリのサイズは
70〜80MB
で、削除する前のユーザーデータやキャッシュがかなり大きな数値。削除前の合計データ量は200MB
くらい
解決方法
一度Expoクライアントのデータを削除したところ問題が解消しました。
Androidの設定の「ストレージ」からアプリのキャッシュデータを削除します。Expoは「その他のアプリ」内にあります。
「キャッシュを削除」のみでは問題は解消されず、「データを削除」を行う必要がありました。
上記で解決できました。以降は元通りホットリロードも動作しており快適に検証できています。削除後は合計データ量も100MB
を下回るくらいです。
注意点
端末上でExpoアプリのデータを削除すると、Expoのログイン情報が失われます。
ログインしていない状態でも使うことは出来ますが、利用する用途によっては再度ログインを行う必要があります。
おわりに
似たような現象に遭遇した場合は一度お試しください。
今回は調べても原因や解決方法が出てこなかったので、自分でなんとか見つけました。 Expoの情報は結構多く開発も盛んな印象です。英語の情報がほとんどですが本家のForumでだいたい解決できます。