react-native-ci-toolsでbundleIdやpackageを変更する
はじめに
今回はreact-native-ci-toolsを使ったBundleIdやpackageの変更方法について紹介します。
React Nativeでアプリを開発する際に、プロジェクトの立ち上げをreact-native initコマンドで行う場合が多いと思いますが、その段階だとBundleIdやpackageが確定していないことが多いです。
そもそもBundleIdやpackageとは?
いずれも「アプリを一意に識別するため」に使用される文字列のことを指します。
iOSではそれをBundleId、Androidではpackageあるいは「パッケージ名」と呼んでいます。
主にはApp StoreやGoogle Play Storeに実際にアプリをリリースする段階になって使用することになりますが、FirebaseやGCPなどで「この機能はこのアプリだけが使えるように制限したい」といった場合に入力することがあります。
※例えばGCPの一部のAPIは従量課金が必須となっており、もしAPI Keyが外部に漏れた場合に悪用される可能性があります。その際にBundleIdやpackageで利用できるアプリを制限しておけば、API Keyと一緒にそれらが流出しない限りは直ちに影響はない、といった具合です。
react-native-ci-toolsとは
上記にもある通り、BundeIdやpackageを意識するタイミングは、開発初期というよりリリースや外部サービスを組み込む段階になってからです。
※もちろん、アプリプロジェクト作成段階でこれらが決まっているのが望ましいのですが・・・
BundeIdやpackageはプロジェクト下の様々な場所で記入する必要があり、それらを手動で変更していくのは非常に手間かつミスを誘発しやすいです。
そこで登場するのがreact-native-ci-toolsです。
使い方
早速使い方を見ていきましょう。
といっても非常に簡単でreact-native-ci-tools bundle "{bundeId and package}" "{アプリ名}"コマンドでBundeIdとpackageそして「アプリ名」を変更することができます。
「アプリ名」というのは、アプリをインストールした際に端末上のホーム画面などで表示される名称になります。
以下はBundleIdおよびpackageを"com.nekoniki.app"とし、アプリ名を「ネコニキのアプリ」とした例です。
最後にオプションとして、iOSとAndroidのどちらを対象に変更を反映させるかを指定するため-iaを入力しています。
※もしiOSのみの場合は-i,Androidのみの場合は-aを指定します。
npx react-native-ci-tools bundle "com.nekoniki.app" "ネコニキのアプリ" -ia
これだけでプロジェクト下の変更すべき箇所に一括で置換が行われます。
注意点
以下、使用にあたって自分が実際に遭遇したエラーや事象をまとめます。
TypeError: Cannot read property 'nodeName' of nullというエラーが出た
iOSを対象にした際に発生します。
BundleIdを変更する際にios/Podsディレクトリと衝突が発生しているらしく、一旦削除する必要があるようです。
rm -rf ios/Pods
cd ios
pod install
リバースドメインに-を含めない方がいい
BundleIdおよびpackageには一般的にリバースドメインを使用することが多いです。
その際に、元となるドメインに-が含まれている場合は注意が必要です。
なぜなら、BundleIdは_が使えず、packageは-が使えないためです。
このあたりの対処法は要件とも相談になりますが、自分は「ドメインの中から-を除いた文字列でリバースドメインを作成」する方式としています。
参考までにBundleIdとpackageのルールについて記載します。
-
BundleIdは「英字・数字・ピリオド・ハイフンが使用可能」 -
packageは「英字・数字・_を使用し、ピリオドを使って最低2つのセクションに区切る必要がある。各セクションは英字で始まる必要がある」
まとめ
今回はReact Nativeアプリに対してBundleIdとpackageに変更をかけることができるツールであるreact-native-ci-toolsについてご紹介しました。
こういった 「1つのアプリに対して1回くらいしか行わない作業」 は実装のテクニックと異なり、なかなか覚えにくいものであるため、できればツールを用いて行いたいです。
その際にreact-native-ci-toolsのようなサポートツールがあると、ミスも避けられて非常に便利だと思います。
今回の内容が少しでも役立てば幸いです。
Discussion