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 リリース Joe Heck Holly Borla 2026年9月15日 Swift 6.4 が利用可能になりました。Swift は、アプリやサーバーからシステムコード、組み込みデバイス、ブラウザに至るまで、スタック全体で優れた選択肢となることを目指しています。このリリースでは、そのサポートが深まり、日常的なコードがより書きやすくなりました。主なハイライトは以下の通りです。 Swift Package Manager で Swift Build がデフォルトになったため、Linux、macOS、Windows でプロジェクトが同じようにビルドされます。Subprocess が 1.0 に到達し、コマンドラインツールからストリーミングプロセスまで、Swift から他のプログラムを実行および操作するための、安定したクロスプラットフォームな方法が提供されます。相互運用性がさらに進み、Swift の Span が C++20 の std::span と直接ブリッジされ、Swift/Java の相互運用性は async およびコールバックのサポートを拡張しています。WebAssembly の JavaScriptKit を介したブリッジングが最大 40 倍高速になり、Wasm SDK が Swift.org から直接利用可能になったため、ブラウザでの Swift の実行が高速化されています。組み込み Swift は、存在型 (existential types) のサポートと、マイクロコントローラークラスのターゲット向けのより豊富なエラーハンドリングにより、さらに高機能になっています。メモリ安全性を維持しながらパフォーマンスが向上し、コピーオンライトのオーバーヘッドなしで非コピー可能要素を保持する新しい配列型と、コピーなしでイテレーションするための新しい Iterable プロトコルが導入されています。他にも多くの機能があります。新しい変更の詳細なガイドについては、このまま読み進めてください。Swift 6.4 で提案されたすべての提案の完全なリストについては、Swift Evolution ダッシュボードを参照してください。 よりシンプルで明確なコード Swift 6.4 は、日常のプログラミングを合理化し、コードをよりシンプルで明確にします。 より自然な optional some と any 型。optional some または any 型を記述する際に、型を括弧で囲む必要がなくなりました。(some Rocket)? の代わりに、some Rocket? (SE-0521) と単純に記述できます。 コンパイラ警告に対するソースレベル制御。プロジェクト内の警告の動作を制御する必要がある場合、例えば警告を抑制したり、エラーに昇格させたりする場合、新しい @diagnose 属性 (SE-0522) を使用してコード内で直接警告の動作を定義できるようになりました。 複数のライブラリが競合する場合に使用する API を明確にする。複数のモジュールが同じ API 名を定義していて、それを参照したい場合、モジュールセレクタを通じてどのモジュールを意図したかを指定できます。アプリが CommonThing 型の両方を提供する2つのモジュールをインポートしている場合、:: セレクタを使用すると、どちらを意図しているかを明確に指定できます (SE-0491)。 deffer ブロックでの async 関数の呼び出し。defer ブロックに記述した非同期コードは、終了する前に await され、完了まで実行されます (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 は async/await サポートを提供するための API (SF-0023) を追加し、@Observable 型はきめ細かく連続的な変更通知 (SE-0506) を持つようになりました。Subprocess ライブラリ(当初は SF-0007 として導入され、2025 年に初期バージョン 0.1 としてリリースされました)は 1.0 に到達しました。これは、Swift の並行処理を使用してゼロから構築された、サブプロセスを実行および操作するためのクロスプラットフォームパッケージを提供します。以下の例は、Getting Started with 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 を使用するようになり、Software Bill of Materials (SBOM) Generation for Swift Package Manager (SE-0509) を含み、SPDX または CycloneDX フォーマットのいずれかで SBOM ドキュメントを生成するサポートを提供します。SwiftPM のアップデートについては、SwiftPM 6.4 リリースノートで詳しく学び、SBOM の生成方法については、Generating Software Bill of Materials (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 とブリッジするため、Span を std::span を期待する C++ API に渡したり、手動の変換コードを境界で記述することなく、Span として std::span を受け取ったりできます。 Java: Java および Kotlin から Swift を呼び出すことができる Swift/Java 相互運用プロジェクトは、プロトコルおよびコールバックラッパーに対する async および throwing 関数の呼び出しサポートを拡張し、クロージャの自動 Runnable マッピング、可変長引数のインポート、および Java レコード型のサポートを追加しました。 Swift のプラットフォームサポートも深まっています。 WebAssembly JavaScriptKit は、Swift 6.4 で Wasm へのブリッジングにおいて、以前の動的ブリッジングよりも最大 40 倍高速な安全なブリッジングにより、パフォーマンスが向上しました。Wasm SDK は Swift.org の Install Swift ページから利用できるため、ブラウザ用の Swift のコンパイルには、SDK を追加する以上の追加設定は必要ありません。Foundation の Swift 6.4 向けアップデートは、WASI (WebAssembly System Interface) 上での FileManager のサポートを改善しました。 Android Swift on Android は引き続き進歩しています。Android 用 Swift SDK のこのリリースは、新しい LTS NDK 30 でビルドされており、Swift ランタイムライブラリと、デフォルトの NDK を使用する Swift パッケージの両方に Android 利用可能性属性を提供します。Swift Build は SwiftPM でも Android をサポートするようになったため、インストール後のスクリプトは不要になりました。 組み込み