初心者向けオリジナルフィードの作り方

@tomo-x.bsky.social

初心者向けオリジナルフィードの作り方

この記事はBluesky Advent Calendar 2024Bluesco Advent Calendar 2024の17日目の記事です。課題は最終日にやる根性が災いして遅刻しましたすいません。

前提条件

  • ここでのオリジナルフィードは、フィードジェネレーターサービスを使わないフィードのことを指します
  • JavaScript(TypeScript)をある程度理解している人向けです。
  • 常時実行できる環境が必要です。おすすめはRaspberryPiです。ポート開放は不要なので安心安全です。
  • 基本的に無料でできる方法を紹介しますが、作るものとアクセス数によっては無料枠を超過するかもしれません。また100%の安全も保証できません。あくまでも自己責任でお願いします。

サンプル

ここにあります。MITライセンスです。

概要

リレーというBluesky上の全データが流れている場所から投稿を集めてDBに保存するlocalとクライアントからのリクエストを受けてDBからデータを取ってきて返すwebに分かれています。前者は自宅で常駐、後者はrenderにデプロイ、という流れになります。こうすることにより金をかけずに安全にフィードを作ることができます。

手順

事前準備

  1. サンプルをクローン(あるいはフォーク)する。RaspberryPiなどの常駐環境にも同じものをクローンしておく。
  2. TiDBのアカウントをここから作る。
  3. クラスターを作成し、右上のconnect→設定は変えないでgenerate password→Connection Stringのタブにある"mysql://~"のようなURLをコピー(これがTiDBの接続URLです)

web

  1. renderのアカウントを作る。
  2. Githubと接続し、クローンあるいはフォークのリポジトリを選択。
  3. rood directoryはweb、build commandはnpm ci && npm run build、start commandはnode dist/index.js、instance typeはfreeに設定する。
  4. environment variablesのAdd from .envで、web/.env.exampleの内容を貼り付け、コメントに従って編集する。
  5. deploy web serviceを押して完成!

local側(カレントディレクトリは常駐環境側のlocal/)

  1. 常駐環境で、.env.exampleをコピーして、名前を.envに変える。
  2. .envに書いてある説明に従って、各項目を埋めていく。
  3. コマンドラインでnpm iを実行する。
  4. npm run startを実行する。
  5. 完成!

フィードの公開(カレントディレクトリは常駐環境側のlocal/)

  1. .envが正しく設定されていることを確認する。
  2. npm iを実行する。
  3. npm run publishFeedを実行し、画面の指示に従い進める。(デフォルトの場合short name or the recordはwhats-alfにする)
  4. 完成!

カスタマイズ

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にインデックスを貼ると速くなります。データが増えてきたりアクセス数が増えてきたら貼るといいと思います。
僕が作った大喜利フィードもそのうちインデックス貼るので、できたら追記します。

tomo-x.bsky.social
tomo-x

@tomo-x.bsky.social

高二
プログラミング/プロセカ/雀魂/スプラ/AC音ゲー/AC6
自称素人コラ師
atcoder茶レ(最高パフォーマンス緑)
チュウニズムプラレ

作ったもの
#Githubsky ( https://githubsky.vercel.app )
splatoonステージbot( @splatoon-stage-bot.bsky.social ) 他

アイコン: @yutan-po.bsky.social

Post reaction in Bluesky

*To be shown as a reaction, include article link in the post or add link card

Reactions from everyone (0)