初心者向けオリジナルフィードの作り方
この記事はBluesky Advent Calendar 2024とBluesco Advent Calendar 2024の17日目の記事です。課題は最終日にやる根性が災いして遅刻しましたすいません。
前提条件
- ここでのオリジナルフィードは、フィードジェネレーターサービスを使わないフィードのことを指します
- JavaScript(TypeScript)をある程度理解している人向けです。
- 常時実行できる環境が必要です。おすすめはRaspberryPiです。ポート開放は不要なので安心安全です。
- 基本的に無料でできる方法を紹介しますが、作るものとアクセス数によっては無料枠を超過するかもしれません。また100%の安全も保証できません。あくまでも自己責任でお願いします。
サンプル
ここにあります。MITライセンスです。
概要
リレーというBluesky上の全データが流れている場所から投稿を集めてDBに保存するlocal
とクライアントからのリクエストを受けてDBからデータを取ってきて返すweb
に分かれています。前者は自宅で常駐、後者はrenderにデプロイ、という流れになります。こうすることにより金をかけずに安全にフィードを作ることができます。
手順
事前準備
- サンプルをクローン(あるいはフォーク)する。RaspberryPiなどの常駐環境にも同じものをクローンしておく。
- TiDBのアカウントをここから作る。
- クラスターを作成し、右上のconnect→設定は変えないでgenerate password→Connection Stringのタブにある"mysql://~"のようなURLをコピー(これがTiDBの接続URLです)
web
側
- renderのアカウントを作る。
- Githubと接続し、クローンあるいはフォークのリポジトリを選択。
- rood directoryは
web
、build commandはnpm ci && npm run build
、start commandはnode dist/index.js
、instance typeはfree
に設定する。 - environment variablesの
Add from .env
で、web/.env.example
の内容を貼り付け、コメントに従って編集する。 - deploy web serviceを押して完成!
local
側(カレントディレクトリは常駐環境側のlocal/
)
- 常駐環境で、
.env.example
をコピーして、名前を.env
に変える。 - .envに書いてある説明に従って、各項目を埋めていく。
- コマンドラインで
npm i
を実行する。 npm run start
を実行する。- 完成!
フィードの公開(カレントディレクトリは常駐環境側のlocal/
)
.env
が正しく設定されていることを確認する。npm i
を実行する。npm run publishFeed
を実行し、画面の指示に従い進める。(デフォルトの場合short name or the recordはwhats-alf
にする)- 完成!
カスタマイズ
short nameを変更する
web/src/algos/whats-alf.ts
のshortnameの値を変える- local側で一度
npm run unpublishFeed
してから↑で入れた新しいshortnameでnpm run publishFeed
する
フィードに乗る条件を変更する
local/src/subscription.ts
内にあるfilter
関数を変更する
最初はalf
を他の文字に変えるところから初めて、慣れてきたらpostの他のデータを使ったりするといいと思います。
注:このフィルター関数を変更しても過去のデータには影響を及ぼしません。過去のデータを消したいときはTiDBのSQL Editorでデータを消すのが楽だと思います。もう眠いので細かいことは書きませんがChatGPTに聞いたら全部教えてくれます。
上級者向け:複数のフィードを使えるようにする
具体的なコードは書きません。こんな感じでやるよ、というのだけ
- DBのテーブルを増やして、フィルター関数を増やし、別テーブルにも挿入できるようにする
- web側でwhats-alf.tsをコピーして書き換え、algos/index.tsに書き足す
上級者向け:DBにインデックスを貼る
これは僕も理解してないのであれですが、DBにインデックスを貼ると速くなります。データが増えてきたりアクセス数が増えてきたら貼るといいと思います。
僕が作った大喜利フィードもそのうちインデックス貼るので、できたら追記します。