この記事の要点
- Swift のツールチェイン(toolchain)を簡単にインストール・管理・更新できるバージョンマネージャ swiftly の、初の安定版 1.0 が発表されました。これまでは Linux 向けのコミュニティ主導ツールでしたが、今回から Swift の中核ツールチェインの一部として公式にサポートされ、Swift の GitHub organization(
swiftlang)でホストされます。 - 新たに macOS にも対応しました。Xcode に同梱される Swift とは別に、スタンドアロンのツールチェインを手軽にインストールできます。Linux では、信頼できるビルドと OS ごとの依存関係を手作業で導入する従来の手間が解消されます。
- 最新版のインストールに加え、複数のツールチェインを並行してインストールして切り替える、nightly の「スナップショット」や過去のバージョンを試す、プロジェクトごとにチーム全員で同じバージョンを共有する、といった操作が簡単に行えます。今後 swiftly は Xcode 以外で Swift を入れる際の標準的な方法になります。
何が発表されたのか
swiftly は、Swift のツールチェインをインストール・管理・更新する作業を楽にするためのバージョンマネージャです。
Apple プラットフォーム向けのアプリ開発では、最新の Swift は Xcode に同梱されています。しかし Linux のような別のプラットフォームに Swift を入れたい場合や、サービスやコマンドラインツールのビルドに別バージョンのツールチェインを使いたい場合には、信頼できる Swift のビルドを OS に応じた依存関係とともにダウンロード・展開・インストールする、手作業でミスの起きやすい手順が必要でした。
swiftly はもともと Linux で Swift を使う開発者向けのコミュニティ主導ツールとして数年前から存在していました。今回のリリースをもって、これを Swift の中核ツールチェインの一部として公式にサポートし、Swift の GitHub organization でホストするようになりました。あわせて macOS サポートも追加され、Xcode とは別に Swift を導入しやすくなっています。
swiftly 自身も Swift で書かれており、最新版へ自分自身を更新できます。
何に使えるのか
swiftly を使うと、新しいシステムへの Swift のインストール、最新の安定版への更新、nightly スナップショットや過去バージョンでの実験・テストといった操作が行えます。複数のツールチェインを切り替えるのも簡単で、プロジェクトのリポジトリにファイルを置いておけば、開発チームの全員が同じツールチェインのバージョンを使うようにできます。
導入は swift.org/install から行います。インストール後、ツールチェインを快適に動かすために必要なシステムパッケージやシェルコマンドがあれば、swiftly が案内してくれます。
最新の Swift ツールチェインがデフォルトとしてインストールされるため、すぐに新しいプロジェクトを始められます。
$ swift package init
swiftly use コマンドは、swift test や swift build といった swift コマンドで使うデフォルトのツールチェインを選びます。
$ swiftly use 6.0.3
$ swift --version
--
Apple Swift version 6.0.3 (swiftlang-6.0.3.1.2 clang-1600.0.28.6)
Target: arm64-apple-macosx15.0
新しい Swift がリリースされたら、latest を指定して既存のツールチェインと並べてインストールできます。
$ swiftly install latest
nightly の「スナップショット」ツールチェインを含むプレリリース版も利用できます。一覧は次のように確認できます。
$ swiftly list-available main-snapshot
--
Available main development snapshot toolchains
----------------------------------------------
main-snapshot-2025-03-25
...
使いたいスナップショットが分かったら、その名前を指定してインストールします。
$ swiftly install main-snapshot-2025-03-25
--
Installing main-snapshot-2025-03-25
特定のバージョンを一時的に使いたいときは、+ セレクタが便利です。この書き方なら、わざわざ別のツールチェインに切り替えてから実行する必要がありません。
$ swiftly run lldb +main-snapshot-2025-03-25
--
(lldb) _
SwiftPM プロジェクトをチームで開発していて、全員に共通の Swift ツールチェインのバージョンを使わせたい場合は、プロジェクトフォルダのルートに使いたいバージョン(例: 「6.0.3」)を書いた .swift-version ファイルを置くだけで済みます。
swiftly 自体に新機能やバグ修正が入ったら、swiftly self-update を実行して新しいリリースを確認・インストールできます。
swiftly の仕組み
swiftly を Swift で書いていることで、言語の機能やエコシステムを活用できています。ファイルシステムの操作には Foundation を、ネットワーク処理には Async HTTP Client を使い、最新の Swift リリースを取得する際は Swift OpenAPI プラグインで swift.org と通信するコードを生成しています。さらに、Swift と C の相互運用性を活かして既存の libarchive ライブラリを利用し、Swift の Web サイトからダウンロードしたツールチェインの展開を行っています。
複数プラットフォームで動き、システム依存も少ないシェルプログラムを作るのは難しいため、swiftly はシェルスクリプトによるインストールをやめ、自分自身をインストールするバイナリアプリケーションへと切り替えました。これにより、優れた引数解析や見やすい --help 画面、標準ライブラリのすべてを利用できます。
残る課題は、OS とプロセッサアーキテクチャに合ったバイナリをシンプルに配布することでした。swift.org の Web サイトは OS の判別を助けてくれますが、Linux のディストリビューションまでは確実に判別できません。そこで、幅広いディストリビューションで動くバイナリを作れる Swift Static Linux SDK を活用しています。プロセッサアーキテクチャは多くの Unix 系で uname -m から判別できます。この結果、Web サイトからコマンドをコピー&ペーストするだけで Swift を始められるようになっています。
導入・今後の位置づけ
今後、swiftly は Xcode 以外で Swift をインストールする際の標準的な方法になっていきます。初期バージョンは macOS と、Ubuntu・Debian・Fedora・Red Hat Enterprise Linux・Amazon Linux といったさまざまな Linux ディストリビューションをサポートします。
swiftly のドキュメントでは、CI/CD 環境での利用や、エンタープライズ環境向けのプロキシサーバー設定・カスタムインストール先の指定についても説明されています。swiftly はオープンソースプロジェクトであり、GitHub リポジトリで issue の起票やプルリクエストでの貢献ができるほか、Swift フォーラムで質問や議論もできます。