この記事の要点
- パッケージ検索・発見サービスの Swift Package Index が、新たに Apple のスポンサーシップ を獲得しました。本記事はその告知とあわせて、作者の Dave Verwer と Sven A. Schmidt による Developer Spotlight(興味深い Swift 開発者を紹介するシリーズ)として、サービスを今の形に育ててきた歩みがまとめられています。
- Swift Package Index は、依存させるパッケージについてより良い判断を下せるよう支援することを目標に、2020年から メタデータ検索 → 互換性テスト → ドキュメントのホスティング と機能を広げてきました。
- このサービス自体が Vapor で書かれた オープンソースの Swift パッケージ であり、多数のコミュニティ製パッケージに依存しながら運用されています。
- 各パッケージページでは、開発期間・ライセンス・issue や pull request への対応状況、対応プラットフォームと Swift バージョンの互換性、ドキュメントの有無などを確認できます。
Swift Package Index とは
Swift Package Index は、自分のプロジェクトに含める依存パッケージについて、利用者がより良い判断を下せるようにすることを一貫した目標としています。2020年のローンチ時にはまず、パッケージのメタデータと検索に取り組みました。
サービスは 既知のパッケージのリスト を定期的に巡回し、各リポジトリをクローンして、パッケージマニフェストと git の履歴を解析し、メタデータを検索可能にします。単なるメタデータ検索にとどまらず、パッケージページは依存先について十分な情報に基づいた判断ができるよう設計されています。たとえば次のような問いに答えられます。
- そのパッケージはどれくらいの期間開発されているのか
- 作者はどのライセンスでコードを公開しているのか
- pull request や issue が監視され、対応されているのか
一見すると GitHub のリポジトリページに似ていますが、Swift Package Index ではパッケージの利用候補者にとって関連性の高い情報に焦点を絞っている点が異なります。
サービスを育ててきた歩み
サービスの成長に伴い、作者たちは段階的に機能を追加してきました。
- パッケージの互換性テスト。 Swift パッケージはさまざまなプラットフォームのアプリで利用できますが、各プラットフォームでの互換性を簡単に確認する手段はありませんでした。そこで Swift Package Index は、デフォルトブランチが更新されたりリリースがタグ付けされたりするたびに、4つの Swift バージョン × 5つのプラットフォームのすべての組み合わせで各パッケージのビルドを試みます。この「ビルドシステム」は1日あたり平均5,000件のビルドを処理し、累計で500万件以上のビルドを完了しており、専用の監視アプリを必要とするほど大規模な仕組みになっています。これらの結果から、各パッケージページ に表示される簡潔な互換性マトリクスが構築されます。
- ドキュメントのホスティング。 ドキュメントを持つパッケージを単に検出・強調するだけでなく、Swift Package Index は バージョン管理されたドキュメントを無料でビルド・ホスティングするプラットフォーム をコミュニティに提供することにしました。パッケージ作者は opt-in でドキュメント生成を有効にでき、ビルドが成功すると、バージョンごとの DocC ドキュメントがホスティングされます(swift-markdown のドキュメント例)。この機能はすぐに普及し、記事執筆時点で300以上のパッケージが opt-in しています。
Swift Package Index は、ただ Swift パッケージをインデックスするだけでなく、それ自体が オープンソースの Swift パッケージ です。Vapor アプリとして動作し、データベースアクセスのための fluent、HTML レンダリングのための Plot や Ink、テストのための swift-snapshot-testing など、多くのコミュニティ製パッケージに依存しています。
このようなサイトの運用には継続的な保守が欠かせず、ローンチからの3年間で1,200件以上の pull request をマージし、600回以上(およそ週4回)のリリースをデプロイしてきました。外部コントリビュータのコミュニティも育っており、コミュニティ向けにポッドキャスト Swift Package Indexing も配信しています。
利用者への示唆
Swift Package Index は、Swift エコシステムにおけるパッケージの 発見と評価 を支える基盤として定着しました。Apple のスポンサーシップ獲得は、このサービスが今後も長期的に提供され続ける見通しを後押しするものです。
依存パッケージを選ぶ際には、GitHub のスター数だけでなく、Swift Package Index が提供する 対応プラットフォーム・Swift バージョンの互換性マトリクス、メンテナンス状況、ライセンス、ドキュメントの有無 といった情報を確認することで、より確かな判断ができます。自分のパッケージを公開している場合は、互換性テストや無料のドキュメントホスティングを活用できます。