概要
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
オプションを確認することができます。
- 公式ドキュメント: Test 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 Actions
で concurrency
オプションを使わずにテストコードを実行した場合、次のように 7分
程度かかることが確認できます。
GitHub Actions
で concurrency
オプションを使ってテストコードを実行した場合、次のように 4分
程度かかることが確認できます。
完了
今回のブログポストではFlutter
のテストでconcurrency
オプションを使ってテストの実行速度を改善する方法について説明しました。まだconcurrency
オプションを使っていない場合、concurrency
オプションを追加してテストの実行速度を改善してみてください。
私のブログが役に立ちましたか?下にコメントを残してください。それは私にとって大きな大きな力になります!
アプリ広報
Deku
が開発したアプリを使ってみてください。Deku
が開発したアプリはFlutterで開発されています。興味がある方はアプリをダウンロードしてアプリを使ってくれると本当に助かります。