3
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

LeveragesAdvent Calendar 2018

Day 6

AppCenterを用いた、ReactNativeアプリのテスター配布自動化

Last updated at Posted at 2018-12-05

AppCenter is 何?

Microsoftが開発している統合CI PaaS環境です。
詳しくは公式サイトを参照してください。
githubなどのgitレポジトリで連携してテストからビルドしてテスター配布までの作業を自動化できる他クラッシュレポート、Codepush,Notification、Appiumなどを使用した様々な実機によるリモート実機テストなどもサポートしています。fastlaneなどの外部ツールと連携するためのプラグイン機構もあります。

buildの構成

Appcenterのビルドフック

AppcenterのCIプロセスは

  • レポジトリからのclone
  • ビルド
  • テスト(npm run test)
  • 実機テスト(npm run test)
  • 署名
  • リリース

といった手順で進みます。このプロセスにおけるビルドの前後で

  • appcenter-post-clone.sh
  • appcenter-pre-build.sh
  • appcenter-post-build.sh

というファイル名で、shellスクリプトを書くと、それぞれのファイル名に応じたタイミングでイベントフックをして、任意の処理を実行することができます。これらのファイルの配置場所はどのフレームワークや技術セットを使ったかによって微妙に配置場所が異なるので注意してください。react-nativeの場合は、package.jsonの配置場所と同じパスに置かなければいけないという制約があります(今後指定方法が増える可能性は感じています)。このあたりは、よくあるCIのパイプラインの仕組みと一緒かと思います。post-cloneとpre-buildのタイミングの違いはreact-nativeの場合は、post-cloneの場合はgit cloneを実行した直後、pre-buildはnpm install,pod installの直後に指定の処理を行うことができあます。

この機能はカスタムビルドスクリプトと呼ばれています。

カルタムビルドスクリプト
ビルドプロセス

についての詳細は以上のいリンクをご覧ください。

## 実際の運用例

うちのチームではCI上のビルドを行う際にfirebaseの設定が必要となるためenv/firebaseConfigディレクトリからビルドの解析パスに設定ファイルをコピーする処理をシェルで書いています

path
env/firebaseConfig
├── development
│   ├── GoogleService-Info.plist
│   └── google-services.json
├── production
│   ├── GoogleService-Info.plist
│   └── google-services.json
└── staging
    ├── GoogleService-Info.plist
    └── google-services.json
#!/usr/bin/env bash

cwd=$(pwd) 
baseDir="${cwd}/env/firebaseConfig/$ENV"
configFileIOS="GoogleService-Info.plist"
configFileAndroid="google-services.json"

if [ -d $baseDir ] && ! [ -z $ENV ];
then
  echo "Switching to Firebase ${ENV} environment"
  yes | cp -rf "$baseDir/$configFileAndroid" "${cwd}/android/app"
  yes | cp -rf "$baseDir/$configFileIOS" "${cwd}/ios/app"
fi

また、Appcenterにもビルドに応じた環境変数を設定する機能がちゃんとあるので、ビルドに含まれるプライペートな情報や環境依存のパラメータははこれらを使用しましょう。例として以下にnodeのバージョンを切り替えてビルドするためのスクリプトを書いています。

change_node.sh
set -ex
brew uninstall node@6
curl "https://nodejs.org/dist/v${NODE_VERSION}/node-v${NODE_VERSION}.pkg" > "$HOME/Downloads/node-installer.pkg"
sudo installer -store -pkg "$HOME/Downloads/node-installer.pkg" -target "/"

ちなみに、以上の方法は公式に質問したところ、以上のようにやってくださいとの回答を得たものですので実行しても大丈夫だそうです。ビルドには時間制限があるため長期実行されているプロセスは勝手に打ち切られるとは思いますが、ちゃんと最低限モラルと暗黙の了解を守って使う必要はありますね。
appcenterには画面右下にチャットウインドウがあり、常駐のエンジニアに質問を投げかけることができるため、機能について深く突っ込んだ質問をしても親切に答えてくれます(ました)。この機能非常にありがたいので、とても好感持てました。

追記

RN0.56以上でバージョンを変える場合はnvm経由で変更するようにしてくださいとのアナウンスがありました。

まとめ

AppcenterはFabricに比べて情報が出てきづらいですが、非常に使いやすいと思いました。
FabricもFirebaseと統合されたことによって使いやすくなることは予想されますが、RNアプリに関して導入しようとしたところ、結構ハマりどころが多かったため、個人的にはAppcenterの方が楽に実装できました。
もし、興味があったら色々質問してください。僕もこういう事例あったら知りたいので、教えてくれる人いたら情報提供お待ちしいています。

3
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?