Site icon image usounds

usoundsの日常や技術的なメモを残すブログです

Contrails Fork版初期設定マニュアル

Contrails Fork版では初期設定手順が増えました。このページでは初期設定の手順を一から載せます。

前提条件

GitHubとCloudflareにアカウントを作成してください。英語ですが頑張ってください。

Cloudflareはログイン後、右上の言語で「日本語」を選ぶと日本語化できます。

Image in a image block

Cloudflare APIの作成

下記にアクセスします。

https://dash.cloudflare.com/profile/api-tokens

「トークンを作成する」をクリックします

Image in a image block

APIトークンテンプレートの中から「Cloudflare Workersを編集する」の右の「テンプレートを使用する」をクリックします

Image in a image block

アクセス許可の一番下の「+さらに追加する」をクリックします

Image in a image block

追加された行を「アカウント」「D1」「編集」とします

Image in a image block

アカウントリソースを「包含」「ご自身のAccount Id ‘s Account」にします。Account’s Idはおそらくはご自身のメールアドレスになっていると思います。

Image in a image block

ゾーンリソースを「包含」「アカウントにあるすべてのゾーン」「ご自身のAccount Id ‘s Account」にします。

Image in a image block

下の方の「概要に進む」をクリックします

Image in a image block

「トークンを作成する」をクリックします

Image in a image block

表示されるトークンを、ご自身でメモ帳などにコピーします。後で使います。忘れるとやり直しです。また、誰かにバレたら必ず削除してください。

Image in a image block

CloudflareのAccount Idを確認します。下記にアクセスします

https://dash.cloudflare.com/

Workers & Pagesの概要をクリックし、右端に表示されるアカウントIDの右のボタンを押してコピーします。のちに使いますのでメモ帳にコピーします。

Image in a image block

GitHubにアクセスして、右上の「Use this template」の「Create a new repository」をクリックします

https://github.com/usounds/Contrails

Image in a image block

Repository Nameにお好きな名前を入力し、「Create Repository」をクリックします

Image in a image block

Settingタブをクリックします

Image in a image block

Secret and variablesのActionsをクリックし、右側のSecretの「New repository secret」をクリックします

Image in a image block

3つのSecretを登録します。

Image in a image block
Name Secret
BLUESKY_APP_PASSWORD ご自身のBlueskyのApp Password
CLOUDFLARE_API_TOKEN この手順で作ったCloudflareのAPIトークン
CLOUDFLARE_D1_ID DUMMY

3つの登録完了を確認してください。3つ登録されていたら、タブの「Variables」をクリックします

Image in a image block

3つのVariablesを登録します。「New repository variables」をクリックします。

Image in a image block
Name Secret
BLUESKY_HANDLE ご自身のBlueskyのHandle. dummy.bsky.socialや独自ドメインの方はドメインそのもの
CLOUDFLARE_ACCOUNT_ID CloudflareのアカウントID(メールアドレスではなく画面からコピーしてメモ帳にあるランダム文字列)
CLOUDFLARE_WORKER_NAME 半角英数の小文字を指定します。内部的に使用するだけで外には出ません

3つ登録されたことを確認します。

Image in a image block

Actionsタブをクリックし、1. Check Requirementsをクリックし、右のRun WorkflowsのRun workflowをクリックします

Image in a image block

Check Requirementをクリックして結果を見ます

Image in a image block

成功した場合は下記のようになります。赤いバツがついた場合は、未設定または設定値が間違っているので、設定内容を確認してください。

Image in a image block

次にActionの「4. Create D1 Schema」を実行します

Image in a image block

「Create D1 Schema」をクリックします

Image in a image block

Create schema and tablesをクリックします

Image in a image block

Create D1 Schemaをクリックし、さらにRunning Wrangler Commandsの左の▶️をクリックして開いて、database_idの値をメモ帳にコピーします。ダブルクオート(””)はコピー不要です。

Image in a image block

コピーした値をGitHubに設定します。再度SettingsのSecret and variablesのActionsをクリックし、CLOUDFLARE_D1_IDの右の鉛筆アイコンをクリックします。

Image in a image block

コピーした値をValueに貼り付け、「Update secret」をクリックします。ダブルクオートは不要ですよ(自分でハマったのでしつこくリマインド)

Image in a image block

再度Actionsに戻り、「2. Deploy to Cloudflare」のWorkflowを実行します

Image in a image block

処理を待つと、必ずエラーになります。Deploy to Cloudflareをクリックします。

Image in a image block

下記のように、Annotationsの2番目がFailed to upload secretsになっていることを確認します。

Image in a image block

右上のRe-run jobsのRe-run failed jobsをクリックします

Image in a image block

Re-run jobsをクリックします

Image in a image block

しばらく待つと成功します。

Image in a image block

引き続き、Actionsに戻り、「3. Publish Feed Generators」のWorkflowを実行します

Image in a image block

しばらく待つと成功します。

Image in a image block

Blueskyのご自身のページのフィードに、Emotional Support Petsが増えています。これをクリックしてフィードが動作することを確認します。

Image in a image block

これであなたのフィードに不要なものが増えてしまったので、削除します。

Actionsの「Delete Feed Generator」のWorkflowを実行します。今までと異なり、recordNameの入力を求められるので、「emotional-suppo」を入力し「Run Workflow」をクリックします。

Image in a image block

しばらく待つと成功します。成功しない場合は、後続のトラブルシュートを参照してください。

Image in a image block

再度Blueskyのフィードをリロードすると消えているはずです。

Image in a image block

準備の手順は以上です。

ご自身向けのフィード作成手順

ルートにあるCONFIG.mdを修正します。例えば「F1jp」という文字列で検索する場合は下記のようにします。

  • recordName:任意の半角英数字を15文字以内で入力します。フィードのURLになります
  • displayName:フィードの名前になります。24文字です。
  • description:フィードの説明文です。改行可能です。
  • searchTerms:検索する文字列を入力します。今回は「F1jp」を検索するのでそれをそのまま入力します。
  • 除外ワードは-を指定します。
FF14 -ネタバレ
  • OR条件は|で繋げます
(Contrails|SkyFeed)
  • denyList:検索対象外にするユーザーを、アットマークを含むハンドル(@xxx.bsky.social)かDID(did:plc:1234)のいずれかで指定します
    ※2024/3/14 除外ワードではなく除外したいユーザーの指定だったので修正しました
  • safeMode:Cloudflareに課金したくない場合はtrueのままにします
  • avatar:フィードの説明のアイコンになります。説明にある通り、「JPGかPNG」以外では失敗します。あらかじめCONFIG.mdと同じルートディレクトリにJPGかPNGの画像をアップロードし、そのファイル名に変更します。
# recordName

> This is the feed's ID which can be letters, numbers, or dashes. Spaces are not allowed. Maximum length is 15 characters.

aaajpwvum4ejo

# displayName

> This is the title of the custom feed. Maximum length is 24 characters.

#F1JP

# description

> This is the description of the feed.

F1jpが含まれる投稿を拾います。

# searchTerms

> There are three types of search terms:
>
> - Keywords: Test these in [https://bsky.app/search](https://bsky.app/search). `AND` is implicit, so `cat dog` on one line will require both `cat` and `dog`. You can use quotes as well `"hot dog"`.
> - Users: links such as `https://bsky.app/profile/why.bsky.team` will pull in the user's posts. To include replies and reposts, you can add the following flags: `https://bsky.app/profile/why.bsky.team +replies +reposts`.
> - Pinned posts: links such as `https://bsky.app/profile/saddymayo.bsky.social/post/3jxju2wwap22e` will pin at the top of the feed. One link per line, please.

- f1jp

# denyList

> Deny list will exclude any results from a given user. You can provide the username or DID.
>
> - did:plc:1234
> - @spamspamspam.bsky.social

# safeMode

> Safe mode limits the total number of API calls coming from Cloudflare.
>
> Set to `false` if you have higher limits via a paid Cloudflare plan.

true

# avatar

> This must link to an image (PNG or JPEG) in the same directory as this CONFIG.md. It doesn't have to be called `avatar.png`, but just be sure this CONFIG.md points to the correct file.

![](formula-1-logo.png)

変更が終わったら、「2. Deploy to Cloudflare」を実行します。正常に終了したら、「3. Publish Feed Generators」を実行します。

今後、recordName、description、avatarを変更した場合は「2. Deploy to Cloudflare」と「3. Publish Feed Generators」を実行します。それ以外の、searchTerms、denyList、safeModeのみを変更した場合は、「2. Deploy to Cloudflare」のみを実行します。

2個目のフィードを作る

2個目以降は再度レポジトリは作らなくて良いです。configsフォルダにCONFIG.mdをコピーして2個目を作ります。configsフォルダに新たに作る場合は、ファイル名は「CONFIG.md」以外でも認識しますが、拡張子は必ず.mdとします。

2個目のフィードが不要になったら

不要になった場合は、下記のブロックを追加します。

# isEnabled

> Whether this feed should be published by the "Publish Feed Generators" step. Set to `true` or `false`.

false

追加した上でActionsの「Delete Feed Generator」を実行してください。あくまでもisEnabledは「今後使用しませんよ」という宣言のみであり、Blueskyのプロフィールのフィードから削除されません。Blueskyのプロフィールから削除する場合は、「Delete Feed Generator」Actionを実行してください。

トラブルシュート

Delete Feed Generatorでエラーになる

Fork版のv2024.02.21でこの問題の恒久対応を仕込みました。レポジトリ作り直すか、下記のソースをご自身のソースに反映してください。

https://github.com/usounds/Contrails/blob/main/feed-generator/deleteFeedGenerator.ts

Check Requirementsでエラーになる

一個だけエラーになる場合は、GitHubの設定上は問題ないことが多く、APIトークンの設定ミスの可能性が高いです。

Image in a image block

中身は開くもののの大体エラー内容よーわからんですが、「The CLOUDFLARE_API_TOKEN secret needs to be set.」ではない場合はAPIトークン作り直してください。

Image in a image block