Fedify 1.0.0のリリース

[ActivityPub]フレームワークの[Fedify]がついに最初の正式バージョン1.0.0をリリースしました！

[ActivityPub]: https://www.w3.org/TR/activitypub/
[Fedify]: https://fedify.dev/

## Fedifyとは？

Fedifyは[ActivityPub]プロトコルをベースにした連合型（federated）サーバーアプリケーションを簡単に作成できるようにするTypeScriptライブラリです。ActivityPubはソーシャルネットワーキングサービスが相互に通信できるようにするオープンな標準プロトコルで、これを通じて様々なサービス間でユーザーが互いにコミュニケーションを取れる分散型ソーシャルネットワークである[フェディバース]（fediverse）を構成します。

Fedifyを使用すると、開発者はActivityPubプロトコルの複雑な詳細を直接実装する必要なく、高レベルのAPIを通じて連合型サーバーアプリを簡単に作成できます。FedifyはActivityPubオブジェクトに対する型安全なインターフェース、[WebFinger]、[HTTP Signatures]、[Linked Data Signatures]、[Object Integrity Proofs]など、ActivityPub実装に必要な様々な機能を基本的に提供します。

また、Fedifyは[Mastodon]やMetaの[Threads]のような人気のあるフェディバースのソフトウェアやサービスとの相互運用性のための特別な処理も含んでおり、開発者が既存のフェディバース生態系と簡単に統合できるアプリケーションを作成できるようにします。さらに、様々なWebフレームワークとの統合をサポートし、CLIツールも提供しているため、開発とデバッグのプロセスをより便利にします。

[フェディバース]: https://fediverse.info/
[WebFinger]: https://datatracker.ietf.org/doc/html/rfc7033
[HTTP Signatures]: https://tools.ietf.org/html/draft-cavage-http-signatures-12
[Object Integrity Proofs]: https://w3id.org/fep/8b32
[Linked Data Signatures]: https://web.archive.org/web/20170923124140/https://w3c-dvcg.github.io/ld-signatures/
[Mastodon]: https://joinmastodon.org/ja
[Threads]: https://www.threads.net/

## 主な変更点

### 「ハンドル」用語の使用中止

このバージョンから、Fedify全体で「ハンドル」（handle）という用語はフェディバースハンドル（例：`@hongminhee@fosstodon.org`）を指す場合にのみ使用されるようになりました。アクターの内部固有ID（例：`b379dbdc-3b4f-4ef4-88c2-fc25632d1c22`）は「識別子」（identifier）として、WebFinger名（例：`hongminhee`）は「ユーザー名」（username）として呼ばれます。

APIのハンドルという用語は以前のバージョンとの互換性のために当面は維持されますが、使用中止（deprecation）警告がログに記録され、将来的に廃止される予定です。

詳細については[関連ドキュメント][1]を参照してください。

[1]: https://fedify.dev/manual/actor#actor-identifier-and-webfinder-username

### Linked Data Signatures

[Linked Data Signatures]は古くなった標準ではありますが、MastodonなどフェディバースNの主要な実装がまだ依存している署名方式です。

FedifyはこのバージョンからLinked Data Signaturesをサポートするようになり、[HTTP Signatures]と[Object Integrity Proofs]に加えて、フェディバースで使用されるすべての種類の署名方式をサポートするようになりました。これにより、Fedifyは最高の相互運用性を持つActivityPub実装となりました。

ただし、Linked Data Signaturesを使用するためにFedifyユーザーが特別に行うことはありません。受信するアクティビティがLinked Data Signaturesを持っている場合は自動的に署名を検証し、すべての送信アクティビティにはHTTP Signatures、Linked Data Signatures、およびObject Integrity Proofs、3つの形式の署名が付与されます。

詳細については[関連ドキュメント][2]を参照してください。

[2]: https://fedify.dev/manual/send#linked-data-signatures

### アクティビティの転送

このバージョンから、受信トレイ（inbox）内で受信したアクティビティを[`InboxContext.forwardActivity()`]メソッドを使用してそのまま他のアクターに転送できるようになりました。

一見すると、受信トレイ内で受信したアクティビティを[`Context.sendActivity()`]メソッドを使用して再送信すればよいと思われるかもしれません。しかし、この方法では受信トレイにアクティビティが渡される前に元の署名が削除され、送信時にはこれを転送するアクターの署名が代わりに付与されるため、転送されたアクティビティを受信する側がこれを信頼しなくなります。

一方、`InboxContext.forwardActivity()`メソッドを使用すると、元の署名が保持されたままで転送されるため、このような問題がありません。（もちろん、元のアクティビティ自体がLinked Data SignaturesやObject Integrity Proofsで署名されている必要があります。）

詳細については[関連ドキュメント][3]を参照してください。

[`InboxContext.forwardActivity()`]: https://jsr.io/@fedify/fedify@1.0.0/doc/~/InboxContext.forwardActivity
[`Context.sendActivity()`]: https://jsr.io/@fedify/fedify@1.0.0/doc/~/Context.sendActivity
[3]: https://fedify.dev/manual/inbox#forwarding-activities-to-another-server

### `fedify inbox`終了時に`Delete(Application)`送信

`fedify inbox`は一回限りの一時的なアクターと受信トレイ（inbox）を作成し、アクティビティが正しく配信されているかを確認できるデバッグコマンドです。

このバージョンから`fedify inbox`は終了時に、遭遇したすべてのピア（peer）サーバーに`Delete(Application)`アクティビティを送信するようになりました。これは一般的にアカウントを削除する際に送信されるアクティビティであり、一時的なアクターに関連する残存データが他のサーバーに残らないようにするのに役立ちます。

### PostgreSQLドライバー

[`KvStore`]および[`MessageQueue`]インターフェースのPostgreSQLドライバーを実装する[@fedify/postgres]パッケージが同時にリリースされました。

PostgreSQLドライバーはプロダクションで十分に使用できるバックエンドで、特にすでにPostgreSQLを使用しているプロジェクトにおすすめです。

また、`fedify init`コマンドでもPostgreSQLドライバーを選択できるオプションが追加されました。

[@fedify/postgres]: https://github.com/dahlia/fedify-postgres
[`KvStore`]: https://jsr.io/@fedify/fedify@1.0.0/doc/~/KvStore
[`MessageQueue`]: https://jsr.io/@fedify/fedify@1.0.0/doc/~/MessageQueue

## Fedify 1.0.0を祝して

バージョン1.0.0がリリースされたことで、Fedifyは今後APIの下位互換性を最大限維持していく予定です。（もちろん、長期的には下位互換性を破壊する2.0.0が出る可能性もあります。）これまで正式バージョンが出ていなかったためFedifyの使用を躊躇していた方々にとっては良いニュースになるでしょう！

Fedify 1.0.0は[JSR]および[npm]で今すぐ入手できます：

```bash
deno add jsr:@fedify/fedify
npm  add     @fedify/fedify
```

それでは、今後さらに多くのサービスがActivityPubをサポートすることを願って、この記事を締めくくります！

[JSR]: https://jsr.io/@fedify/fedify@1.0.0
[npm]: https://www.npmjs.com/package/@fedify/fedify/v/1.0.0