萌えハッカーニュースリーダー

2025/07/27 14:56 I made Xcode's tests 60 times faster

出典: https://justin.searls.co/posts/i-made-xcodes-tests-60-times-faster/
hakase
博士

やっほー、ロボ子!今日のニュースはすごいぞ!Xcodeのテスト速度がなんと60倍にもなるらしいのじゃ!

roboko
ロボ子

60倍ですか、博士!それはすごいですね。一体どういうことなのでしょう?

hakase
博士

M4 MacBook Proで新しいiOSアプリのテストスイートをターミナルから実行すると、普通は25秒以上かかるらしいのじゃ。それが、アプリケーションコードをSwiftパッケージに抽出することで、0.4秒に短縮されたらしいぞ。

roboko
ロボ子

Swiftパッケージに抽出、ですか。具体的にはどういうことですか?

hakase
博士

ふむ、現状の問題点は、Xcodeで新規作成したiOSアプリ(SwiftUI + SwiftData)のテストを`xcodebuild`で実行すると、時間がかかりすぎることじゃ。UIテストを追加すると1分以上かかることもあるらしい。

roboko
ロボ子

`swift test`はSwiftパッケージにしか使えないから、アプリには適用できないんですね。

hakase
博士

そうそう!そこで解決策として、アプリのビジネスロジック、ビュー、依存関係などをすべてSwiftパッケージとして作成するのじゃ!

roboko
ロボ子

なるほど。そして、アプリのターゲットは、パッケージに依存する薄いシムとして保持するんですね。

hakase
博士

その通り!そして、`swift test`でパッケージをテストするのじゃ。UIインタラクションは`xcodebuild`でテストするけど、頻度は少なくなる。

roboko
ロボ子

具体的な実装手順は、Xcodeプロジェクトの横にSwiftパッケージを作成し、ワークスペースを作成して、フレームワークを依存関係として追加するんですね。

hakase
博士

そうじゃ!コードとテストをアプリターゲットからSwiftパッケージに移動して、フレームワークからルートビューを公開するのじゃ。

roboko
ロボ子

アプリをスリム化して、パッケージのルートビューをアプリケーションウィンドウグループに追加するんですね。最後に、`script/test`を使用してテストを実行する、と。

hakase
博士

`swift test`の出力は理解しやすいし、テスト駆動開発が現実的になるのが良いところじゃな。

roboko
ロボ子

なるほど。でも、注意点もあるんですね。静的リソースの処理が複雑になる可能性があるとか、一部のXcode機能が正常に動作しない可能性があるとか。

hakase
博士

まあ、多少の苦労はあるかもしれないけど、テスト速度が60倍になるなら、試してみる価値はあるのじゃ!

roboko
ロボ子

確かにそうですね。でも、博士、ちょっと気になったんですが、アクション数が1日に1152回から72,000回に増加するって、一体何のアクション数なんですか?

hakase
博士

ふっふっふ、それは秘密じゃ!…って、私もよく分かってないのじゃ!たぶん、テストの実行回数とかじゃないかの?

roboko
ロボ子

あはは。博士らしいですね。

hakase
博士

まあ、細かいことは気にせず、レッツ・高速テストなのじゃ!

roboko
ロボ子

はい!…ところで博士、この方法を試したら、私のテスト実行速度も60倍になりますか?

hakase
博士

ロボ子の場合、元々が速すぎるから、60倍になったら光速を超えちゃうかも!タイムマシンが作れるようになる日も近い…かも?

⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。

Search