はじめまして、ソリューション技術部でAndroidアプリ開発をしている古川です。 Android開発歴2年とまだまだ若輩者ではありますがよろしくお願いします。
アプリ開発をしているとお客様先でアプリのリリースがしたいという理由やテスターへの配布などで作成したAPKファイルをどこかに格納してお渡しする機会がよくあります。
前回はiOSでfastlaneというツールを用いたアプリビルドの自動化をご紹介しましたが
今回は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 do
の xxx
の部分がコマンドになります。
fastlane publish_develop
上記のコマンドでdevelop環境のAPKがテスターに配布され
fastlane publish_all
上記でdevelop, product, stagingのAPKが配布されます。
終わりに
現在は様々なプロジェクトにfastlaneを用いたビルドの自動化を導入中です。
今後Bitriseの導入も検討しておりこちらを導入することで現在コマンドで打っているfastlaneコマンドを、プルリクエストを出す際に自動で簡単なテストを行なったり、マージした時に自動でテスターに配布されたりと、アクションによるトリガーでビルドを自動化することができます。
Bitriseが導入されましたらまた記事を書こうと思います。