💯

Jest の shard オプションと GitHub Actions の matrix strategy を使用して並列にテストを実行する

2022/05/16に公開

Jest の shard オプション

Jest の v28 のリリースで CLI に --shard というオプションが追加されました。
https://jestjs.io/ja/blog/2022/04/25/jest-28

このオプションは jest --shard=1/3 という形で jest を実行すると、最初の 1/3 だけのテストを実行する仕組みを提供しています。
https://jestjs.io/ja/docs/cli#--shard

GitHub Actions の matrix strategy

matrix strategy は job に指定すると、事前に列挙した変数ごとに job を実行する仕組みです。

https://docs.github.com/ja/actions/using-jobs/using-a-matrix-for-your-jobs

以下のように書くと、shard がそれぞれ 1/42/43/44/4 の4つの値を取る4つの job が並列に実行されます。

jobs:
  test:
    runs-on: ubuntu-latest
    strategy:
      matrix:
        shard: [1/4, 2/4, 3/4, 4/4]

この仕組みと Jest の shard オプションを組み合わせることで、テストを並列に実行することができます。

サンプルリポジトリ

これを試したサンプルリポジトリは次のリンクです。

https://github.com/odan-sandbox/jest-shard-github-actions-sandbox

git push して Actions を実行すると、画像のように4つの job でそれぞれ異なるテストファイルが実行されています。

まとめ

これまで GitHub Actions で並列にテストを実行するには、事前にテストファイルを分割して、テストファイル名を明示的に jest に与える方法しかありませんでした。
しかし v28 で導入された --shard オプションによって簡単に並列テストを実行できるようになりました。

Discussion