🦕

Fedify CLIの隠れた便利機能:見逃しているかもしれないテクニック集

2024/11/23に公開

Fedifyは主にActivityPubサーバーを構築するためのフレームワークとして知られていますが、同時にfedifyというコマンドラインツールも提供しており、ActivityPubの実装をデバッグしテストするのに役立ちます。Fedifyフレームワークを使用しているかどうかに関わらず、このCLIツールはActivityPub開発において非常に重宝するツールです。

インストール方法

機能を見ていく前に、まずはfedifyコマンドをインストールする必要があります。以下のような複数のインストール方法があります:

npm(Node.js)を使う場合:

npm install -g @fedify/cli

Bunを使う場合:

bun install -g @fedify/cli

Denoを使う場合:

deno install -A --unstable-fs --unstable-kv --unstable-temporal -n fedify jsr:@fedify/cli

また、リリースページからビルド済みの実行ファイルをダウンロードすることもできます。

詳しいインストール手順と要件については公式ドキュメントをご確認ください。

スマートなオブジェクト照会

fedify lookupコマンドは見た目以上に賢く、同じ識別子の様々な形式を扱えるほか、用途に応じて複数の出力形式を提供します:

# 同じアクターを照会する3つの同等な方法:
fedify lookup @user@example.com
fedify lookup user@example.com
fedify lookup acct:user@example.com

# 生のJSONレスポンスを表示:
fedify lookup --raw @user@example.com

# コンパクトなJSON-LD形式で表示:
fedify lookup --compact @user@example.com

# 完全に展開されたJSON-LDを表示:
fedify lookup --expanded @user@example.com

一部のActivityPubサーバーではauthorized fetch(「セキュアモード」とも呼ばれる)が必要で、パブリックなコンテンツに対してもすべてのHTTP GETリクエストに署名が求められます。-a/--authorized-fetchオプションはこの場合に役立ちます:

fedify lookup --authorized-fetch @user@secure-instance.example

このコマンドは一時的なActivityPubサーバーを起動し、そのサーバーの鍵でリクエストに署名します。これは以下のような場合に特に便利です:

  • すべてのリクエストに署名を要求するサーバー(セキュアモードのMastodonインスタンスなど)にアクセスする場合
  • フォロワー限定の投稿など非公開コンテンツを取得する場合(適切な権限がある場合)
  • 署名付きリクエストに対するサーバーの動作をテストする場合

インタラクティブなインボックステスト

fedify inboxコマンドは連合をテストする手軽な手段を提供するだけでなく、受信したActivityPubアクティビティを調査するための強力なWeb UIも備えています。アクティビティを受信すると、以下のような詳細情報が表示されます:

  • HTTPメソッドとヘッダー
  • リクエストボディ(複数の形式で)
  • レスポンスの詳細
  • サーバーログ

詳細なリクエスト情報を表示するfedify inboxのWebインターフェース

他のサーバーが送信したHTTPヘッダーを生で確認できるため、署名検証の問題やコンテントネゴシエーションの問題をデバッグする際に非常に役立ちます。インターフェースには以下のような異なる形式でアクティビティを表示するタブが用意されています:

  • 生のHTTPリクエスト/レスポンス
  • コンパクトなアクティビティ(正規化されたJSON-LD)
  • 展開されたアクティビティ(完全に展開されたJSON-LD)
  • 生のアクティビティ(受信したままの形式)
  • サーバーログ

このコマンドは高度に設定可能で、どのフォローリクエストを受け入れるかを制御できます:

# 特定のアクターからのフォローのみを受け入れる
fedify inbox -a @specific@user.com -a @another@user.com

# すべてのフォローリクエストを受け入れる
fedify inbox -a "*"

見やすいNodeInfo表示

fedify nodeコマンドは、他のインスタンスの設定を理解するために、NodeInfoデータをユーザーフレンドリーな形式で可視化します:

# サーバーアイコン付きで標準的なNodeInfoデータを表示
fedify node mastodon.social

# インスタンスが公開している追加のメタデータを含める
fedify node -m mastodon.social

# 規格に準拠していないNodeInfoレスポンスの解析を試みる
fedify node --best-effort problematic-instance.social

# 高速化のためにfaviconの取得をスキップ
fedify node --no-favicon mastodon.social

柔軟なローカル開発

ActivityPubの実装をローカルでテストする際、fedify tunnelコマンドを使ってローカルサーバーを一時的にインターネットに公開できます。デフォルトのサービスがうまく動作しない場合は、複数のトンネリングサービスから選択できます:

# デフォルトのサービスを使用
fedify tunnel 3000

# 代替サービスを使用
fedify tunnel --service serveo.net 3000

シェル統合

シェル補完を有効にすることで入力の手間を省けます。bash、fish、zshで利用可能です:

# bashの場合
source <(fedify completions bash)

# fishの場合
source (fedify completions fish | psub)

# zshの場合
source <(fedify completions zsh)

Fedify 1.3.0の新機能:カスタムUser-Agentのサポート

近日リリース予定のFedify 1.3.0では、サーバーログでリクエストを追跡しやすくするためのカスタムUser-Agentヘッダーを設定する機能が追加されます:

# lookupコマンドでカスタムUser-Agentを設定
fedify lookup --user-agent "MyApp/1.0" @user@example.com

# NodeInfoリクエストでカスタムUser-Agentを設定
fedify node --user-agent "MyApp/1.0" mastodon.social

これらの機能は、Fedify CLIを使い始めた時には気づきにくいかもしれませんが、連合に関する問題のデバッグやActivityPubの実装のテストを行う際に非常に役立ちます。

Discussion