StarryskyはBlueskyのカスタムフィードサーバー向けのアプリケーション群です。下記のような特徴があります。
Starrysky Query Engine
Blueskyからデータを引っ張ってきて、検索を行う検索エンジンそのものです。
- サーバーはみなさんで準備いただきます。ただし、render.comで動かせばサーバーレスです。大規模でなければたぶん無料枠で堪え切れると思います。Renderは英語なので、そこだけは英語を頑張ってください。
- Renderの無料枠ではパーシスタンスディスクが使えませんが、後述のAdmin Consoleと組み合わせることで検索条件は別サーバーに保存することができます。このバックアップは私のCloudflareのD1に保存されますので、私やそれ以外の第三者が検索条件を見ることが出来ます。
- Firehoseを使用していないので、WebSocket通信出来ないサーバーで動作します
- 7日間の制限はありませんが、メモリ次第です。
- Contrailsよりは設定簡単だと思います。
Starrysky Console
Query Engineの検索条件は、Admin Console経由で設定することができます。Query Engineを用意しなくても、デモモードを使って、Blueskyにログインすればどのように使うかのイメージは湧きやすいかと思います。
- 検索条件を日本語で設定することができます
- 正規表現が使えます
- リプライは非表示にできます
- 画像のみの投稿に絞り込むことができます
- 言語の絞り込みができます
- 画像のALT設定文字に対する検索ができます
- 初期起動時に、100件の履歴を取り込みます。設定で広げることは可能です
- 入力した検索条件がどのような結果になるかをAdmin Consoleでプレビューできます
制限について
下記の大きな制限があります
- 現在はアルファ版です。データぶっとんでも、挙動おかしくても泣かないでください
- SkyFeedと同様、リアルタイムに反映されません。何分おきに反映するかは変更できます
- 破壊的な改修を行う可能性があります
また、render.comの無料枠を使用する場合は下記の制限があります
- 設定しないとインスタンスが落ちるので、必ず後述の設定をしてください。落ちた場合の保存データは失われます
作るにあたり、SuibariさんのFeed Profile Searchを参考にさせていただきました。せっかくSkyFeedとの差別化を図っていただいたところをSkyFeed寄りに戻す謎の退化をさせてしまいました。この場を借りてお礼申し上げます。
設定手順
※GitHubのForkは不要になりました
Render.comにアカウント作ります
右上のNew→Web Serviceをクリックします
そのままNextします
下の方に「Public Git repository」があるので、ここにStarrysky Query EngineのURLを入力します
https://github.com/usounds/StarryskyQueryEngine
下記のように設定します
Name | なんでも(そのままでもOK) |
Region | Oregon(US West) ※シンガポール遅いです |
Branch | main(デフォルトのまま) |
Root Directory | 未設定(デフォルトのまま) |
Runtime | Node(デフォルトのまま) |
Build Command | yarn install |
Start Command | yarn start |
Instance Type | Free |
Environment Variables | いっぱいあるので表分けます |
Environment Variablesはサーバーを動作させるのに必要な設定を行います。後述のテンプレ使うと楽です。何を設定すべきかはここを読んでください
Key | Value |
FEEDGEN_CRON_INTERVAL | 最新の投稿を取り込む間隔を1分単位で入力します。短くしたいでしょうが3分ぐらいから始めましょう 3 |
FEEDGEN_PUBLISHER_IDENTIFIE | あなたのBlueskyのHandleを指定します。 カスタムハンドル、PDSセルフホステッドは適時いい感じに読み替えてください xxxxx.bsky.social |
FEEDGEN_APP_PASSWORD | あなたのBlueskyのApp Passwordを指定します。 xxx-xxx-xxx-xxx |
FEEDGEN_HOSTNAME | 初期構築時点では、ドメインがわからないので下記の値にしてください example.com |
FEEDGEN_LISTENHOST | 下記を固定値で設定します。 0.0.0.0 |
FEEDGEN_PORT | 下記を固定値で設定します。 10000 |
EDIT_WEB_PASSKEY | Admin Consoleを使用するためのパスワードを作っていただきます。このパスワードは他人に知られないようにしてください。また、Blueskyのアプリパスワードとは別になります。 aaaaaaaa(必ずaaaaaaa以外の文字列を設定してください) |
これらの設定はこれをコピペすると楽ができます。「Add from .env」をクリックします。
下記を貼り付けます。貼り付け後、変更が必要な値を修正してください。
FEEDGEN_APP_PASSWORD='xxxx-xxxx-xxxx'
FEEDGEN_CRON_INTERVAL='3'
FEEDGEN_HOSTNAME='example.com'
FEEDGEN_LISTENHOST='0.0.0.0'
FEEDGEN_PORT='10000'
FEEDGEN_PUBLISHER_IDENTIFIER='xxxx.bsky.social'
EDIT_WEB_PASSKEY='必ず何かの値を設定してください'
一番下のCreate Web Serviceをクリックします。
押すとビルドが始まるのでそのまま5分ぐらい待ちます
まだ待ちます。下記のように「Your service is live 🎉」まで見れればOKです。5分経っても終わらない場合は、F5でリロードしてください。
引き続き設定します。
画面の左上のほうにURLが表示されているので、右のアイコンクリックしてクリップボードにコピーします。
左のEnvironment→FEEDGEN_HOSTNAMEの値を、コピーしたホスト名のhttps://を除いた値で上書きします。私の場合は「ss-usounds.onrender.com」となります。上書きが終わったら下のほうの「Save Changed」を押すと再度Buildが走るので5分ぐらい待ちます。Deployの画面に自動で移動しなかった場合は、左のEventsから最新のDeployを確認してください。
最後に、Setting→Auto-DeployのEditボタンを押して、Noに変更し、Save Changedをクリックします。この設定を行わないと、私が何らかソースコードを修正すると自動的にQuery Engineが自動でデプロイされます。
※2024/4/19からUptimeRobotは不要になるような仕組みに変更しました
この後は
Admin Consoleにログインします。
Query Engine URLには、ご自身が立ち上げたQuery EngineのURLを、Web Pass keywordはEnviromentsのEDIT_WEB_PASSKEYに設定した値と同じものを入力し、読み込みをクリックします。
また、プレビューやカスタムフィードを公開する際にはBlueskyへのログインが必要になるので、Blueskyのハンドルとアプリパスワードを入力してBlueskyにログインをクリックします。
あとは画面の説明通りに入力すれば、カスタムフィードとして登録できます。
FAQ
初期起動時に100件の投稿を読み込まない
画像のみの投稿や、検索キーワードに「英語」を含むが言語フィルターに「ja」を指定している場合などは初期起動時の読み込み件数満たない場合であっても、処理を中断します。現時点でこの挙動を変更する予定はありません。
自分の投稿から絞り込みたい
Bluesky QueryはBlueskyの検索と全く同じですので「from:me」が使えます。同様に、別の人も指定できます。
設定変更しても、すでに取り込んだ投稿を消えないようにしてほしい
Render使っている場合は、有料版使えばたぶん行けると思います。有料版に切り替え、環境変数「FEEDGEN_SQLITE_LOCATION」を追加して「./db.sqlite」を指定してサービスを再起動すれば保存されるはずです。
セルフホストしている場合は、FEEDGEN_SQLITE_LOCATIONを指定して同様にQuery Engineを再起動してください。
Query EngineをRender以外でセルフホストした。Admin ConsoleってLocalhost指定できないよね?
Query EngineはBlueskyから直接アクセスされます。この場合、Blueskyのカスタムフィードサーバーの要件である「SSL通信可能な外部からアクセス可能なサーバー」を満たす必要があります。よって、Query EngineはSSL通信でインターネットから通信できる場所に設置するようにしてください。
BlueskyからSSL通信できれば良いので、通常は外部から何らかのリバプロかトンネルでアクセスすることになると思います。その場合、リバプロまでSSL通信出来れば大丈夫です。
なんか不安定なんだけど?
Renderのインスタンスを再起動してください。Dashboardの右のManual Deployのプルダウンの一番下にRestart Serviceがあります。
件数が多くなりすぎたのでデータを消したい
現在、データを消す手段がないので、サービスを再起動してください。FEEDGEN_SQLITE_LOCATIONを使用している場合は、その指定されたファイルを削除してください。
Query EngineをRender以外にセルフホストする際の手順書が欲しい
git cloneして、環境変数のあの6つを.envなりシェルに登録して、yarn startしてください