🍣

【ReactNative】0.61未満のバージョンで作成したプロジェクトだとdebug.keystoreがgitignoreされる

2021/02/03に公開

はじめに

今回はReact NativeアプリでAndroidのデバッグビルドを行なった際に遭遇したエラーについて紹介します。
具体的には、v0.61.0未満のバージョンで作成したReact Nativeプロジェクトで発生する可能性のあるエラーです。

なにが起きたか

1年ほど前にReact Nativeで開発したアプリがあります。
当時はまだReact Nativeに関する資料も今ほど多くなく、公式の英語と睨めっこしながらなんとか動くものを作り上げた小さなアプリです。

そのアプリに大きめの修正が入ることになり、それなりに時間をかけても良いということになりました。
hooksを使いたい+新しくリリースされた一部コンポーネントを使って冗長な記述を見直したい」と思い、いい機会なのでReact Nativeのバージョンを上げて一通り見直していくことにしました。

随分と前の開発だったので、GitLabからソースをcloneしてきてreact-nativeのバージョンアップを実行。
着手時点で0.60.5だったバージョンを最新の0.63.4に変更し、バージョンアップに伴う一通りの構文エラーを解消したあとでデバッグビルドをかけると下記のようなエラーに遭遇しました。

Keystore file '/android/app/debug.keystore' not found for signing config 'debug'.

なにやら見覚えのないエラー。
debug.keystoreはたしかreact-native initを実行してプロジェクトを作成した時に自動生成されているはずだが・・・

v0.61まではdebug.keystoreignoreされているらしい

リモートリポジトリを参照してもdebug.keystoreは見つからず。
それもそのはずで、.gitignoreには下記の記述がありました。

*.keystore

なので、事の成り行きとしては以下の通り。

  1. react-native initでプロジェクトを作成(ここでdebug.keystoreも生成)
  2. 色々修正してコミット&プッシュ(.gitignoreの含まれるためdebug.keystoreGit管理せず)
  3. プロジェクトをcloneして諸々をセットアップしてデバッグビルド
  4. debug.keystoreがないため当該のエラー
  5. debug.keystoreはどこにも残っていない・・・!!

.gitignore*.keystoreはデフォルトで記載されているため、チーム開発だと頻発しそうです。
デバッグ用のkeystoreなんだからignoreしなくてもいいのに・・・

と思ってReact Nativeの変更ログを見ていたらv0.61.0
https://github.com/react-native-community/releases/blob/master/CHANGELOG.md#v0610

  • Add exception in .gitignore for debug.keystore to the android template.

どうやらそれらしい記述が!
当該のコミットを参照してみると・・・

*.keystore
+ !debug.keystore

v0.61.0以降からdebug.keystoreignoreに含まれなくなったようです。
従って今回のようにv0.61.0未満のバージョンでreact-native initを実行してプロジェクトを新規作成した場合はdebug.keystore.gitignoreに含まれたままの状態になります。

対処法「debug.keystoreを再生成」

同様の事象で困っている方は結構いるようで、下記のようなIssueがありました。
https://github.com/facebook/react-native/issues/25629

対処法としてはシンプルでdebug.keystoreを再生成して.gitignoreに含めないようにするだけです。

再生成ですが以下のコマンドで行えます。
android/appディレクトリで行います。

keytool -genkey -v -keystore debug.keystore -storepass android -alias androiddebugkey -keypass android -keyalg RSA -keysize 2048 -validity 10000

コマンド中にあるandroiddebugkeyandroidといった記述はdebug.keystore用のエイリアスやパスワードです。
デフォルトでは上記の値になっていますが、もしこの値を手動で変更してある場合は正しいものを設定するようにしましょう。

これでdebug.keystoreが生成され、デバッグビルドが通るようになりました。

まとめ

今回はReact Nativev0.61.0未満で新規作成したプロジェクトに関して、debug.keystore.gitignoreに含まれてしまう問題の経緯と対処法について紹介しました。

発生する状況が極めて限定的ですが、それゆえにハマるとなかなか時間を食ってしまうため備忘の意味もこめて記事にしました。
同様の問題でハマっている方の参考になれば幸いです。

Discussion