この記事の要点
- Swift 5.5 の Swift Package Manager(SwiftPM)に、package collection(パッケージコレクション)のサポートが追加されました。信頼できるキュレーターが厳選した、ひと口サイズのパッケージリストです。
- 狙いは、優れたパッケージを見つけやすくすること、そして特定の作業にどのパッケージが最適かを判断しやすくすることです。Web 検索の長い結果一覧を眺める代わりに、信頼するキュレーターが選んだ小さなリストから選べます。
- 利用は
swift package-collection add <URL>コマンド(または Xcode 13)で行えます。コレクションは単純な JSON ドキュメントで、専用ツールで生成・署名でき、誰でも自作・共有できます。
何が発表されたのか
package collection は、信頼できるキュレーターがまとめた厳選パッケージのリストです。パッケージエコシステムの 2 つの課題、「優れたパッケージを見つけること」と「特定の作業にどのパッケージが最適かを判断すること」を改善することを目指しています。
package collection はキュレーションという考え方を前面に押し出します。たとえば、Swift 開発者のコミュニティが日々の作業で実際に使っている良質なパッケージをまとめて公開したり、教育者が講義資料に合わせたパッケージ群を集めたり、企業が社内チーム向けに精査済みの信頼できるパッケージへ選択肢を絞り込んだりといった用途が想定されています。
何に使えるのか
コレクションを使う
package collection の利用はとても簡単です。SwiftPM のコマンドラインから、新しい package-collection add でコレクションを追加できます。
$ swift package-collection add https://swiftserver.group/collection/sswg.json
Added "Swift Server Workgroup Collection" to your package collections.
Xcode 13 でも、新しいパッケージコレクション設定画面から package collection を利用できます。
発表時点で、すでに次のようなコレクションが公開されていました。
- Swift Server Workgroup: Swift Server Workgroup(Swift プロジェクトの一部)がインキュベートしてきたパッケージをまとめたコレクション。
- SwiftPackageIndex.com: Swift Package Index のチームが、動的に生成される package collection を初めて実装しました。パッケージ所有者ごとに、その所有者が作成した全パッケージを含むコレクションをダウンロードできます。
- Apple’s OSS Swift packages: Apple が公開したコレクションで、Swift Argument Parser、Swift Algorithms、SwiftNIO などが含まれます。Xcode 13 はこの Apple コレクションを最初から使えるよう設定済みです。
自分でコレクションを作る
package collection は単純な JSON ドキュメントなので、公開も共有も容易です。Web やファイルサーバーに置いてリンクを共有したり、JSON ファイルを直接渡したりできます。
コレクション生成には package collection generator ツールの利用が推奨されています。パッケージ URL のリストを渡すと、各パッケージのマニフェストを解析し、可能なら SCM システムからもメタデータを取得して、より充実したメタデータ一式を生成します。
たとえば次の packages.json を用意します。
{
"name": "My Collection",
"packages": [
{
"url": "https://github.com/user/package.git"
}
]
}
次のコマンドを実行すると、
$ package-collection-generate packages.json collection.json
formatVersion やバージョンごとのマニフェスト情報(製品・ターゲットなど)を含む、より完全なコレクション JSON が生成されます。
コレクションに署名する
コレクションは、真正性を示し完全性を保護するために署名できます。署名は任意で、署名なしのコレクションも利用できますが、その場合は利用前に確認のプロンプトが表示されます。
署名には package collection signer ツールの利用が推奨されています。code-signing 証明書とその秘密鍵を使い、署名を埋め込んだコレクションファイルを生成します。
$ package-collection-sign \
collection.json \
collection-signed.json \
/certs/private.pem \
/certs/signing.cer
コレクションができたら、配布方法は自由です。学生や少人数の共同作業者にはメール添付で十分なこともあれば、Web サーバーにホストしてリンクを共有したり、開発チームなら SCM システムに push してそこから参照したりもできます。
広く Swift コミュニティと共有したい有用なコレクションを作った場合は、Swift フォーラムの community showcase で知らせるのがよい方法です。