LoginSignup
3
2

Github Actionsを直列→並列実行に変更してApp Distributionへの配布時間を高速化させた。

Last updated at Posted at 2023-12-15

Github Actionsを使用してApp Distributionにアプリを配布していました。

配布用途の種類は以下の3種類。

配布用途の種類
名前 配布の用途
buildTest Xcodeのビルド
publishDebug App Distribution(開発環境)
PublishProd App Distribution(本番環境)

直列実行をしているので、buildTest→publishDebug→PublishProdの順番で動いていた。
その為、配布が完了するまでに約1時間かかっていました。
スクリーンショット 2023-12-13 17.05.39.png

直列実行時の処理

fastlaneで各3つのレーンを作った上でその3つをまとめるレーン(publishAll)を用意。

fastfile

  ## Xcodeのビルド
  lane :test do
  end

  ## App Distribution(開発環境)
  lane :publishDebug do
  end
  
  ## App Distribution(本番環境)
  lane :publishProd do
  end

  ## 上記、3つの処理をまとめる
  lane :publishAll do
    test
    publishDebug
    publishProd
  end

ワークフローでは、ジョブは一つでrunにはまとめたレーン(publishAll)を指定。

pubrish.yml

jobs:
  build:
    runs-on: macos-13
    timeout-minutes: 90 
    steps:
    - name: Publish
      run: bundle exec fastlane publishAll
      env:
        MATCH_PASSWORD: ${{ secrets.FASTLANE_MATCH_PASSWORD }}
        RELEASE_NOTES: ${{ github.event.inputs.release-notes }

並列実行への変更方法

各レーンを別々のワークフローのジョブで動かすのでまとめたレーン(publishAll)はもういらなくなる。

fastfile
  ## Xcodeのビルド
  lane :test do
  end

  ## App Distribution(開発環境)
  lane :publishDebug do
  end
  
  ## App Distribution(本番環境)
  lane :publishProd do
  end

  ## 別々で動かす為、まとめる処理はもういらない。
  ## lane :publishAll do
    ## test
    ## publishDebug
    ## publishProd
  ## end

ジョブはレーン別に3つ用意する。
各ジョブには同様の処理を入れて、runだけ別々のレーンを指定する。

pubrish.yml
jobs:
  buildTest:
    runs-on: macos-13
    timeout-minutes: 90 
    steps:
    ----------------------
    (各jobで同様の処理を入れる)
    ----------------------

    - name: Publish
      run: bundle exec fastlane test

  publishDebug:
    runs-on: macos-13
    timeout-minutes: 90 
    steps:
    ----------------------
    (各jobで同様の処理を入れる)
    ----------------------
    
    - name: Publish
      run: bundle exec fastlane publishDebug

  publishProd:
    runs-on: macos-13
    timeout-minutes: 90
    steps:
    ----------------------
    (各jobで同様の処理を入れる)
    ----------------------
    
    - name: Publish
      run: bundle exec fastlane publishProd

  log:
    ## ジョブを行った後に動かしたい場合、needsを使って実行元のジョブを指定する。(今回は完了のlogだけ)
    needs:
      - buildTest
      - publishDebug
      - publishProd
    runs-on: macos-13
    timeout-minutes: 90 
    steps:
    - name: Log
      run: echo "done"

実行結果

スクリーンショット 2023-12-13 17.13.16.png

感想

結果的にApp Distributionに配布できるまでの時間だけなら約1時間→10分程度まで短縮することができました🎉🎉
待ち時間が削減されて、開発効率が圧倒的に上がりました🙌

ちなみにbuildTestが思っているより時間が掛かっているのは別の原因がありそうでした。
その原因については、また投稿します。

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