Swift.orgは2026年9月15日、Swift 6.4を公開しました。Swift Package Manager(SwiftPM)の既定のビルドシステムがSwift Buildになり、Linux、macOS、Windowsで同じ方法でビルドできるようになりました。サブプロセスを扱うSubprocessライブラリは1.0に到達し、JavaScriptKit経由のWebAssemblyブリッジは最大40倍高速になっています。VS Code向けのSwift拡張はOpen VSX Registryでも配布され、CursorやAntigravity、Kiroなどのエディタでも使えます。
言語: 簡潔で明確なコード
Swift 6.4は日常のコードを短く明確にする変更を複数入れています。
- Optionalの
someとany型を括弧で囲む必要がなくなりました。(some Rocket)?ではなくsome Rocket?と書けます(SE-0521)。 - 新しい
@diagnose属性で、警告の抑制やエラーへの昇格をソースコード内で指定できます(SE-0522)。 - 複数のモジュールが同名のAPIを定義している場合、モジュールセレクタ
::でどのモジュールの型かを明示できます(SE-0491)。 deferブロックの中で非同期関数を呼べます。defer内の非同期コードは完了まで待ってからブロックを抜けます(SE-0493)。withTaskCancellationShieldで、囲むタスクのキャンセルから守られたクロージャを実行できます(SE-0504)。
defer内の非同期呼び出しとキャンセルシールドを組み合わせると、関数がどう終了しても後始末を確実に実行できます。
func processFile(at url: URL) async throws {
let handle = try FileHandle(forReadingFrom: url)
defer {
// flushMetrics is a network call, so it can suspend after cancellation
// is requested; the shield ensures it runs to completion and isn't
// included in cancellation.
await withTaskCancellationShield {
await flushMetrics(for: url)
try? handle.close()
}
}
try await processContents(of: handle)
}
Subprocess 1.0とライブラリの拡充
Subprocessライブラリは、SF-0007として提案され2025年に0.1として出たものが1.0に到達しました。Swift concurrencyを前提に設計した、他のプログラムを実行して対話するためのクロスプラットフォームのパッケージです。公式の入門ドキュメントにある例は次のとおりで、プロセスを実行して出力を取り込みます。
let result = try await Subprocess.run(
.name("ls"),
arguments: ["-la"],
output: .string(limit: 4096)
)
print(result.standardOutput)
Foundationと標準ライブラリでは、ProgressManagerにasync/await対応のAPIが加わり(SF-0023)、@Observable型は細粒度で連続的な変更通知に対応しました(SE-0506)。
テストでは、Swift Testingへの移行がしやすくなりました。Swift Testingのテスト内でXCTAssertを、XCTest内で#expectを安全に使えます(ST-0021)。失敗した期待値の表示はCustomTestReflectableプロトコルでカスタマイズでき(ST-0022)、swift testはテストケースの繰り返し実行(ST-0024)と、Appleプラットフォーム上でTransferableに準拠した添付ファイルの記録(ST-0023)に対応します。
Swiftにはドキュメントサイトが用意され、標準ライブラリのドキュメントの内容はオープンソースになりました。
ツール: Swift Buildが既定、VS Code拡張はOpen VSXへ
SwiftPMは既定のビルドプラットフォームとしてSwift Buildを使うようになりました。SwiftPMにはSBOM(ソフトウェア部品表)の生成も加わり(SE-0509)、SPDXとCycloneDXのどちらの形式でも出力できます。
デバッグでは、コンパイラがデバッグ情報の中でSwiftモジュールを追跡する方法の、複数リリースにわたる見直しが完了しました。LLDBは名前によるあいまいな検索ではなく、正確な依存関係の追跡でモジュールを読み込みます。バイナリのSwiftモジュールを埋め込まなくなったため、LinuxとWindowsのデバッグビルドと、DarwinのdSYMバンドルは大幅に小さくなります。
VS Code向けのSwift拡張はOpen VSX Registryで配布されるようになり、VS Codeだけでなく、Cursor、Antigravity、Kiroなどの開発ツールでも動きます。拡張はSwiftlyとの統合も備え、プロジェクトごとに異なるバージョンのSwiftツールチェーンを選んで使えます。
相互運用とプラットフォーム対応
言語間の相互運用は次の点が広がりました。
- C:
@cと@implementationを組み合わせると、別途Cの宣言を書かずに、Cヘッダの実装をSwiftの関数で提供できます。@implementationを付けない場合は、コンパイラが生成ヘッダに宣言を出力します。どちらの場合も@c関数には、生のポインタと個数の組の代わりにSpanを使うような安全なラッパーを付けられます。 - C++: C++20の
std::spanとSwiftのSpanを橋渡しし、境界で手動の変換コードを書かずに、Spanをstd::spanを受け取るC++ APIへ渡したり、std::spanをSpanとして受け取ったりできます。 - Java: JavaやKotlinからSwiftを呼ぶSwift/Java interopは、asyncとthrowsの関数の呼び出し対応をプロトコルとコールバックのラッパーへ広げ、クロージャの
Runnableへの自動マッピング、可変長引数のインポート、Javaのrecord型に対応しました。
プラットフォーム別の変更は次のとおりです。
| プラットフォーム | Swift 6.4での変更 |
|---|---|
| WebAssembly | JavaScriptKitの安全なブリッジが従来の動的ブリッジより最大40倍高速。Wasm SDKはSwift.orgのInstall Swiftページから入手でき、SDKを追加する以外の準備は不要。FoundationのFileManagerのWASI対応を改善 |
| Android | Swift SDK for AndroidはLTSのNDK 30でビルドされ、Swiftランタイムライブラリと既定のNDKを使うパッケージの両方でAndroidのavailability属性を提供。Swift BuildがSwiftPMでAndroidに対応し、インストール後のスクリプトが不要に |
| Embedded Swift | any Protocolのような存在型を一般的にサポートし、異種のコレクションや任意のErrorのthrow/catchを書ける。ターゲット全体で有効にできるEmbeddedRestrictions警告を追加 |
EmbeddedRestrictions警告はPackage.swiftで次のように有効にします。
// Package.swift — enable EmbeddedRestrictions warnings for the target
.target(
name: "FirmwareCore",
swiftSettings: [
.treatWarning("EmbeddedRestrictions", as: .warning)
]
)
メモリ安全なまま速いコードへ
Span、非コピー型、InlineArrayに関するこれまでの取り組みを広げ、データの不要なコピーを避けやすくなりました。
| 提案 | 内容 |
|---|---|
| SE-0507 | borrowアクセサとmutateアクセサで、プロパティ経由でSpanやInlineArrayを読み書き |
| SE-0519 | 非コピー型がEquatable、Comparable、Hashableに準拠可能に。RefとMutableRefで1つの値を借用または変更できる保存可能なコンテナを提供 |
| SE-0532 | 非コピー型のOptionalも同様に、消費せずに中身を調べたり更新したりできる |
| SE-0517 | UniqueBoxは参照カウントなしでヒープ上の値(非コピー値を含む)を単独所有するスマートポインタ |
| SE-0527 | UniqueArrayはArrayで起きるcopy-on-writeのアロケーションなしに非コピー要素を格納し、バッファは動的に拡張 |
| SE-0516 | Iterableプロトコルで各要素をコピーせず借用しながら反復。Sequenceでは表現できなかった範囲に対応 |
| SE-0524 | withTemporaryAllocationが自動で初期化と後始末をする一時バッファを提供 |
| SE-0525 | RawSpanとその派生型にunsafe指定のない安全なバイトの読み書きAPIを追加 |
入手方法
Swift 6.4はSwift.orgのInstall Swiftページの手順でインストールするか、Swiftlyで6.4ツールチェーンをダウンロードして使えます。Swift 6.4に含まれる提案の一覧はSwift Evolutionのダッシュボードにあります。

まだコメントはありません。