PLAY DEVELOPERS BLOG

HuluやTVerなどの日本最大級の動画配信を支える株式会社PLAYが運営するテックブログです。

HuluやTVerなどの日本最大級の動画配信を支える株式会社PLAYが運営するテックブログです。

fastlaneを用いたAndroidアプリビルド〜配布までの自動化

はじめまして、ソリューション技術部でAndroidアプリ開発をしている古川です。 Android開発歴2年とまだまだ若輩者ではありますがよろしくお願いします。

アプリ開発をしているとお客様先でアプリのリリースがしたいという理由やテスターへの配布などで作成したAPKファイルをどこかに格納してお渡しする機会がよくあります。

前回はiOSでfastlaneというツールを用いたアプリビルドの自動化をご紹介しましたが

developers.play.jp

今回はAndroidアプリのビルドからAPKファイルの配布までをコマンド一つで行う方法を紹介します。

また、今回もAPKの配布はFirebaseのApp Distributionというサービスを使用します。

fastlaneセットアップ

それではさっそくfastlaneを使用する準備から始めます。

fastlaneの導入

fastlaneを導入する方法として

  • Bundler(Gemfileを使用)
  • Homebrew
  • RubyGems

の3通りあります。

Bundler

プロジェクトにGemfileを生成します。

cd {プロジェクトのパス}
bundle init 

Gemfileを下記のように編集してください。

Gemfile

source "https://rubygems.org"
gem "fastlane"

下記コマンドでfastlaneをインストール

bundle install
fastlane --version

Homebrew

下記コマンドでインストール

brew install fastlane

RubyGems

下記コマンドでインストール

sudo gem install fastlane

fastlaneファイルの生成

次にプロジェクト内にfastlaneのファイルを生成します。

生成には下記のコマンドを実行します。

fastlane init

コマンドを実行するといくつか質問が出てきますので回答します。

① Git
Gitなどでバージョン管理をしているか聞かれますので管理している場合はy

Do you have everything commited in version control? If not please do so now!
(y/n)

② パッケージ名
パッケージ名を記入します。

To not re-enter your packagename and issuer every time you run one of the fastlane tools or fastlane, these will be stored in a so-called Appfile.
Package Name (com.krausefx.app):

③ metadata
Google Playに掲載するアプリの説明や画像を管理するかどうかを聞かれています。

Do you plan on uploading metadata, screenshots and builds to Google Play using
fastlane? (y/n) 

回答が終わり下記のメッセージが出ればファイル生成が完了です。

Successfully finished setting up fastlane

プロジェクト直下にfastlaneというフォルダができていれば成功です。

App Distributionの設定

fastlaneの導入が終わりましたらApp Distribution側の設定も行います。

Firebase側の設定

① プロジェクト作成
App Distributionに上げるプロジェクトを作成します。 すでにプロジェクトがある方はそちらを使用してください。

② アプリの追加
配布したいアプリの環境ごとに作る必要があります。 (develop, product, staging, fireOS用など)

③ google-services.jsonの保存
追加したアプリごとのgoogle-services.jsonを保存し、プロジェクト内のgoogle-services.jsonと差し替えます。

App Distributionコマンドの設定

fastlaneでApp Distributionコマンドを使用できるようにします。

① プラグインを追加
fastlaneにApp Distributionへデプロイするためのプラグインを追加します。

fastlane add_plugin firebase_app_distribution

② Firebaseログイン
先ほど追加したプラグインは使用前にFirebaseの認証をする必要があります。 まず、Firebase CLIが入っていない方は下記コマンドでインストールします。

curl -sL firebase.tools | bash

Firebaseにログインします。

firebase login

fastlaneファイルの記述

Fastfile

default_platform(:android)

platform :android do
  app_name = {
    :product => "環境名",
    :develop => "環境名",
    :staging => "環境名",
  }
  app_ids = {
    :product => "firebaseのアプリID",
    :develop => "firebaseのアプリID",
    :staging => "firebaseのアプリID",
  }

  desc "Publish by App Distribution"
  lane :publish do |options|
  flavor = options[:flavor]
  gradle(task: "clean")
    # Compile
    gradle(
      task: "assemble",
      flavor: app_name[flavor],
      build_type: "Release",
      flags: "--stacktrace"
    )

    # Firebase App Distribution
    firebase_app_distribution(
      app: app_ids[flavor],
      testers_file: "fastlane/testers.txt",
      groups: "firebaseでテスターグループを作成している場合はグループ名",
      android_artifact_type: "APK",
      firebase_cli_path: "/usr/local/bin/firebase",
      release_notes_file: "fastlane/release_notes.txt"
    )
  end

  desc "Publish staging version by App Distribution"
  lane :publish_staging do
    publish(flavor: :staging)
  end

  desc "Publish product version by App Distribution"
  lane :publish_product do
    publish(flavor: :product)
  end

  desc "Publish develop version by App Distribution"
  lane :publish_develop do
    publish(flavor: :develop)
  end

  desc "Publish all version by App Distribution"
  lane :publish_all do
    publish(flavor: :staging)
    publish(flavor: :develop)
    publish(flavor: :product)
  end
end

上記がアプリをビルドしApp Distributionに上げ、テスターに配布するまでの処理を記述したものです。 こちらを元にカスタマイズして使っていただければと思います。

lane :xxx doxxx の部分がコマンドになります。

fastlane publish_develop

上記のコマンドでdevelop環境のAPKがテスターに配布され

fastlane publish_all

上記でdevelop, product, stagingのAPKが配布されます。

終わりに

現在は様々なプロジェクトにfastlaneを用いたビルドの自動化を導入中です。

今後Bitriseの導入も検討しておりこちらを導入することで現在コマンドで打っているfastlaneコマンドを、プルリクエストを出す際に自動で簡単なテストを行なったり、マージした時に自動でテスターに配布されたりと、アクションによるトリガーでビルドを自動化することができます。

bitrise.io

Bitriseが導入されましたらまた記事を書こうと思います。