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