この記事の要点
- Swift プロジェクトが Windows 向けの ダウンロード可能な Swift ツールチェイン を公開しました。これにより、Windows 上で Swift コードをビルド・実行できるようになります。
- 移植されたのはコンパイラだけではありません。標準ライブラリと、コアライブラリ(dispatch、Foundation、XCTest)まで含めた エコシステム全体 が Windows 上で利用できるようになっています。これと Swift の C 相互運用により、Windows のプラットフォームでアプリケーションを純粋に Swift だけで開発できます。
- 早期採用者向けの最初のマイルストーンであり、言語として「使える」段階に達したという位置づけです。LLDB や Swift Package Manager の Windows サポートは、まだ作業が続いている段階でした。
何が発表されたのか
Swift を Windows に対応させるための取り組みが、コミュニティとの協力のもとで 1 年以上続けられてきました。その成果として、Windows 上で Swift コードをビルド・実行するために必要な開発コンポーネントを含む、ダウンロード可能な Swift ツールチェインのイメージが公開されました。
Swift の Windows への移植は、コンパイラを移植するだけにとどまりません。Windows 上でエコシステム全体が使えるようにすることを目指しています。具体的には、次の要素が含まれます。
- コンパイラ
- 標準ライブラリ
- コアライブラリ(dispatch、Foundation、XCTest)
これらのコアライブラリは、開発者が下層のシステムの細部を意識せずに強力なアプリケーションを書けるようにするためのものです。これらと Swift の柔軟な C 相互運用が揃うことで、Windows プラットフォーム上の既存のライブラリ資産を活かしながら、純粋に Swift だけで Windows アプリケーションを開発できます。
何に使えるのか
記事では、すべてを Swift で書いた電卓アプリのデモが紹介されています。アプリケーションのコードとシステムライブラリの間をシームレスに行き来しながら、Windows ネイティブの GUI アプリケーションを Swift だけで構築できることを示すものです。このデモは次の構成でビルドされていました。
- Windows 上の Swift ツールチェイン
- Visual Studio 2019 のインストール(CMake、Ninja、Windows SDK を提供)
発表時点ではデモは CMake でビルドされていましたが、Windows での Swift Package Manager 対応が進んでおり、まもなく CMake や Ninja なしで swift build だけでアプリをビルドできるようになる見込みとされていました。デバッグについても、lldb でアプリケーションをステップ実行できる様子が示されています。
クロスプラットフォームでの活用
早期採用者の一例として、Readdle がクロスプラットフォームアプリケーションを Swift で開発する取り組みを進めていました。同社はメールアプリ Spark の中核ロジックを、UI フレームワークから独立した「Core」モジュール群(純粋な Swift モジュール)として実装しており、プラットフォームごとに UI(macOS では AppKit、iOS では UIKit、Android ではネイティブ UI Toolkit)を差し替える設計をとっていました。この Core を Windows に移植することで、Swift の対応プラットフォームをもう 1 つ増やせたとされています。
記事で紹介された同社の知見には、次のようなものがあります。
- CryptoSwift や OAuthSwift のような純粋な Swift モジュールは、import の調整や一部の AppKit/UIKit 参照の除外といった軽微な作業だけで、ほぼそのまま動作した。
- むしろ一部のサードパーティ製 C/C++ 依存のほうが手間がかかった。
- Windows 版の UI には Electron を採用し、Spark Core を Node.js のロード可能なアドオンとして使う構成を選んだ。
- Node.js アドオンを純粋な Swift で書くのも、N-API ヘッダを Swift が問題なく import できたため意外なほど容易で、アドオンのエントリポイント定義に必要だったのはわずか数行の C コードと小さな C ヘッダだけだった。
同社のコメントでは、既存のアプリケーションのコードベースを macOS/iOS 以外に広げたいなら今すぐ(あるいは間もなく)Swift で実現できる、小さな Swift ライブラリを保守しているなら Windows 対応は今でも容易に追加できる、と述べられています。
導入・今後の位置づけ
Getting Started のセクションが Windows での Swift 利用に関する情報で更新されました。早期採用者が問題を見つけた場合は、当時の Swift Bug Tracker への報告が呼びかけられています。
Windows サポートの追加は旅の始まりであり、現状は言語として使える最初のマイルストーンを満たした段階だと位置づけられています。LLDB や Swift Package Manager のように、Windows でのサポートをさらに充実させる必要のある領域が残っていました。記事では、ライブラリの新規公開や既存ライブラリの移植、デバッガや SwiftPM のコアツール改善など、Windows 上の Swift を前進させるための数多くの貢献の機会が紹介されています。Swift フォーラムには Windows 開発を議論する新しいセクションも設けられました。