Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Blueskyのプラグインを作ってみた
Search
Hakkadaikon
May 31, 2025
Programming
1
650
Blueskyのプラグインを作ってみた
ゴリラ.vim #36 ~ Vim x SNS ~ で登壇した内容
https://gorillavim.connpass.com/event/353161/
Hakkadaikon
May 31, 2025
Tweet
Share
More Decks by Hakkadaikon
See All by Hakkadaikon
Nostr x BTC
hakkadaikon
0
28
PHP x Nostr
hakkadaikon
0
120
Emacs x Nostr
hakkadaikon
1
290
My Introduction To Nostr
hakkadaikon
0
190
Nostr × C#
hakkadaikon
0
210
思考の速さで使うクライアント ~vimクライアント作ってみた~
hakkadaikon
0
400
ゴリラ.vim #30 ライブコーティング
hakkadaikon
0
92
vimを読もうとした話
hakkadaikon
0
290
継続的な勉強会には何が必要か語り合ってみた!
hakkadaikon
0
93
Other Decks in Programming
See All in Programming
Flutterと Vibe Coding で個人開発!
hyshu
1
230
CEDEC 2025 『ゲームにおけるリアルタイム通信への QUIC導入事例の紹介』
segadevtech
3
760
副作用と戦う PHP リファクタリング ─ ドメインイベントでビジネスロジックを解きほぐす
kajitack
3
520
#QiitaBash TDDで(自分の)開発がどう変わったか
ryosukedtomita
1
350
MCPで実現できる、Webサービス利用体験について
syumai
7
2.4k
Reactの歴史を振り返る
tutinoko
1
170
What's new in Adaptive Android development
fornewid
0
130
[Codecon - 2025] Como não odiar seus testes
camilacampos
0
100
Jakarta EE Meets AI
ivargrimstad
0
600
React は次の10年を生き残れるか:3つのトレンドから考える
oukayuka
41
16k
Vibe Codingの幻想を超えて-生成AIを現場で使えるようにするまでの泥臭い話.ai
fumiyakume
21
10k
Infer入門
riru
3
500
Featured
See All Featured
Imperfection Machines: The Place of Print at Facebook
scottboms
267
13k
Building a Scalable Design System with Sketch
lauravandoore
462
33k
The World Runs on Bad Software
bkeepers
PRO
70
11k
Producing Creativity
orderedlist
PRO
346
40k
Principles of Awesome APIs and How to Build Them.
keavy
126
17k
Mobile First: as difficult as doing things right
swwweet
223
9.9k
Stop Working from a Prison Cell
hatefulcrawdad
271
21k
Speed Design
sergeychernyshev
32
1.1k
No one is an island. Learnings from fostering a developers community.
thoeni
21
3.4k
Raft: Consensus for Rubyists
vanstee
140
7.1k
Measuring & Analyzing Core Web Vitals
bluesmoon
7
540
Optimizing for Happiness
mojombo
379
70k
Transcript
Blueskyの Vimプラグインを つくってみた ゴリラ.vim #36 発火大根
と…その前に
開催決定おめでとう ぼくもちょっとスポンサーしました
自己 紹介
名前 : 発火大根 Bluesky歴 : 2年ちょい(2023/5/1開始) 本業 : SRE (転職してちょうど3ヶ
月目) 趣味 - SNSで穀潰し (主にNostr/vim-jp/…) - 卓球 (月1) - 誘われて謎解きをやったりとか
色んなとこでLTやったりオフ会やったり お世話になったりしてます
2024.09.23 Nostrasia 2024 - 海外の方に登壇いただいたり - マグロ解体ショーやったり - 配信されてるのでみてね
Blueskyでやった 私の活動紹介
2023/9/2 NGワードチェックつき 投稿専用クライアント
2024/2/21 Vim script + Indigo Blueskyクライアント PoC
最近つくったやつ
WebSocket プロトコルスタック - C言語製 - libc不使用 (Linuxの場合)
さて
目次 1.以前作ったBlueskyプラグインPoCの問題 2.今回作ったプラグイン
2024/02/21 Bluesky勉強会で こんな話をしました
VimからSNSがやれたら、 なんだかよさそうだぞ。 Vimは思考の速度で編集できる 開発<->SNSのシームレスな移行が可能 検索やスクラップがやりやすくなる!
しかし この時作ったPoCは 問題を抱えていた
①Neovim依存
NeovimのVim scriptで 書いてる →拡張性に難あり
②ツール依存
CLIツール Indigoに 依存 https://github.com/bluesky-social/indigo
もうちょっと なんかないものか…
目次 1.以前作ったBlueskyプラグインPoCの問題 2.今回作ったプラグイン
Vimmer大好き denops https://github.com/vim-denops/denops.vim - denoでぃの(での)でプラグインかける - 速い - Vim/Neovim共通のプラグインが書ける -
Vimmerの間では、オリンピックより denopsのリリースが話題になっていた ことも
Firehose API - ATProtocolの仕様のひとつ - WebSocket経由でイベントがとれる - いろんなエンドポイントがある - app.bsky.feed.post
- app.bsky.feed.repost - app.bsky.feed.like – etc…
Firehose API - Firesky - John Spurlockさん作成 - Firehose APIで出来ている
- めっちゃ速く投稿流れてく - GIGAZINEでニュースにも - ちょっとみてみよう https://firesky.tv/
Denops + Firehose
wss://bsky.network/xrpc/com.atproto.sync.subscribeRepos WebSocketサーバーが用意されてる なら、denops依存だけで つくれるのでは!? (denoは標準でWebSocketがつかえる)
websocatコマンドで ためしにsubscribe してみよう
なにこれ
RFC8949: Concise Binary Object Representation (CBOR)で エンコードされている
atproto/api Blueskyの公式リファレンス実装 を使うことにした https://github.com/bluesky-social/atproto
それなりには動いた…が
2025/5/31 便利なものをみつける
Jetstream
Jetstreamの特徴 - ATProtoのイベントを シンプルなJSON形式で配信 - CBORがデコード不要
こっちのが便利じゃん! 依存も減らせる!
こっちに乗り換えよう! (発表当日だけど)
乗り換えた&動いた!
- denopsはいいぞ - ATProtocolはいいぞ - jetstreamはいいぞ まとめ
Demo (でも)
function! s:start() abort command! BskyStart call denops#request('denops-bsky', 'start', []) endfunction
function! s:stop() abort command! BskyStop call denops#request('denops-bsky', 'stop', []) endfunction augroup denops_bsky autocmd! autocmd User DenopsPluginPost:denops-bsky call s:start() autocmd User DenopsPluginPost:denops-bsky call s:stop() augroup END BskyStart : subscribe開始 BskyStop: 停止
Thank you for your attention!