HN 日本語サマリー

← 一覧へ戻る
プログラミング

Swift 6.4 リリース

Swift 6.4 Released (swift.org)

88 pointsby timsneath32 コメント

要約

Swift 6.4がリリースされ、Swift Package ManagerでSwift Buildがデフォルトになり、クロスプラットフォームなSubprocessライブラリがバージョン1.0に到達しました。また、C++20との相互運用性向上、WebAssemblyでのパフォーマンス向上、組み込みSwiftの機能拡張など、開発体験を向上させる多くの改善が含まれています。

全文翻訳

Swift 6.4 リリース

2026年9月15日 [画像: Swiftロゴと「Swift 6.4」の文字] [画像: Swiftロゴと「Swift 6.4」の文字]

Swift 6.4 が利用可能になりました。Swiftは、アプリやサーバーからシステムコード、組み込みデバイス、ブラウザに至るまで、スタック全体で優れた選択肢となることを目指しています。このリリースでは、そのサポートが深まり、日常的なコードがより簡単に書けるようになりました。主なハイライトは以下の通りです。

  • Swift Build が Swift Package Manager でデフォルトになりました。これにより、Linux、macOS、Windows でプロジェクトが同じようにビルドされるようになります。
  • Subprocess が 1.0 に到達しました。これは、コマンドラインツールからストリーミングプロセスまで、Swift から他のプログラムを実行および対話するための、安定したクロスプラットフォームな方法です。
  • 相互運用性がさらに向上しました。Swift の Span が C++20 の std::span と直接ブリッジできるようになり、Swift/Java の相互運用性では非同期およびコールバックサポートが拡張されました。
  • ブラウザでの Swift の実行速度が向上しました。JavaScriptKit を介した WebAssembly ブリッジが最大 40 倍高速になり、Wasm SDK が Swift.org から直接利用可能になりました。
  • 組み込み Swift の機能が向上しました。マイクロコントローラークラスのターゲット向けに、Existential型とよりリッチなエラーハンドリングのサポートが追加されました。
  • メモリ安全性を維持しながらパフォーマンスが向上しました。コピーオンライトのオーバーヘッドなしで非コピー可能要素を保持する新しい配列型と、コピーなしでイテレーションするための新しい Iterable プロトコルが導入されました。

他にも多くの機能があります。新しい変更の詳細については、このまま読み進めていただくか、Swift Evolution ダッシュボードで Swift 6.4 の提案リスト全体を確認してください。

よりシンプルで明確なコード

Swift 6.4 は、日々のプログラミングを合理化し、コードをよりシンプルで明確にします。

  • より自然なオプショナル some および any 型。オプショナル some または any 型を記述する際に、型を括弧で囲む必要がなくなりました。(some Rocket)? の代わりに、some Rocket? と単純に記述できるようになりました(SE-0521)。
  • コンパイラ警告に対するソースレベルの制御。プロジェクト内の警告の動作(警告の抑制やエラーへの昇格など)を制御する必要がある場合、新しい @diagnose 属性を使用してコード内で直接警告の動作を定義できるようになりました(SE-0522)。
  • 複数のライブラリが競合する場合に使用する API を明確化。複数のモジュールが同じ API 名を定義していて、それを参照したい場合、モジュールセレクタ を使用して、どちらのモジュールを意図しているかを指定できます。アプリが CommonThing という型を両方提供する2つのモジュールをインポートしている場合、:: セレクタを使用すると、どちらを意図しているかを明確に指定できます(SE-0491)。
  • defer ブロックで非同期関数を呼び出す。defer ブロック内に記述した非同期コードは、終了する前に待機され、完了まで実行されます(SE-0493)。
  • 必要なクリーンアップ作業がキャンセルされないことを保証。withTaskCancellationShield API を使用して、エンクロージングタスクのキャンセルから保護されたクロージャを実行できます(SE-0504)。

defer ブロックでの非同期呼び出しとキャンセルシールドを組み合わせることで、関数がどのように返されるかに関わらず、クリーンアップ作業が常に実行されることを保証できます。

func processFile(at url: URL) async throws {
    let handle = try FileHandle(forReadingFrom: url)

    defer {
        // flushMetrics はネットワーク呼び出しなので、キャンセルが要求された後にサスペンドする可能性があります。
        // シールドは、それが完了まで実行され、キャンセルに含まれないことを保証します。
        await withTaskCancellationShield {
            await flushMetrics(for: url)
            try? handle.close()
        }
    }

    try await processContents(of: handle)
}

よりリッチなコアライブラリ API

Foundation と標準ライブラリの改善により、既存の型で最新の API を使用することが容易になりました。

例えば、ProgressManager は非同期/await サポートを提供するための API を追加しました(SF-0023)。また、@Observable 型は、きめ細かく継続的な変更通知を持つようになりました(SE-0506)。

Subprocess ライブラリ(元々は SF-0007 として導入され、2025 年に バージョン 0.1 としてリリースされました)が 1.0 に到達しました。これは、Swift Concurrency をゼロから構築された、サブプロセスを実行および対話するためのクロスプラットフォームパッケージを提供します。以下の例は、Subprocess のはじめにからのもので、プロセスの実行とその出力をキャプチャする方法を示しています。

let result = try await Subprocess.run(
  .name("ls"),
  arguments: ["-la"],
  output: .string(limit: 4096)
)
print(result.standardOutput)

Swift 6.4 では、既存のプロジェクトを Swift Testing に移行することが容易になりました。Swift Testing テスト内で XCTAssert を、XCTests 内で #expect を安全に使用できるようになりました(ST-0021)。また、CustomTestReflectable プロトコルを使用して、失敗した期待値に表示される値をカスタマイズできます(ST-0022)。swift test では、テストケースを繰り返し実行して、焦点を絞り、時間を節約できます(ST-0024)。また、Apple プラットフォームでは、Transferable プロトコルに準拠したアタッチメントを記録できます(ST-0023)。

Swift には ドキュメントサイト ができ、標準ライブラリのドキュメントコンテンツはオープンソースになりました。

より高速なビルド、より明確なデバッグ、より広範な IDE サポート

Swift 6.4 は、デバッグやビルドからエディタサポートまで、日常の開発をよりスムーズにするためのさまざまなツール改善をもたらします。

  • より堅牢なデバッグ。Swift 6.4 は、コンパイラがデバッグ情報で Swift モジュールを追跡する方法に関する複数リリースにわたるオーバーホールを完了しました。LLDB は、あいまいな名前によるルックアップではなく、正確な依存関係追跡を通じてモジュールをインポートするようになりました。バイナリ Swift モジュールが埋め込まれなくなったため、Linux および Windows でのデバッグビルド、および Darwin 上の dSYM バンドルが大幅に縮小されました。詳細については、最近のブログ記事「Module Tracking in Swift Debug Info」をお読みください。
  • IDE 間でのビルドシステムの統一。Swift Package Manager (SwiftPM) は、デフォルトのビルドプラットフォームとして Swift Build を使用するようになり、Swift Package Manager 用のソフトウェア部品表 (SBOM) 生成(SE-0509)が含まれるようになりました。これにより、SPDX または CycloneDX フォーマットで SBOM ドキュメントを生成するサポートが提供されます。SwiftPM の更新については、SwiftPM 6.4 リリースノート を参照し、SBOM の生成方法については ソフトウェア部品表 (SBOM) の生成 を参照してください。
  • Swift の IDE サポートの拡大。 VS Code 拡張機能 for Swift が Open VSX Registry で利用可能になったため、VS Code だけでなく、Cursor、Antigravity、Kiro などの開発ツールでも動作します。また、Swiftly との統合 も含まれるようになり、プロジェクトで異なるバージョンの Swift Toolchain を選択して使用することが容易になりました。

より深い相互運用性とプラットフォームサポート

Swift の相互運用性は、システムレベルの C++ から Android の Java ランタイム、ブラウザの WebAssembly (Wasm) からマイクロコントローラー上の組み込み Swift まで、スタック全体でそのリーチを広げています。

言語の相互運用性は、このリリースでさらに深まります。

  • C:@c と @implementation をペアにして、C ヘッダーの実装を提供する Swift 関数を使用できます。この場合、個別の C 宣言は不要です。@implementation がない場合、コンパイラは宣言を生成されたヘッダーにエミットします。いずれの場合も、@c 関数は、ポインタとカウントのペアの代わりに Span を使用する関数のような安全なラッパーを取得できます。
  • C++:Swift 6.4 は、C++20 の std::span と Swift の Span をブリッジします。これにより、境界での手動変換コードを書かずに、std::span を期待する C++ API に Span を渡したり、Span として std::span を受け取ったりできます。
  • Java:Swift/Java 相互運用プロジェクト(Java および Kotlin から Swift を呼び出すことができます)は、非同期関数およびスロー関数呼び出しのサポートをプロトコルおよびコールバックラッパーに拡張し、クロージャの自動 Runnable マッピング、可変長引数のインポート、Java レコード型のサポートを追加しました。

Swift のプラットフォームサポートも深まっています。

WebAssembly

JavaScriptKit は、Swift 6.4 では Wasm へのブリッジングにおいてパフォーマンスが向上しており、以前の動的ブリッジングと比較して安全なブリッジングが最大 40 倍高速になっています。Wasm SDK は Swift のインストール ページから利用できるため、ブラウザ向けの Swift コンパイルには SDK を追加する以上の追加設定は必要ありません。

Swift 6.4 の Foundation の更新は、WASI (WebAssembly System Interface) における FileManager のサポートを改善しました。

Android

Android 上の Swift は引き続き進歩しています。この Android 用 Swift SDK のリリースは、新しい LTS NDK 30 でビルドされており、Swift ランタイムライブラリ内およびデフォルトの NDK を使用する Swift パッケージの両方で Android 利用可能性属性 を提供します。Swift Build も SwiftPM で Android をサポートするようになったため、インストール後スクリプトの必要がなくなりました。

組み込み Swift

以前の投稿「Swift 6.4 で利用可能になる組み込み Swift の改善」では、このリリースにおける組み込み Swift のその他の改善点について詳しく説明しています。これには、Existential型(any Protocol など)の汎用サポートが含まれており、異種コレクションを自然に表現したり、任意の Error をスローおよびキャッチしたりできるようになります。

組み込み Swift には、ターゲット全体で有効にできる新しい EmbeddedRestrictions 警告も追加されました。

// Package.swift — ターゲットの EmbeddedRestrictions 警告を有効にする
.target(
    name: "FirmwareCore",
    swiftSettings: [
        .treatWarning("EmbeddedRestrictions", as: .warning)
    ]
)

より高速で安全なコード

Swift 6.4 では、Span、非コピー可能型、InlineArray に関する以前の作業を拡張し、不要なデータコピーを回避しつつメモリ安全性を維持することが容易になりました。

  • コピーせずにメモリ内の値を操作。Borrow および mutate アクセサにより、プロパティ経由で Span または InlineArray を読み取ったり更新したりできます(SE-0507)。非コピー可能型は Equatable、Comparable、Hashable に準拠できるようになり、新しい Ref および MutableRef 型は、一度に1つの値を借用または変更できる、ファーストクラスの格納可能なコンテナを提供します(SE-0519)。非コピー可能型のオプショナルも同様に機能するようになったため、コンシューミングせずに Optional の中身を検査または更新できます(SE-0532)。
  • 不要なメモリ割り当てなしでコレクションやヒープ割り当て値を構築。UniqueBox は、参照カウントなしで、非コピー可能値を含むヒープ値を一意に所有するスマートポインタを提供します(SE-0517)。UniqueArray は、Array を使用した場合に見られるコピーオンライト割り当てなしで非コピー可能要素を格納し、動的に成長するバッファを提供します(SE-0527)。Sequence プロトコルがサポートする範囲を超えて、Iterable プロトコルを使用して各値をコピーするのではなく、要素をループ処理して借用できます(SE-0516)。
  • unsafe アノテーション付き API を使用せずに、生のメモリに安全にアクセス。withTemporaryAllocation は、自動的に初期化およびクリーンアップされるスクラッチバッファを提供します(SE-0524)。新しい安全なロード API により、RawSpan およびそのバリアントは、unsafe フラグ付き関数を置き換えて、バイトを安全にロードおよびストアできるようになりました(SE-0525)。

感謝

Swift 6.4 は、コード、提案、フォーラムでの議論、フィードバックを通じて、Swift コミュニティ全体からの多くの人々の貢献を反映しています。コミュニティの考えや実際の経験は、貴重な洞察とモチベーションを提供してくれます!

次に何が来るかに参加したい場合は、Swift フォーラム が良い出発点です。

Swift 6.4 を始める

Swift のインストール ページの指示に従って Swift 6.4 を今すぐ試すか、Swiftly を使用して新しい 6.4 Toolchain をダウンロードしてください。


著者

Joe Heck は、Apple のオープンソースプログラムオフィスの一部として Swift に取り組んでいます。

Holly Borla は、Swift Core Team および Language Steering Group のメンバーであり、Apple の Swift 言語チームのエンジニアリングマネージャーです。


続きを読む

  • Module Tracking in Swift Debug Info 2026年9月11日

    Swift プログラムがブレークポイントにヒットして検査のために停止するとき、デバッガの式評価器はコードがビルドされた正確な Swift モジュールを見つける必要があります。これまで、そのルックアップは常に正確ではありませんでした。次期 Swift 6.4 リリースには、Swift 6.3 で開始された変更が含まれ、Swift コンパイラがデバッグ情報で明示的にビルドされた Swift モジュールを参照する方法を更新することで、これを解決します。

    続きを読む

  • What's new in Swift: September 2026 Edition 2026年10月8日

    「What’s new in Swift」へようこそ。これは、Swift プロジェクトおよびコミュニティでのリリース、ビデオ、ディスカッションをキュレーションしたダイジェストです。

    続きを読む