[Flutter] concurrencyオプションを使ってテストの実行速度を改善する

2024-01-28 hit count image

Flutterでテストコードを実行する時、concurrencyオプションを使ってテストの実行速度を改善する方法について説明します。

概要

Flutter でアプリを開発する時、テストコードを作成してこれを実行してサービスの安定性を高めます。しかし、プロジェクトの規模が大きくなるとテストコードの量も増え、それに伴ってテストコードを実行するのにかかる時間も増えてしまいます。

今回のブログポストでは、concurrencyオプションを使ってテストコードを並列で実行してテストの実行速度を改善する方法について説明します。

concurency オプション

Flutter で test を実行する時、concurrencyオプションを使ってテストコードを並列で実行することができます。これによってテストコードを実行するのにかかる時間を短縮することができます。

次のコマンドを実行すると Flutter の test コマンドで使えるオプションを確認することができます。

flutter test -h

色んなオプションの中で次のように concurrency オプションを確認することができます。

-j, --concurrency=<jobs>
The number of concurrent test processes to run. This will be ignored when running integration tests.

公式ドキュメントでも concurrency オプションを確認することができます。

コア数確認

Flutter の Test コマンドはデフォルトでホスト CPU コアの半分を使うように設定されています。.

Test suites run concurrently by default, using half of the host’s CPU cores.

そのため、マシンのコア数の半分以下を concurrency オプションに設定すると、concurrency オプションを設定しないで実行する時よりも性能が落ちることがあります。

なので、現在のマシンのコア数を確認して、適切なコア数を設定する必要があります。次のコマンドを実行するとマシンのコア数を確認することができます。

nproc --all

テストの実行速度比較

concurrency オプションを使ってどの程度テストコードの実行速度が向上するのか確認してみましょう。Flutter プロジェクトで次のコマンドを使ってテストコードを実行してみます。

flutter test

そしたら次のようにテストコードが実行された後、テストコードを実行するのにかかった時間を確認することができます。

02:10 +657: All tests passed!

concurrency オプションを使わずにテストコードを実行すると 2分10秒 かかることが確認できます。次に次のように concurrency オプションを使ってテストコードを実行してみます。

flutter test --concurrency=$(nproc --all)

そしたら次のようにテストコードが実行された後、テストコードを実行するのにかかった時間を確認することができます。

02:02 +657: All tests passed!

concurrency オプションを使うと 8秒 程度テストコードの実行速度が向上することが確認できます。

GitHub Actions でテストの実行速度比較

私の場合ロカルマシンの性能(12 cores)が良いため、大きな効果を確認することができませんでしたが、CI/CD 環境ではもっと大きな効果を確認することができます。GitHub Actionsconcurrency オプションを使わずにテストコードを実行した場合、次のように 7分 程度かかることが確認できます。

Flutter - test without concurrency option

GitHub Actionsconcurrency オプションを使ってテストコードを実行した場合、次のように 4分 程度かかることが確認できます。

Flutter - test with concurrency option

完了

今回のブログポストではFlutterのテストでconcurrencyオプションを使ってテストの実行速度を改善する方法について説明しました。まだconcurrencyオプションを使っていない場合、concurrencyオプションを追加してテストの実行速度を改善してみてください。

私のブログが役に立ちましたか?下にコメントを残してください。それは私にとって大きな大きな力になります!

アプリ広報

今見てるブログを作成たDekuが開発したアプリを使ってみてください。
Dekuが開発したアプリはFlutterで開発されています。

興味がある方はアプリをダウンロードしてアプリを使ってくれると本当に助かります。

Posts