🍣

react-native-ci-toolsでbundleIdやpackageを変更する

2021/08/06に公開

はじめに

今回はreact-native-ci-toolsを使ったBundleIdpackageの変更方法について紹介します。
React Nativeでアプリを開発する際に、プロジェクトの立ち上げをreact-native initコマンドで行う場合が多いと思いますが、その段階だとBundleIdpackageが確定していないことが多いです。

そもそもBundleIdpackageとは?

いずれも「アプリを一意に識別するため」に使用される文字列のことを指します。
iOSではそれをBundleIdAndroidではpackageあるいは「パッケージ名」と呼んでいます。

主にはApp StoreGoogle Play Storeに実際にアプリをリリースする段階になって使用することになりますが、FirebaseGCPなどで「この機能はこのアプリだけが使えるように制限したい」といった場合に入力することがあります。

※例えばGCPの一部のAPIは従量課金が必須となっており、もしAPI Keyが外部に漏れた場合に悪用される可能性があります。その際にBundleIdpackageで利用できるアプリを制限しておけば、API Keyと一緒にそれらが流出しない限りは直ちに影響はない、といった具合です。

react-native-ci-toolsとは

上記にもある通り、BundeIdpackageを意識するタイミングは、開発初期というよりリリースや外部サービスを組み込む段階になってからです。
※もちろん、アプリプロジェクト作成段階でこれらが決まっているのが望ましいのですが・・・

BundeIdpackageはプロジェクト下の様々な場所で記入する必要があり、それらを手動で変更していくのは非常に手間かつミスを誘発しやすいです。

そこで登場するのがreact-native-ci-toolsです。

https://github.com/najeeb-rifaat/react-native-ci-tools

使い方

早速使い方を見ていきましょう。
といっても非常に簡単でreact-native-ci-tools bundle "{bundeId and package}" "{アプリ名}"コマンドでBundeIdpackageそして「アプリ名」を変更することができます。

「アプリ名」というのは、アプリをインストールした際に端末上のホーム画面などで表示される名称になります。

以下はBundleIdおよびpackage"com.nekoniki.app"とし、アプリ名を「ネコニキのアプリ」とした例です。

最後にオプションとして、iOSAndroidのどちらを対象に変更を反映させるかを指定するため-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-が使えないためです。
このあたりの対処法は要件とも相談になりますが、自分は「ドメインの中から-を除いた文字列でリバースドメインを作成」する方式としています。

参考までにBundleIdpackageのルールについて記載します。

  • BundleIdは「英字・数字・ピリオド・ハイフンが使用可能」
  • packageは「英字・数字・_を使用し、ピリオドを使って最低2つのセクションに区切る必要がある。各セクションは英字で始まる必要がある」

まとめ

今回はReact Nativeアプリに対してBundleIdpackageに変更をかけることができるツールであるreact-native-ci-toolsについてご紹介しました。

こういった 「1つのアプリに対して1回くらいしか行わない作業」 は実装のテクニックと異なり、なかなか覚えにくいものであるため、できればツールを用いて行いたいです。

その際にreact-native-ci-toolsのようなサポートツールがあると、ミスも避けられて非常に便利だと思います。

今回の内容が少しでも役立てば幸いです。

Discussion