Mastodon と Bluesky でボット運用はじめました【2023-12-04 更新】
自作ツール goark/toolbox
5月頃に思いついてコマンドラインで Mastodon や Bluesky に投稿できる goark/toolbox というツールを作った。 ついでに Web 上の情報を収集する機能も付けてボットを構成できるようにした。
実際の運用は自宅 PC で cron を回している(自宅 PC は24時間稼働中)。 Go ならシングルバイナリで取り回しできるし,この程度ならクラウドとか Docker とか要らんですよ。
Bluesky で非公式 APOD 配信ボットを作った
Mastodon には APOD (Astronomy Picture of the Day) の非公式配信ボットがいくつかあるのだが(#apod
で検索するとアホほど出てくる),できたばかりの Bluesky で運用している人はいない様子。
なら作っちゃえ! というわけで作った。
データを収集するために NASA API をハンドリングする機能を goark/toolbox に組み込んだ。
API でクレジットが示されているものは明示しているが, NASA 関連の画像・動画については示されない?
あと API がしょっちゅう 504 で落ちるのね。 Web ページは全然構造化されてなくてスクレイピングする気も起こらない。 というわけで,生暖かく見守っていただければ(笑)
自ブログおよび自作パッケージの更新情報も配信
Bluesky や Mastodon に記事を投稿する仕組みが整ったので,フィードを読み込む機能も組み込んで自ブログや Flickr にアップした写真の更新情報を以下の Mastodon/Bluesky のメインアカウントに配信できるようにした。
ちなみに Go でフィードを取得するには mmcdole/gofeed パッケージを使うのが便利。
これでフィードを自動配信する仕組みも用意できたので,自ブログ以外に github.com/goark で公開している自作パッケージの更新情報も自動投稿することにした。
GitHub のリリース情報のフィードは以下の URL で取得できる。
https://github.com/username/repositoryname/releases.atom
自作パッケージの更新情報は以下のアカウントで自動投稿している。
goark.fedicity.net については「個人用 Mastodon サーバを立てた」を参考にどうぞ。
@goark.bsky.social は goark/toolbox の動作テスト用に取ったアカウントだけど,遊ばせておくのもナニなので半ボットとして運用することにした。 まぁ,今後もテスト用にゴミ投稿することもあると思うけど,そこはご容赦を(笑)
その他のフィードも配信するぞ
調子に乗って自作以外でお世話になっている Go パッケージ(プロダクト)や Go 関連記事も以下のアカウントに自動投稿することにした。
@osanpo.bsky.social は Bluesky のボット運用のために取ったアカウント。
監視対象は以下のサイト(今後追加予定):
- The Go Blog - The Go Programming Language
- golang/tools: [mirror] Go Tools
- go-task/task: A task runner / simpler Make alternative written in Go
- goreleaser/goreleaser: Deliver Go binaries as fast and easily as possible
- sashabaranov/go-openai: OpenAI ChatGPT, GPT-3, GPT-4, DALL·E, Whisper API wrapper for Go
- anchore/syft: CLI tool and library for generating a Software Bill of Materials from container images and filesystems
- golangci/golangci-lint: Fast linters Runner for Go
- tinygo-org/tinygo: Go compiler for small places. Microcontrollers, WebAssembly (WASM/WASI), and command-line tools. Based on LLVM.
- pelletier/go-toml: Go library for the TOML file format
- nyaosorg/go-readline-ny: Readline library for golang , used in nyagos
- hymkor/go-multiline-ny: Readline package supporting multi-lines
- rs/zerolog: Zero Allocation JSON Logger
- uber-go/zap: Blazing fast, structured, leveled logging in Go.
さらに調子に乗って Go 関連以外にも私の関心領域にかかる情報も収集・投稿することにした。 投稿先は以下の通り:
監視対象は以下のサイト(今後追加予定):
-
Publickey - Enterprise IT × Cloud Computing × Web Technology / Blog
-
nyaosorg/nyagos: NYAGOS - The hybrid Commandline Shell between UNIX & DOS
-
gohugoio/hugo: The world’s fastest framework for building websites.
-
tailscale/tailscale: The easiest, most secure way to use WireGuard and 2FA.
-
plantuml/plantuml: Generate diagrams from textual description
上のリスト(の一部)は元々 Slack 上で監視していたものだが,プライベートでも仕事でもあまり Slack を使わなくなったので(仕事では主に Teams) Mastodon/Bluesky に移行することにしたのだ。 ただ,今までの反省で,やたら滅多とフィードを食い散らかして自 TL を埋め尽くすのは嬉しくないので,流量についてはチューニングしながら運用する予定である。
本来はフィードのチェックは Feedly とか使うべきだし,本当によく見るものだけに厳選したい。 特に青空文庫(@aozorabunko.bsky.social)とか,自身でブログ記事の更新情報を積極的に上げておられるユーザとかのフィードは外している。
今後は…
今の goark/toolbox ってフィード情報をキャッシュするのにテキストファイルを使ってるんだよな。 これだとそろそろ耐えられない気がするので SQLite を導入するかなぁ。
Pure Go で実装するならこのあたりか?
- glebarez/go-sqlite: pure-Go SQLite driver for Go (SQLite embedded)
- glebarez/sqlite: The pure-Go SQLite driver for GORM
- moul/zapgorm2: ⚡ zap logging driver for gorm v2
- mpalmer/gorm-zerolog: Alternative logging with Zerolog for GORM ⚡️
まぁ,ぼちぼちやろう。
Twitter ? 知らんですよ。 IFTTT にも金を払う気はないし,向こうでの活動は最小限に留めたい。
ブックマーク
参考図書
- プログラミング言語Go (ADDISON-WESLEY PROFESSIONAL COMPUTING SERIES)
- Alan A.A. Donovan (著), Brian W. Kernighan (著), 柴田 芳樹 (翻訳)
- 丸善出版 2016-06-20
- 単行本(ソフトカバー)
- 4621300253 (ASIN), 9784621300251 (EAN), 4621300253 (ISBN), 9784621300251 (ISBN)
- 評価
著者のひとりは(あの「バイブル」とも呼ばれる)通称 “K&R” の K のほうである。この本は Go 言語の教科書と言ってもいいだろう。
- 初めてのGo言語 ―他言語プログラマーのためのイディオマティックGo実践ガイド
- Jon Bodner (著), 武舎 広幸 (翻訳)
- オライリージャパン 2022-09-26
- 単行本(ソフトカバー)
- 4814400047 (ASIN), 9784814400041 (EAN), 4814400047 (ISBN)
- 評価
2021年に出た “Learning Go” の邦訳版。私は版元で PDF 版を購入。 Go 特有の語法(idiom)を切り口として Go の機能やパッケージを解説している。 Go 1.19 対応。