自作パッケージをSwift Package Indexに追加する方法

「Swift Packagesによるライブラリの作成方法」は4部構成です。
記事を順番に読み進めると、Swift Packagesでライブラリを自作して公開できるようになります。

- 第1部: [Swift Packagesでライブラリを自作する](https://qiita.com/uhooi/items/2f36b85f5f41cbd35189)
- 第2部: 自作パッケージをSwift Package Indexに追加する　__←イマココ__
- 第3部: [自作パッケージをCocoaPodsに追加する](https://qiita.com/uhooi/items/5ce382cb0c1c6bc018d9)
- 第4部: [自作パッケージをCarthageに対応する](https://qiita.com/uhooi/items/ada0a02737ecb2d1c8d7)

---

「Swift PackagesによるCLIツールの作成方法」は5部構成です。
記事を順番に読み進めると、Swift PackagesでCLIツールを自作して公開できるようになります。

第1部: [Swift PackagesでCLIツールを自作する](https://qiita.com/uhooi/items/4a4d9694e8a362b6885f)
第2部: 自作パッケージをSwift Package Indexに追加する　__←イマココ__
第3部: [自作パッケージをMintに対応する](https://qiita.com/uhooi/items/fab2fa2f3dc540ad2315)
第4部: 自作パッケージをHomebrewに追加する（未投稿）
第5部: 自作パッケージをCocoaPodsに追加する（未投稿）

## はじめに

自作パッケージをSwift Package Indexに追加する方法を紹介します。

## 「Swift Package Index」とは？

公式サイトのFAQを直訳すると「Swift Package Managerをサポートする、パッケージの検索エンジン」です。

パッケージを検索して、そのパッケージに関する様々な情報を得ることができるサイトです。

https://swiftpackageindex.com/

## 環境

- OS： macOS Sonoma 14.2.1
- Xcode：15.3 (15E204a)
- Swift：5.10
- swift-tools：5.10

## Swift Package Indexへの追加方法

~~Swift Package IndexへはPRを作成して手動で追加を依頼する必要があるので、その手順を紹介します。~~

（2024/04/20, 追記）
PRでなくIssueを作成する方法に変わっていたので、記事を全体的に修正しました。

### パッケージを自作する

Swift Package Indexへは他人が作成したパッケージを追加することもできるようですが、やはり自作パッケージがなければ始まりません。

以下の記事を参考にパッケージを自作します。

https://qiita.com/uhooi/items/2f36b85f5f41cbd35189

https://qiita.com/uhooi/items/4a4d9694e8a362b6885f

### Issueを作成する

パッケージを自作したら、以下のページから「Add Package(s)」を選択してIssueを作成します。

https://github.com/SwiftPackageIndex/PackageList/issues/new/choose

![スクリーンショット_2024-04-20_20_15_48.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/138245/05c0e85f-40a5-d3e4-b206-5515b622e294.png)

IssueのタイトルとリポジトリのURLを入力し、「Submit new issue」を押下します。

- Add a title
  - Issueのタイトルを書く。 `Add {パッケージ名}` とする
- New Packages
  - リポジトリのURLを書く

![スクリーンショット_2024-04-16_1_53_19.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/138245/30c258da-6230-dfe0-cfb6-793d8b190f04.png)

Issueが作成されます。

https://github.com/SwiftPackageIndex/PackageList/issues/6849

![スクリーンショット 2024-04-16 1.53.58.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/138245/4de4147c-639c-a5af-206d-4fbca829285a.png)

### PRをApproveする

入力した情報を元にbotがPRを作成するので、リンクを押下して開きます。

![スクリーンショット_2024-04-16_1_54_42.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/138245/8fff4ff3-3e83-1857-1ded-42aaa0613d31.png)

![スクリーンショット 2024-04-16 1.55.03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/138245/d2237734-1736-9f41-1128-eeebe2e500c3.png)

https://github.com/SwiftPackageIndex/PackageList/pull/6850

内容を確認し、問題なければ「Approve」を選択して「Submit review」を押下します。

![スクリーンショット_2024-04-16_1_57_00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/138245/5effcd97-9452-5d95-30f6-ea2947941cb3.png)

問題なければメンバーの方がマージしてくださります。

![スクリーンショット 2024-04-16 1.58.59.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/138245/257bc42a-4ee3-7836-9c36-6f0618b9df3f.png)

私の場合は数分でマージされました。

## Swift Package Indexでできること

PRがマージされたらSwift Package Indexに自作パッケージのページができます :tada:

https://swiftpackageindex.com/uhooi/swift-string-transform

Swift Package Indexでできることを抜粋して紹介します。

### 様々な環境でビルドしてバッジ化される

様々なプラットフォーム、Swiftのバージョン、ソース（最新タグとデフォルトブランチ）の組み合わせでビルドし、成否とログを確認できます。
![スクリーンショット 2021-06-21 23.15.49.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/138245/71df1134-00c7-4309-b41e-b52f0171d145.png)

https://swiftpackageindex.com/uhooi/swift-string-transform/builds

CIが成功してからパッケージをリリースすることが多いとは思いますが、すべての組み合わせを網羅することはなかなかないので、非常にありがたいです。

ビルドに成功した環境がバッジ化されるので、READMEに付けるとどの環境で使えるかがすぐにわかります。

[![](https://img.shields.io/endpoint?url=https%3A%2F%2Fswiftpackageindex.com%2Fapi%2Fpackages%2Fuhooi%2Fswift-string-transform%2Fbadge%3Ftype%3Dswift-versions)](https://swiftpackageindex.com/uhooi/swift-string-transform)
[![](https://img.shields.io/endpoint?url=https%3A%2F%2Fswiftpackageindex.com%2Fapi%2Fpackages%2Fuhooi%2Fswift-string-transform%2Fbadge%3Ftype%3Dplatforms)](https://swiftpackageindex.com/uhooi/swift-string-transform)

https://swiftpackageindex.com/uhooi/swift-string-transform/information-for-package-maintainers

ちなみに新しいバージョンをリリースしたら自動で再ビルドしてくれます。
手動でリリースを伝える必要はありません。

### 同じ作者で他のパッケージを見れる

Xcode 13で追加された「Package Collections」という仕組みがあり、複数のパッケージをJSONファイルにまとめることでパッケージを探しやすくなります。

Swift Package Indexでは同じ作者のパッケージをまとめたコレクションのJSONファイルを自動で作成してくれます。

https://swiftpackageindex.com/uhooi/collection.json

https://swiftpackageindex.com/uhooi

### その場でパッケージを試せる

「Try in a Playground」をクリックすることで、パッケージがセットアップされた状態でPlaygroundが起動し、すぐにパッケージを試すことができます。

```
spi-playgrounds://open?dependencies=uhooi/swift-string-transform
```

事前にSwift Package Index Playgrounds appをインストールする必要があります。

https://swiftpackageindex.com/try-in-a-playground

## おわりに

自作パッケージをSwift Package Indexに追加することができました！
自分のパッケージが素晴らしいサイトに載るのはとても嬉しいです :relaxed:

Swift Package Indexは非常に便利なサイトなので、パッケージを自作していない人もぜひ活用してみてください！

## 参考リンク

- [FAQ – Swift Package Index](https://swiftpackageindex.com/faq#what-is-the-spi)
- [Add a Package – Swift Package Index](https://swiftpackageindex.com/add-a-package)
- https://twitter.com/the_uhooi/status/1404723147509690379?s=20
- https://twitter.com/the_uhooi/status/1404784236050096129?s=20