Swift・iOS

Swiftを中心に学んだことを記録に残すブログです。技術に関係ない記事もたまに書いています。

【fastlane】レーンごとに設定したSlackの投稿処理をまとめたい

 

はじめに

今回は、Slackへの投稿処理をレーンごとに設定することをやめたい(すっきりさせたい)というモチベーションのもと、調べたり試したことを記録に残します。

 

環境

macOS Catalina 10.15.7

Xcode 12.2

bash 3.2.57

・bundler 2.1.4

・fastlane 2.170.0

Visual Studio Code 1.50.1

GitHub

 

本題

例えば、以下のようにテスト用のレーンとリリース用のレーンがあるとする。

default_platform(:ios)

platform :ios do
  before_all do
    ENV["SLACK_URL"] = "{Webhook URL}"
  end

  lane :test do
    run_tests(device: "iPhone 12 Pro",
              scheme: "FastlaneTest",
              slack_message: "test has suceeded")
  end

  lane :release do
    sync_code_signing(type: "appstore") 
    increment_version_number
    increment_build_number
    build_app(
      scheme: "FastlaneTest",
      configuration: "Release",
      silent: true,
      clean: true
    )
    upload_to_app_store(
      skip_screenshots: true,
      skip_metadata: false,
      force: true
    )
    slack(message: "Successfully uploaded a new App Store build")
  end

  error do |lane, exception|
    slack(
      message: exception.message,
      success: false
    )
  end

end

 

テスト用のレーンとリリース用のレーンに、それぞれSlackに投稿するメッセージが設定されているが、ひとまとめにできないのだろうか。仮にbeta用のレーンを追加したら、そこにもSlackに関する設定をすることになるし・・・。

 

ということで、以下のようにレーンの処理が完了した後に実行されるafter_allを使うことにした。これで、各レーンごとにSlackへの投稿設定をしなくてよくなった。

after_all do |lane|
    slack(message: "#{lane} has suceeded!")
  end

 

変更後のFastfileは以下のようになる。

default_platform(:ios)

platform :ios do
  before_all do
    ENV["SLACK_URL"] = "{Webhook URL}"
  end

  lane :test do
    run_tests(device: "iPhone 12 Pro",
              scheme: "FastlaneTest",
              skip_slack: true)
  end

  lane :release do
    sync_code_signing(type: "appstore") 
    increment_version_number
    increment_build_number
    build_app(
      scheme: "FastlaneTest",
      configuration: "Release",
      silent: true,
      clean: true
    )
    upload_to_app_store(
      skip_screenshots: true,
      skip_metadata: false,
      force: true
    )
  end

  after_all do |lane|
    slack(message: "#{lane} has suceeded!")
  end

  error do |lane, exception|
    slack(
      message: exception.message,
      success: false
    )
  end

end

 ※skip_slackに関して

run_testsでは、デフォルト設定のままだとWebhook URLが設定されていればSlackへ投稿するため、skip_slackをtrueする。(デフォルトのままだとrun_testsによって1回、after_allによって1回の計2回投稿が飛んでしまう。)

 

レーンごとにメッセージを変更したい場合は以下のように設定すればよい。

 after_all do |lane|
    if lane == :test
      slack(message:"{testレーン成功時のメッセージ}")
    elsif lane == :release
      slack(message:"{releaseレーン成功時のメッセージ}")
    end
  end

 

おわりに

今回のような、「ちょっとした学び」系の内容がまだまだあるので記事にしていきます・・・!

 

参考

slack - fastlane docs

run_tests - fastlane docs