BotKitを使ってActivityPubボットを作ってみよう
はじめに
BotKitは、ActivityPubボットを作成するためのTypeScriptフレームワークです。このチュートリアルでは、BotKitを使用して最初のボットを作成する方法を学びます。
事前準備:Denoのインストール
BotKitはDenoで書かれたTypeScriptフレームワークです。使用するにはDeno 2.0以降がインストールされている必要があります。Denoのインストール方法は複数ありますが、最も簡単な方法は以下のコマンドを使用することです:
Linux/macOSの場合:
curl -fsSL https://deno.land/install.sh | sh
Windowsの場合:
irm https://deno.land/install.ps1 | iex
BotKitのインストール
Denoがインストールされたら、ボット用の新しいプロジェクトを作成し、BotKitを依存関係としてインストールします:
mkdir my-bot/
cd my-bot/
deno add jsr:@fedify/botkit@^0.1.0-dev
BotKitはDenoの実験的なTemporal APIを使用するため、deno.jsonの設定でこれを有効にする必要があります:
{
"imports": {
"@fedify/botkit": "jsr:@fedify/botkit@0.1.0-dev.34+3c01b9f1"
},
"unstable": ["temporal"] // これを追加
}
ボットの作成
新しいTypeScriptファイルを作成し、createBot()
関数を使用してボットインスタンスを定義します:
import {
createBot,
InProcessMessageQueue,
MemoryKvStore,
text,
} from "@fedify/botkit";
const bot = createBot<void>({
username: "mybot",
name: "My Bot",
summary: text`A bot powered by BotKit.`,
kv: new MemoryKvStore(),
queue: new InProcessMessageQueue(),
});
このコードでは:
-
username
はボットのフェディバースハンドル(例:@mybot@your-domain
)の最初の部分となります -
name
は表示名です -
summary
はボットのプロフィールの説明文です(Text
オブジェクトを使用) -
kv
はデータを保存するためのキーバリューストアです -
queue
はバックグラウンドタスクを処理するためのメッセージキューです
イベントの処理
BotKitはonFollow
やonMention
などの様々なイベントをサポートしています。これらのイベントはBot
インスタンスにイベントハンドラを設定することで処理できます。
例えば、誰かがボットをフォローした時にダイレクトメッセージを送信するには:
bot.onFollow = async (session, follower) => {
await session.publish(text`Thanks for following me, ${follower}!`, {
visibility: "direct",
});
};
ボットの実行
ボットを実行するには、HTTPサーバーに接続する必要があります。deno serve
コマンドを使用します。まず、bot.tsファイルでbot
インスタンスをデフォルトエクスポートとして設定します:
export default bot;
そして、以下のコマンドでボットを実行します:
deno serve -A ./bot.ts
実行すると以下のメッセージが表示され:
deno serve: Listening on http://0.0.0.0:8000/
ボットはhttp://localhost:8000/で利用可能になります。
インターネットへの公開
ローカルマシンだけでは他のFediverseサーバーと通信できないため、インターネットに公開する必要があります。開発時はfedify tunnel
やngrok、Tailscale Funnelなどのトンネリングサービスを使用できます。
これらのサービスはL7リバースプロキシとして動作するため、behindProxy
オプションを有効にする必要があります:
const bot = createBot<void>({
username: "mybot",
name: "My Bot",
summary: text`A bot powered by BotKit.`,
kv: new MemoryKvStore(),
queue: new InProcessMessageQueue(),
behindProxy: true, // これを追加
});
fedify tunnel
を使用してボットを公開するには:[1]
fedify tunnel 8000
実行すると、一時的な公開ホスト名が表示されます:
✔ Your local server at 8000 is now publicly accessible:
https://c4d3933be87bc2.lhr.life/
Press ^C to close the tunnel.
ボットのテスト
ボットをテストするには、開発用のMastodonインスタンスであるActivityPub.Academyを使用できます。以下の手順でテストしてみましょう:
-
ActivityPub.Academyの検索バーで
@mybot@c4d3933be87bc2.lhr.life
を検索します(ホスト名は自分の環境のものに置き換えてください): -
ボットのプロフィールページで「フォロー」ボタンをクリックします:
-
数秒後、ボットからダイレクトメッセージが届きます:
これでボットの基本的な機能が正常に動作していることが確認できました!
次のステップ
基本的なボットの作成ができたら、以下のような機能を追加して、より高度なボットを作ってみましょう:
- 自動返信の拡張:メンションされた時に、メッセージの内容に応じて異なる返答をする
-
定期投稿:
setInterval()
を使って、定期的に投稿を行う - メディア投稿:画像を添付した投稿を行う
- インタラクティブな対話:会話の文脈を理解し、適切な返答を行う
- 外部APIとの連携:天気予報やニュースなど、外部サービスと連携した情報を投稿する
BotKitの詳細な機能については公式ドキュメントを参照してください。ActivityPubプロトコルの特徴を活かした、ユニークなボットの開発を楽しんでください!
-
まず、
fedify
コマンドをインストールする必要があります。 ↩︎
Discussion