🖌

GitHub ActionsからBluesky Socialへ簡単にポストする

2023/05/20に公開

概要

Yo. みんなブルスコしてるかい?

どうも、真也です。皆さんは既に巷で噂の分散型SNS 「Bluesky Social」 を試しましたか?

https://zenn.dev/kato_shinya/articles/lets-try-bluesky-social

今日はそのBlueskyについて、GitHub Actionsから簡単にポストする方法を紹介します。

使用するアクション

GitHub Actions から Bluesky へポストするためには、私が開発している以下のアクションを使用します。

  • myConsciousness/bluesky-post

https://github.com/marketplace/actions/send-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 に続く identifierpassword の指定で、これはポストの送信時にあなたのアカウントで認証する必要があるため指定が必須の項目になります。

identifier にはあなたのアカウントのハンドル名または登録メールアドレスを指定し、password には登録時のパスワードまたはBlueskyの公式アプリなどで発行できる アプリパスワード と呼ばれるトークンを指定してください。

また、認証情報はワークフローにハードコーディングするのではなく、上記の例のように GutHub の Secrets に保存して使用してください。例えば、次のような感じです。

secrets

最後に Bluesky にポストしたいテキストを text に指定してください。ここまで設定できたら実行してみましょう。上記の例だとアクションの実行トリガーとして workflow_dispatch を指定しているので、次のようにワークフローを作成したリポジトリの Actions 画面から手動でワークフローを実行可能です。

workflow_dispatch

任意のサーバーにポストする

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 を使用した例はあまりないと思うので、もし興味のある方は以下にソースを公開しているので見てみてください。

https://github.com/myConsciousness/atproto.dart/tree/main/packages/bluesky_post

また、このアクションでは私が開発している Dart/Flutter パッケージの blueskybluesky_text を内部的に使用しています。

https://pub.dev/packages/bluesky

https://pub.dev/packages/bluesky_text

簡単にこれらのパッケージについて説明すると、bluesky は Bluesky API をラッピングしたパッケージで、現時点でほぼ全てのエンドポイントをサポートしており、私が認識しているだけでも既に以下のサードパーティアプリケーションで使われています。(Special Thanks!

非常に簡単かつ安全に Bluesky API を使えるように設計していますので、Dart や Flutter で Bluesky 関連のアプリケーションを開発する際には是非試してみてください!

続いて bluesky_text は、Bluesky API を使用してポストする際に正しく設定するのが難しい facets パラメータを与えられた文字列から自動で生成することができます。bluesky パッケージの処理と簡単に統合することができるので、是非併せて使ってみてください。

最後に

ここまで簡単に説明してきましたが、もしわからない点などがあれば以下の開発リポジトリで IssueDiscussion を作成してください。私が開発しているAT Protocol や Bluesky 関連のパッケージは全てこのモノレポで管理しているので、その他のパッケージの質問などもここで受け付けています。基本的に英語を使用していますが、日本語でも可です!

https://github.com/myConsciousness/atproto.dart

また、Bluesky で直接質問していただいても構いません。以下が私の Bluesky アカウントのハンドル名です。

Discord にも Dart/Flutter に特化した Bluesky チャンネルがあるので、こちらに参加していただいても大丈夫です。以下の招待コードを使用してください。

GitHubで編集を提案

Discussion