本記事は Bluesky / ATProtocol Advent Calendar 2025 の17日目の記事です。 ちなみに去年のアドカレはこちら。
概要
GitHubリポジトリで誰かがイシューやコメント、PRを作成すると自動的にその旨をBlueskyにポストする仕組みを紹介します。ごめん、他になんもネタ思い付かんかった。
きっかけとして、Klearskyのリポジトリにイシューなどをいただくことが稀にあるんですが、取りこぼすんですよね、私メールとか見ないしプッシュ通知も嫌いなので…その割にBlueskyはいつも、いや時々、あー1日1回くらい?は見ているので、そちらで通知を受け取れれば良いかなと。というわけでGitHub ActionsからBlueskyアカウントにログインし、メンション入りのポストを投稿するようにしました。
このようにな
— mimonelu 🦀 みもねる (@mimonelu.net) 2025年12月16日 0:43
[image or embed]
構成
GitHub ActionsのYAMLファイルと投稿用のスクリプトファイルの2つだけ。Claudeに書いてもらいました(正直)。
.github/workflows/notify-to-bluesky.yml
https://github.com/mimonelu/klearsky/blob/staging/.github/workflows/notify-to-bluesky.yml
ご想像の通り、GitHubのSecretsで BLUESKY_HANDLE と BLUESKY_PASSWORD (アプリパスワード!)を設定する必要があります。ちなみに BLUESKY_HANDLE はハンドルだけではなく、メールアドレスやDIDでもOK。これはどんなBluesky関連サービスでも同様のはず。
他、特にいじる箇所はないかなと。イベントのトリガー( on )くらいでしょうか。
notify-to-bluesky.js
https://github.com/mimonelu/klearsky/blob/staging/notify-to-bluesky.js
変数 message にポスト本文が入りますが、 @mimonelu.net という文字列が入っているため、このままコピペすると私に通知がずんどこ飛んできてしまいます。再利用したい方は必ず変更してください。
なお言うまでもなく、トリガーとなるイベントの対象は該当リポジトリのみ、またデフォルトブランチのファイルが処理される点にご注意を。
ミソ
RichText
RichTextで mimonelu.net 宛のメンションを facets として埋め込んでいます。 facets がないと通知は飛びません。なくてもクライアント上ではハンドルにリンクが張られると思いますが、これはクライアントが気を利かせているだけで、通知そのものはサーバ上で facets を見て送信されます。
逆に言うと facets さえあれば本文中にハンドル文字列があろうとなかろうと通知が飛びます。これは裏技みたいなもので、Klearskyでも「リストメンション」として利用していますが、非推奨です。
実際にリストメンションを使ったポストのレコードはこちら。
サブアカ
本アカではなくサブアカで投稿させています。通知ポストをフォロワーに見せても仕方がないので…。
チャット
通知目的であればポストではなくチャットを送信するべきかもしれません。ただ、Blueskyの仕様では自分自身とチャットすることはできないため、やはりサブアカを使うことにはなるかと。
createdAt
createdAt に過去の日時を指定すればTLやプロフページのポスト一覧には表示されなくなります(過去ポスト)。実物はこちら。
ただし西暦10年以降に限る。昔は西暦1年でも投稿できたんですが、いつからかエラーで投稿できなくなってしまいました。
GitHubでのユーザーアクションを取りこぼさないことが目的であれば、もっと根本的な解決方法があるのでは?
チッ そうですね、ただBlueskyには通知プラットフォームとしてのポテンシャルもうんぬんかんぬん
以上です。