2026 Swift 6 厳格並行性移行:日次レンタル Mac とクリーンな Xcode 26 で 1~3 日に Sendable / @MainActor / サードパーティ阻塞を解消
Xcode 26 へ移行し complete concurrency を有効化すると、CI 上で Sendable 警告が一気に増え、サードパーティ未対応と自社スレッド設計の問題が混線しがちです。本稿はテックリード/個人開発者向けに、3 つの痛み、意思決定マトリクス、7 ステップ、分診表、3 つの数値指標、1~3 日のレンタル macOS スケジュールを提示します。関連:WWDC 前ブランチ凍結と Xcode プレビュー、CLT とフル Xcode の比較、SSH/VNC FAQ。
目次
01. 三つの痛み
1)主力マシンの「染色」:証明書・VPN・企業ポリシーと共存する SWIFT_STRICT_CONCURRENCY 実験は、~/.swiftpm や派生データと絡み再現性の低いログを生みます。レビュアが同じ基線に立てません。
2)サードパーティが業務バグに見せかける:UIImage の actor 越え、URLSession の non-Sendable クロージャ、ObjC 由来のスレッド前提など、依存グラフで先に分類しないとアップグレードとリファクタの往復で日が潰れます。
3)Debug は通るが Archive のみ落ちる:Release の最適化とモジュール可視性の差で初めて表面化するケースが多く、第 2 のクリーン macOSで Release を日次ゲートにすることが有効です。
ベンダー警告と自社警告を混ぜないこと、が 2026 年の最大レバレッジです。
02. 意思決定マトリクス
WWDC 前のブランチ凍結と並走する場合は、並行性作業を別レーンに分けてください。
| トリガー | アクション | レンタル価値 |
|---|---|---|
| 200+ 警告がモジュール横断 | 版固定後に依存/自社を二分 | DerivedData/SPM を隔離 |
| 72h 以内に Archive 必須 | 10 件ごとの増分ゲート+夜間 Archive | CPU を占有しやすい |
| バイナリ SDK の旧スレッド前提 | 更新・fork・境界アダプタを比較し所有者を明記 | スタイルガイドを汚さず試作可能 |
| CLT のみ評価 | CLT とフル Xcode を先に読む | GUI Xcode を削らず検証 |
HSM 配下に鍵を残す場合でも、レンタル Mac をリハーサル/ログ収集に使えば索引と型検査の速度は得られます。
03. 7 ステップ Runbook
- 固定:
xcodebuild -version、swift --version、SWIFT_STRICT_CONCURRENCY、OTHER_SWIFT_FLAGSを Markdown に記録。 - グラフ:
swift package show-dependencies --format jsonを添付可能なサイズに分割保存。 - 境界優先:@MainActor の ViewModel/ネットワーク入口/永続化ファサードから着手。
- ゲート:10 修正ごとに
xcodebuild -destination 'generic/platform=iOS' buildを必ず緑に。 - Archive 整合:CI と同じ Release フラグ(例:
COMPILER_INDEX_STORE_ENABLE)を毎日再現。 - 証跡:
xcresultと diff ハッシュ、タイムゾーン付きでチケットへ。 - 消去:鍵とキャッシュを削除。SSH/VNC FAQ で帯域を確認。
xcodebuild -scheme YourApp -showBuildSettings | egrep 'SWIFT_STRICT_CONCURRENCY|SWIFT_VERSION'
swift package show-dependencies --format json | head -c 8000
空き容量が約 18 GB 未満だと索引と whole-module が I/O で競合し、遅さをアルゴリズム難易度と誤認しがちです。古いシミュレータと旧 Archive を先に削除してください。
04. 分診表
| 症状 | 最初の一手 | NG 例 |
|---|---|---|
| 単一ベンダーモジュール集中 | リリースノートと最小 Swift 版を確認 | プロジェクト全体で検査を無効化 |
UIImage actor 越え | デコード/描画を @MainActor に集約 | nonisolated(unsafe) の乱用 |
| Archive のみ失敗 | Debug/Release の差分を先に比較 | ASC 側のせいに決めつける |
| 拡張ターゲットだけ古い既定値 | 全ターゲットの Swift/並行性フラグ一覧を 1 枚に | アプリ本体だけ直す |
05. 指標・誤解・1~3 日計画
- 指標1:complete 化で初回クリーンが約 18~35% 伸びることがあります。
- 指標2:重複除去後の根因ファイルは 12~40 前後に収束しやすいです。
- 指標3:第 2 Archive ゲートで誤診が約 20~30% 減る例があります。
誤解:Sendable を一括置換で解決できる/全アプリをグローバル actor に逃がせば早い/シミュレータ Debug だけで十分、はいずれも長期コストが高いです。
1 日目:固定と依存グラフ。2 日目:修正とゲート+ 1 回 Release Archive。3 日目:同一コミットでレンタル機と統制機を突き合わせ、鍵を消去。
06. コンテナ vs 日次レンタル Mac
Linux CI は静的検証に強い一方、Xcode 索引・Interface Builder/SwiftUI プレビュー・署名周辺の Release 再現ではネイティブ macOS が有利です。SSH だけだとログ転送やキーチェーン文脈の欠落という隠れコストが乗ります。
コンテナや旧ハードは低予算の試行に向きますが、1~3 日で再現可能な Archive と Runbookが欲しい場合は Apple Silicon 上の Xcode 26 が滑らかです。日次レンタルで CAPEX をスパイクに圧縮できます。料金ガイド と FAQ を併読してください。
07. FAQ
Q: targeted のまま永続できますか? しばらくは可能ですが、complete 要求が来た週に一括で破綻しがちです。主系は targeted、レンタル機で complete のシャドウを推奨します。
Q: @preconcurrency import は恒久策? 一時ブリッジに留め、担当・期限・上流チケットを必ず紐付けます。
Q: ディスクの目安は? 実務上、15~18 GB 以上の空きを維持しないと索引と型検査が足を引っ張ります。