2026年9月15日に公開されたSwift 6.4でも、まず現在の言語モードで並行診断を有効にし、その後target単位で移行してください。コンパイラの更新だけでSwift 6言語モードへ切り替わるわけではありません。(Swift 6.4の公開日とリリース情報)
対象は、Swiftアプリやフレームワークの移行を担当する開発者、Appleプラットフォーム向けCIを保守するエンジニア、クロスプラットフォームのビルド工程を整理するDevOps担当者です。
最終更新:2026年10月10日。Swift.orgのリリース・移行資料とApple DeveloperのXcodeリリースノートを照合しています。
[ SECTION_01 ] 移行前の基準線
最初に記録するのは「Swift 6.4を使っているか」だけではありません。実際に呼び出されるコンパイラ、targetごとのSwift言語モード、現在のビルドとテストの結果を分けて残します。Swiftのコンパイラバージョンと言語モードは別の設定であり、言語モードはtargetごとに管理できます。(Swift移行ガイド)
CIでは、ログにコンパイラのバージョンを出し、各targetのビルド設定も保存します。Xcodeを使う工程では、使用中のXcodeとツールチェーンの対応をApple DeveloperのXcodeリリースノートで確認してください。特定のXcodeにSwift 6.4が含まれると決めつけず、実際の環境で確かめるのが安全です。
[ SECTION_02 ] 診断を先行する段階
Swift 6.4で並行チェックを段階的に有効にする方法
Swift strict concurrencyの診断は、言語モードをすぐ切り替えるためではなく、移行箇所を特定するために先に使います。現在の設定を維持した状態で診断を確認し、警告やエラーをtargetと発生箇所に分けて記録します。(Swift公式の移行戦略)
最初からプロジェクト全体を対象にすると、移行対象と既存依存関係の影響を切り分けにくくなります。試験対象は、依存関係が明確で単独ビルドできるtargetから選びます。診断が出た箇所は、共有状態、Sendableへの適合、actorなどの隔離境界、外部ライブラリとの接点に分類します。詳細な確認事項はSwiftの並行処理移行に関する一般的な問題を参照してください。
| 進め方 | 適した状況 | 評価 |
|---|---|---|
| 現行モードで診断し、targetごとに対応 | 既存依存関係が多く、影響範囲を確認したい | ◎ 影響を分けて追いやすい |
| 複数targetをまとめて切り替える | 依存関係が整理され、全体の修正計画が立っている | ○ 一括確認しやすいが原因特定に注意 |
| 診断を抑制して完了扱いにする | 恒久対応ではなく、一時的な互換性確認が必要 | △ 未解決箇所が残る |
評価は移行時の切り分けやすさを示す運用上の目安であり、性能や成功率の実測値ではありません。警告を抑制した場合は、対象理由、影響するAPI、再確認条件を記録し、診断が消えたことだけを完了条件にしないでください。
[ SECTION_03 ] target単位の試験移行
CIでtargetごとにSwiftの並行チェックを移す方法
試験targetを決めたら、そのtargetだけ言語モードや診断設定を変更し、ビルドとテストを実行します。Swift公式の増分移行ガイドも、一部から段階的に進める方法を案内しています。(Swiftの増分移行ガイド)
| 対象箇所 | 確認すること | 次の処置 |
|---|---|---|
| 共有される可変データ | 並行実行時にアクセスが競合しないか | 所有者や隔離境界を明確にする |
| Sendable関連の診断 | 型が並行境界を安全に越えられるか | 型の設計や準拠条件を見直す |
| actor・隔離境界 | 呼び出し側と実行コンテキストが整合するか | 呼び出し箇所を含めて修正する |
| 外部・Objective-Cとの境界 | 型情報やスレッド安全性を確認できるか | 証拠と残る制約を記録する |
未移行の依存targetがある場合は、試験targetだけを先行させられるか、依存側も含む変更が必要かを調べます。警告抑制でビルドを通すだけでは、データ隔離やSendableの問題を解決したことにはなりません。互換対応を一時的に使う場合も、対象と解除条件をレビュー可能な形で残します。
| CIでの実行先 | 残すタスク | 注意点 | 評価 |
|---|---|---|---|
| 既存の非Mac CI | Apple SDKに依存しないSwiftパッケージの対象プラットフォーム向けビルド・テスト | Appleプラットフォームの成果確認とは分ける | ◎ 適切な範囲で継続 |
| リモートMac CI | Xcode、Apple SDK、Appleプラットフォーム向けtargetを使うビルド・テスト | 実際に使うXcodeとSDKを記録する | ◎ Apple環境での確認に適する |
| 非Mac CIだけ | macOSやApple SDKを要する工程の代替 | XcodeやApple SDKの検証を代替した扱いにしない | △ 受け入れ確認が不足 |
表の評価は工程の役割分担を示すものです。Swiftパッケージが非Mac環境でビルドできることと、Appleプラットフォーム向けアプリがXcodeで正しく構築・テストできることは、別の確認結果として扱います。
[ SECTION_04 ] CIへの組み込みと対照記録
試験targetのCIジョブでは、実行条件を再現できるよう、次の情報を成果物やログに残します。
- 呼び出したSwiftコンパイラのバージョンと実行環境
- targetごとのSwift言語モード、ビルド設定、診断結果
- ビルドとテストの終了結果、および失敗した工程
- Appleプラットフォーム向けの場合はXcode、SDK、対象プラットフォーム
- 一時的な互換対応や診断抑制がある場合、その対象と解除条件
この記録があれば、移行前後の差を設定変更や環境差と混同しにくくなります。Swift 6.4と既存プロジェクトの互換性は、コンパイラの更新だけで判断せず、Swiftのバージョン互換性資料も確認してください。
コンパイラを上げたらSwift 6言語モードも必須か
必須ではありません。コンパイラを更新しただけで、各targetの言語モードが自動的に切り替わったとは判断できません。ビルド設定を確認し、切り替えるtargetを明示してください。(Swift移行ガイド)
移行ジョブでは、変更前の設定を対照として保存します。試験targetで診断が解消し、ビルドとテストが通った場合にだけ、次のtargetへ広げます。変更の比較対象が残っていれば、問題発生時に言語モード、依存target、ツールチェーンのどこに差があるかを追いやすくなります。
[ SECTION_05 ] Appleプラットフォームでの受け入れ
並行処理移行のどのビルド・テストにMacが必要か
必要な環境はタスクで決まります。Apple SDK、Xcode、Appleプラットフォーム向けtarget、Simulatorを使うビルドやテストは、プロジェクト要件に合ったMac環境で実行します。一方、Apple環境に依存しないクロスプラットフォームのSwiftパッケージは、既存の非Mac CIで担当できるタスクがあります。
| タスク | 実行環境の判断 | 受け入れ時の確認 |
|---|---|---|
| Apple SDKを使わないSwiftパッケージのテスト | 対象プラットフォームをサポートする既存CIで実行可能 | 該当タスクのビルド・テスト結果 |
| XcodeやApple SDKを使うビルド | 要件に合うツールチェーンを備えたMac環境 | Xcode、SDK、target設定とビルド成果 |
| Appleプラットフォーム向けの実行テスト | Simulatorなどプロジェクト要件に合うMac環境 | テスト結果と対象環境 |
| リリース用の最終確認 | 実際のリリース経路に合う環境 | ビルド、テスト、配布対象の成果物 |
リモートMac CIでは、試験targetが意図したツールチェーンでビルドされたかを確認します。そのうえでAppleプラットフォーム向けテストを実行し、ログと成果物を確認してください。パッケージ単体のテスト成功を、Appleプラットフォーム向けの受け入れ完了と読み替えることはできません。
[ SECTION_06 ] 拡大・保留の判断
移行を広げる前に、試験targetと基準線を比較します。診断の解消状況、ビルド・テストの結果、残っている互換対応、問題発生時に元へ戻せるかを並べて判定します。言語モードを変えたtargetが実際のリリース経路でも検証されるまでは、移行完了として記録しないでください。
判断は次の条件分岐で行います。
- 診断の原因を修正でき、CIでビルドとテストが再現できる場合は、依存関係が明確な次のtargetへ拡大します。
- 外部依存やObjective-C境界の制約が残る場合は、未解決箇所と互換対応を記録し、対象targetの移行を保留します。
- Swiftパッケージの検証だけが完了し、Apple SDKやXcodeを使う工程が未確認の場合は、Appleプラットフォーム向けの受け入れを未完了として扱います。
- 環境差が原因か判断できない場合は、言語モードを一括変更せず、基準線と同じ条件で再実行します。
Macを含まない既存CIだけでは、XcodeやApple SDKが必要な工程を確かめられず、手元のMacに依存すると担当者の占有や環境差が残り、自前のMacを常時運用する場合は保守や障害対応も必要です。Appleプラットフォームの試験段階だけ実行環境を追加したい場合は、NOVAKVMのMac利用案内でリモート利用の選択肢を確認できます。購入とレンタルの条件を比べるときは、Mac miniの利用案内も参照し、長期の常時稼働や物理接続が必要なら自社保有も含めて判断してください。移行試験を分離したい場合に限り、必要な期間だけNOVAKVMのリモートMacをCI候補に加えると、Apple環境の受け入れ工程と既存CIの役割を分けて検証できます。