Swift Digest
Blog | Swift.org Blog

sourcekitd stress tester の紹介

Introducing the sourcekitd Stress Tester

このダイジェストはClaude Opus 4.7 / 4.8によって生成されたものです(License)。原文はこちら

この記事の要点

何が発表されたのか

sourcekitd は、Xcode や SourceKit-LSP などのクライアントに対して、Swift ソースファイルのコード補完・セマンティックハイライト・リファクタリングといった機能のデータを提供するサービスです。クライアントとはリクエスト・レスポンス形式で通信します。

その堅牢性を高めるために導入されたのが sourcekitd stress tester です。macOS 向けの trunk development snapshot のツールチェインには、次の 2 つの実行ファイルが含まれます。

stress tester がどのリクエスト列を送るかは、--rewrite-mode オプションで選べる 4 つの戦略で決まります。いずれもソースファイルの構文情報をもとにリクエストを生成し、入力ファイルをさまざまな形で書き換えながら(あるいはそのまま使いながら)リクエストを送る点が共通しています。

何に使えるのか

stress tester は Swift の CI とプルリクエストのテストに組み込まれています。

sourcekitd はコンパイラと多くのコードを共有し、コンパイラが通常扱うよりもはるかに広い範囲の無効な Swift ソースコードを扱います。そのため、ここで見つかった不具合の修正は sourcekitd の編集体験だけでなく、コンパイラ本体の改善にもつながっています。

自分のプロジェクトに対して実行することもできます。

stress testing は重い処理のため、ビルドは通常よりかなり長くなります。不具合が見つかった場合は、ビルドログに出力される再現情報を添えて bugs.swift.org に報告し、FoundByStressTester ラベルを付けることが推奨されています。

導入・今後の位置づけ

sourcekitd stress tester は比較的シンプルなツールですが、ソース互換性テストスイートに対する実行結果と CI への組み込みによって、Xcode と SourceKit-LSP の編集体験の信頼性に大きく寄与すると見込まれていました。すべてのプロジェクトのすべてのファイルのすべてのトークンに対してコード補完やローカルリファクタリングが確実に動作することを確認できるため、sourcekitd やコンパイラへの変更が既存機能を退行させていないという確信を得られます。

執筆時点では実行ファイルは macOS のツールチェインでのみ提供されていましたが、Linux 対応に本質的な障壁はなく、未実装なだけだとされていました。新しいリクエスト生成戦略の追加など、コントリビューションも歓迎されています。

関連リンク