FastlaneでReactNativeのデプロイを自動化する(android)


手動作業を自動化する

ReactNativeで作成したアプリを内部テストする際に、手動でGoogle play consoleに上げるところをFastlaneを使用し、自動化します。
ios版はこちら↓
FastlaneでReactNativeのデプロイを自動化する(ios)

注意点

ios版と違い、androidについては初めのデプロイを手動で実行する必要があります。
keystoreを作成し、internalにアプリをデプロイしたことを前提に話を進めます。

keystoreの作成について

基本的に下記公式ドキュメントに従えば良いですが、最後の作成の際のコマンドは下記を使用します。
Publishing to Google Play Store

cd android
./gradlew assembleRelease

google play consoleのapiの入手

下記公式ドキュメントに沿って(サービス アカウントを使用する)、json形式のapiを入手します。
https://developers.google.com/android-publisher/getting_started?hl=ja
jsonファイルをandroid/secure(新規作成)直下に保存します。

fastlaneの設定

sudo gem install bundler
cd android
bundle init

Gemfileが作成されるので、下記を記述します。

Gemfile
gem "fastlane"

fastlaneをインストールします。

bundle update

次にfastlaneを初期化します。

bundle exec fastlane init

質問に対する回答
Package name -> android/app/build.gradle内にあるapplicationIdを入力
Path to the json -> secure/***.jsonを入力
meta -> y

プラグインの導入

fastlane実行の際に、自動的にversion numberを上げるためにプラグインを導入します。

bundle exec fastlane add_plugin increment_version_code

Gemfileに下記が自動的に記述されます。

Gemfile
plugins_path = File.join(File.dirname(__FILE__), 'fastlane', 'Pluginfile')
eval_gemfile(plugins_path) if File.exist?(plugins_path)

fastfileの編集

下記を記述します。

default_platform(:android)

platform :android do

  // descは説明文ですので、任意の文を挿入
  desc "submit internal release to Google Play Store"
  // internalテストに関する記述
  lane :internal do
    # build.gradleファイルのversion numberを実行する度に上げる
    increment_version_code(
      gradle_file_path: "./app/build.gradle"
    )
    # apkファイルの設定
    gradle(task: "assembleRelease")
    # apkファイルの検索
    supply(
      track: "internal",
      apk: "#{lane_context[SharedValues:: GRADLE_APK_OUTPUT_PATH]}"
    )
  end

// 以下は他のデプロイ先に関する記述です。
  desc "submit alpha release to Google Play Store"
  lane :alpha do
    increment_version_code(
      gradle_file_path: "./app/build.gradle"
    )
    gradle(task: "assembleRelease")
    supply(
      track: "alpha",
      apk: "#{lane_context[SharedValues:: GRADLE_APK_OUTPUT_PATH]}"
    )
  end

  desc "submit beta release to Google Play Store"
  lane :beta do
    increment_version_code(
      gradle_file_path: "./app/build.gradle"
    )
    gradle(task: "assembleRelease")
    supply(
      track: "beta",
      apk: "#{lane_context[SharedValues:: GRADLE_APK_OUTPUT_PATH]}"
    )
  end

  desc "submit production release to Google Play Store"
  lane :production do
    increment_version_code(
      gradle_file_path: "./app/build.gradle"
    )
    gradle(task: "assembleRelease")
    supply(
      track: "production",
      apk: "#{lane_context[SharedValues:: GRADLE_APK_OUTPUT_PATH]}"
    )
  end

end

fastlaneの実行

bundle exec fastlane internal

実行後、google play console内にてアプリがデプロイされたことが確認できます。
alpha beta productionへのデプロイについても上記コマンドのinternalを書き換えれば実行可能です。

Bitriseへ組み込む

CIツールのBitriseを使用すると、githubにpushした際に自動的にfastlaneを実行することができます。
詳細は下記へ↓
FastlaneのコマンドをBitriseに組み込む(android,ReactNative)