Swift 6.3は2026年8月24日時点で正式リリース済みです。まずはSwift 6.3の公式リリースノートを基準にしてください。ここで重要なのは、コンパイラーをSwift 6.3へ更新しても、すべてのターゲットがSwift 6言語モードへ移行したことにはならない点です。
症状:Swift 6.3移行エラーと並行性診断が一斉に増えた。
最短の解決策:既存設定と警告の基準値を固定し、ターゲット単位でSwift language modeを切り替え、旧設定のCIを残したまま検証します。
この手順の対象
並行性チェックを有効にした途端、既存コードの診断が大量に表示されたiOS・macOS開発者向けです。複数モジュール、Objective-CやCを含む構成、古い依存パッケージを保守するテクニカルリードにも適しています。
また、CIでSwift 6.3の移行結果を確認しながら、現在のリリース作業を止めたくないビルドエンジニアにも役立つ構成です。
※ 最終更新:2026年8月24日。Swift 6.3のリリース状況と移行方針は、Swift.orgの公式資料およびAppleの開発者向け資料を基に確認しています。
最初に固定する移行基準
Swift 6.3移行エラーを調べる前に、変更前の状態を保存します。次の項目をブランチ、CIログ、ビルド設定の記録として残してください。
- 使用しているXcodeとSwiftコンパイラー
- ターゲットごとのSwift language mode
- Strict Concurrency Checkingの設定
- コンパイル警告とエラーの一覧
- テストの合否、署名、アーカイブ生成の結果
- 依存パッケージのバージョンとロックファイル
- シミュレーター、実機、配布用ビルドの対象環境
Swiftの公式移行ガイドでも、移行は一度に全コードを書き換えるのではなく、互換性と診断を確認しながら進める考え方が示されています。コンパイラー更新、言語モード変更、並行性チェックの強化を同じコミットに入れると、原因の切り分けが難しくなります。
注意:警告数を移行の進捗指標にする場合でも、単純な件数だけで成功判定しないでください。1件の共有可変状態が、数十個の表面的な警告より重大な場合があります。
診断を4つの原因に分ける
共有可変状態
グローバル変数、シングルトン、キャッシュ、デリゲート、通知経由の状態など、複数の実行コンテキストから書き換えられるデータを先に確認します。読み取り専用にできる値は不変にし、書き込みが必要な状態は所有者を明確にしてください。
単に@unchecked Sendableを追加すると、コンパイラーの診断は消えても安全性の保証は増えません。ロック、Actor、シリアルな所有モデルのどれを採用するかを決め、その境界をコード上で説明できる状態にします。
Actor隔離
UI状態はMainActor、バックグラウンド処理は専用Actorなど、状態を管理する実行主体を整理します。AppleのActorに関する公式ドキュメントでは、Actorが保護された可変状態への同時アクセスを制御する仕組みとして説明されています。
既存のクラス全体に急いでActor隔離を付けると、呼び出し側へ非同期化が広がり、API設計まで一度に変わることがあります。まず状態を所有する型と、外部へ公開するメソッドを分けてから移行してください。
Sendable
値型、参照型、クロージャー、エラー型を確認し、実行境界を越えて渡される値が本当に安全かを判断します。Sendable適合を追加する前に、内部の可変プロパティ、参照オブジェクト、Objective-C型の保持状況を確認します。
非同期境界
Task、async let、継続、デリゲート、通知、完了ハンドラーが交差する箇所では、どのスレッドやActorで処理されるかが曖昧になりやすいです。Swift Concurrencyへ寄せるだけでなく、キャンセル、ライフサイクル、エラー伝播が維持されているかをテストします。
AppleのSwift Concurrencyに関するWWDC資料も、非同期処理を導入する際にデータの安全性と実行境界を確認する資料として参照できます。
依存関係を境界に閉じ込める
古い依存パッケージがSwift 6.3に対応していない場合、アプリ本体へ暫定修正を散らすのは避けます。まず公式リポジトリで互換バージョン、Swift 6対応の修正、既知のIssueを確認し、導入しているバージョンとの差分を記録してください。
依存パッケージの扱いは、次のように比較すると判断しやすくなります。
| 選択肢 | 適する状況 | 主な利点 | 注意点 |
|---|---|---|---|
| 対応版へ更新 | 公式にSwift 6.3対応が示されている | 保守を上流へ戻せる | API変更と回帰テストが必要です |
| 境界モジュールで隔離 | すぐ更新できないが利用範囲を限定できる | 移行の影響を局所化できます | ラッパーの保守が発生します |
| ソースを一時修正 | 修正量とライセンス条件を確認できる | 短期的にビルドを通せます | フォークの追従コストがあります |
| 代替実装へ移行 | 依存が長期間更新されていない | 将来の互換性を確保しやすい | 機能差と移行工数を比較する必要があります |
依存関係の互換性は、Swiftのバージョン互換性に関する公式説明だけで判断せず、各パッケージの公式リポジトリにあるビルド条件とリリース履歴を確認します。
ターゲットと混在言語を分けて進める
大規模プロジェクトでは、アプリ本体から始めるとは限りません。依存が少なく、テストがそろっている内部フレームワーク、コマンドラインツール、テスト用ターゲットから移行し、成功した設定を次のターゲットへ展開します。
Swift、Objective-C、Cの境界では、次の項目を別々に検証してください。
- SwiftからObjective-Cへ公開するAPIのnullabilityと名前変換
- Objective-Cのコールバックがどの実行コンテキストで呼ばれるか
- Cポインター、所有権、ミューテーションの扱い
@objc公開メソッドとActor隔離の組み合わせ- 混在モジュールを含むアーカイブと実機インストール
Swiftコードだけがコンパイルできても、公開ヘッダー、ブリッジング、拡張機能、テストターゲットまで検証できなければ移行完了とは言えません。ターゲット間の依存グラフを先に描き、下流のターゲットが依存する公開APIから順に確認します。
CIの二重検証とロールバック
移行ブランチでは、新しい言語モードのジョブだけを走らせないでください。旧言語モードの安定ビルドと、Swift 6.3および対象言語モードの移行ビルドを並行して実行します。比較対象はコンパイルだけではなく、テスト、署名、アーカイブ、インストール後の起動、主要機能の回帰です。
配布用コードの署名は、AppleのMac向け署名済みコードの作成手順に沿って、証明書、プロビジョニング、キーチェーン、CI上の秘密情報を移行前後で確認します。言語モードを変更した結果、コンパイルは成功しても配布工程だけが失敗するケースを見落とさないためです。
移行に失敗した場合は、次の順で戻します。
- 移行ブランチを本番リリースブランチから分離します。
- 変更したターゲットの言語モードを直前の値へ戻します。
- 依存パッケージのロックファイルを移行前の状態へ戻します。
- 旧ツールチェーンでビルド、テスト、署名、アーカイブを再実行します。
- 失敗した診断を原因分類し、1つの境界または1つのターゲットだけを再度変更します。
Macのビルド環境を分ける必要がある場合は、Macstripeの注文設定ガイドで事前に必要な環境条件を整理しておくと、移行用ノードとリリース用ノードの役割を分けやすくなります。運用上の確認事項はMacstripeのヘルプセンターにもまとめられています。
移行完了の判定
警告が表示されなくなったことだけを完了条件にしないでください。少なくとも次のチェック項目をすべて満たしたターゲットだけを「移行済み」と扱います。
- [ ] Swift language modeとStrict Concurrency Checkingの設定を記録した
- [ ] 共有可変状態、Actor隔離、Sendable、非同期境界を分類して修正した
- [ ] 不安全な注釈を追加した箇所に、理由と所有者を記録した
- [ ] 依存パッケージの対応版または隔離方針を固定した
- [ ] Swift、Objective-C、Cの境界を含むテストを通過させた
- [ ] 旧モードと新モードのCIでビルドと回帰テストを比較した
- [ ] 署名、アーカイブ、実機または配布先での起動を確認した
- [ ] 旧ツールチェーンへ戻す手順を別の担当者でも実行できるようにした
- [ ] すべての対象環境で合格するまで、旧CIノードを削除しない
経験則:移行の停止条件を先に決めてください。依存パッケージの対応版が未確認、主要な並行性テストが未実行、または旧モードの再ビルドが不能な場合は、次のターゲットへ進まずに戻す判断が安全です。
Mac環境を分ける判断
1台の公開用MacでSwift 6.3の移行と通常リリースを同時に進めると、ツールチェーン、キャッシュ、証明書、シミュレーター状態の差分が混ざります。移行用の独立環境を用意すれば、ターゲットごとの変更を再現しやすくなり、失敗時に現在のリリース作業へ影響を広げにくくなります。
ただし、長期間にわたり安定した高負荷ビルドを続けるチーム、物理デバイスや専用周辺機器を常時接続するチームでは、専用Macを購入または社内運用するほうが適しています。短期の移行検証、依存更新の確認、CI分離が目的なら、既存環境を止めずに別のMacをレンタルするほうが、検証期間だけ構成を分けるという判断に合います。
現在の構成を使い続ける方法は、証明書やキャッシュを再利用しやすい反面、移行失敗が本番ビルドへ波及しやすく、担当者ごとの環境差も残ります。MacstripeのMacレンタルなら、移行専用ノードを用意して、ターゲット単位の並行性チェックと旧環境の回帰確認を分離できます。必要な期間だけ検証環境を確保したい場合は、Macstripeの日本向け注文ページで、必要な構成と運用条件を確認してください。