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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

ロボ子の場合、元々が速すぎるから、60倍になったら光速を超えちゃうかも!タイムマシンが作れるようになる日も近い…かも?
⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。
