GitHub ActionsからBluesky Socialへ簡単にポストする
概要
Yo. みんなブルスコしてるかい?
どうも、真也です。皆さんは既に巷で噂の分散型SNS 「Bluesky Social」 を試しましたか?
今日はそのBlueskyについて、GitHub Actionsから簡単にポストする方法を紹介します。
使用するアクション
GitHub Actions から Bluesky へポストするためには、私が開発している以下のアクションを使用します。
- myConsciousness/bluesky-post
使い方
任意のテキストをポストする
単純に任意のテキストを GitHub Actions からポストしたい場合は、以下のようにワークフローを作成してください。このアクションはデフォルトでは公式サーバーの bsky.social
に向けてポストします。
name: Send Bluesky Post
on:
workflow_dispatch:
jobs:
post:
runs-on: ubuntu-latest
steps:
- uses: myConsciousness/bluesky-post@v3
with:
text: "Hello, Bluesky!"
identifier: ${{ secrets.BLUESKY_IDENTIFIER }}
password: ${{ secrets.BLUESKY_PASSWORD }}
使用するアクションは先に触れたように「myConsciousness/bluesky-post」で、今回の例だと最新ビルドであるv3を使用します。
次に重要なのが with
に続く identifier
と password
の指定で、これはポストの送信時にあなたのアカウントで認証する必要があるため指定が必須の項目になります。
identifier
にはあなたのアカウントのハンドル名または登録メールアドレスを指定し、password
には登録時のパスワードまたはBlueskyの公式アプリなどで発行できる アプリパスワード
と呼ばれるトークンを指定してください。
また、認証情報はワークフローにハードコーディングするのではなく、上記の例のように GutHub の Secrets に保存して使用してください。例えば、次のような感じです。
最後に Bluesky にポストしたいテキストを text
に指定してください。ここまで設定できたら実行してみましょう。上記の例だとアクションの実行トリガーとして workflow_dispatch
を指定しているので、次のようにワークフローを作成したリポジトリの Actions
画面から手動でワークフローを実行可能です。
任意のサーバーにポストする
Bluesky Social は分散型SNSであるので、公式の bsky.social
とは異なるサーバーにアカウントを作ることも可能です。そうした場合にこのアクションを使う際にはワークフローに任意のサーバーを指定する必要がありますが、やり方はとても簡単で次の例のように service
パラメータを追加するだけです。
name: Send Bluesky Post
on:
workflow_dispatch:
jobs:
post:
runs-on: ubuntu-latest
steps:
- uses: myConsciousness/bluesky-post@v3
with:
text: "Hello, Bluesky!"
identifier: ${{ secrets.BLUESKY_IDENTIFIER }}
password: ${{ secrets.BLUESKY_PASSWORD }}
service: "boobee.blue"
この例を使用して先ほどのようにワークフローを手動で実行すると、 boobee.blue
で運営されている Bluesky に任意のテキストがポストされることを確認できます。
画像を添付してポストする
任意の画像を添付してポストを送信することも可能です。
画像のアップロードと聞くと難しそうだと感じるかもしれませんが、アップロードや添付に関する難しい処理は全てアクション内で処理されるため、やるべきことは次の例のように添付したい画像ファイルのパスを media
パラメータに指定するだけです。
name: Send Bluesky Post
on:
workflow_dispatch:
jobs:
post:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- uses: myConsciousness/bluesky-post@v3
with:
text: "Hello, Bluesky!"
media: cool_photo.png
identifier: ${{ secrets.BLUESKY_IDENTIFIER }}
password: ${{ secrets.BLUESKY_PASSWORD }}
ただ、添付する画像ファイルはワークフローを作成したリポジトリのどこかに保存されている必要がある点に注意してください。例えば、上記の例だと media
に指定した cool_photo.png
は以下のようにリポジトリのルートに配置されていることを想定しています。
.
├── LICENSE
└── cool_photo.png
また、こうした処理の性質からワークフローを作成したリポジトリのリソースが必要になるため、先の例のように必ず myConsciousness/bluesky-post@v3
を実行する前に actions/checkout@v3
を実行するようにしてください。
この状態で先ほどと同じようにワークフローの手動実行を行うと、任意の画像が添付された状態でテキストをポストできることが確認できます。
余談
このアクションは Dart を使用して作りました。GitHub Actions のアクションを作る際に Dart を使用した例はあまりないと思うので、もし興味のある方は以下にソースを公開しているので見てみてください。
また、このアクションでは私が開発している Dart/Flutter パッケージの bluesky と bluesky_text を内部的に使用しています。
簡単にこれらのパッケージについて説明すると、bluesky は Bluesky API をラッピングしたパッケージで、現時点でほぼ全てのエンドポイントをサポートしており、私が認識しているだけでも既に以下のサードパーティアプリケーションで使われています。(Special Thanks!)
非常に簡単かつ安全に Bluesky API を使えるように設計していますので、Dart や Flutter で Bluesky 関連のアプリケーションを開発する際には是非試してみてください!
続いて bluesky_text は、Bluesky API を使用してポストする際に正しく設定するのが難しい facets
パラメータを与えられた文字列から自動で生成することができます。bluesky パッケージの処理と簡単に統合することができるので、是非併せて使ってみてください。
最後に
ここまで簡単に説明してきましたが、もしわからない点などがあれば以下の開発リポジトリで Issue や Discussion を作成してください。私が開発しているAT Protocol や Bluesky 関連のパッケージは全てこのモノレポで管理しているので、その他のパッケージの質問などもここで受け付けています。基本的に英語を使用していますが、日本語でも可です!
また、Bluesky で直接質問していただいても構いません。以下が私の Bluesky アカウントのハンドル名です。
Discord にも Dart/Flutter に特化した Bluesky チャンネルがあるので、こちらに参加していただいても大丈夫です。以下の招待コードを使用してください。
Discussion