Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
Blueskyのプラグインを作ってみた
Search
Hakkadaikon
May 31, 2025
Programming
890
1
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Blueskyのプラグインを作ってみた
ゴリラ.vim #36 ~ Vim x SNS ~ で登壇した内容
https://gorillavim.connpass.com/event/353161/
Hakkadaikon
May 31, 2025
More Decks by Hakkadaikon
See All by Hakkadaikon
MoQTフルスクラッチ実装
hakkadaikon
1
100
Just do it ! で 走り抜けてきたけど ちょっと立ち止まってみた
hakkadaikon
0
930
自作WebSocket (RFC6455)
hakkadaikon
0
160
routstrについて
hakkadaikon
0
180
Nostr x BTC
hakkadaikon
0
79
PHP x Nostr
hakkadaikon
0
190
Emacs x Nostr
hakkadaikon
2
440
My Introduction To Nostr
hakkadaikon
0
280
Nostr × C#
hakkadaikon
0
270
Other Decks in Programming
See All in Programming
パスワード再設定メールのURLについて知っておこう
uyuki234
0
160
SalesForceを内製化!? ~ HR事業を支える顧客管理基盤のインフラを大公開 ~
oku053
0
170
Simple Storage Service(S3) is not simple
iwatsukayura
0
290
Optunaを作ったときにやりたかったこと、その後 (2026/10/16, Optuna Meetup #3)
iwiwi
1
420
半永久的に提供し続けられるプライベートクラウドを目指して ― 利用者の認知負荷を抑えるAPI抽象化とハードウェア世代交代の基盤設計
tomokon
0
490
Compiling a real-world CLI tool to native with Static Hermes
tmikov2023
0
120
AI主導のプログラミング学習アプリを作ってみた
econanringo
0
180
コーディング自動化の次へ。人の介入をゼロにするファクトリーとサポートAIによる実践
timakin
4
3.2k
Atomic Design, Enforced: Scaling Mobile Design Systems (next.app devCon / droidCon Berlin 2026)
steliosf
PRO
0
170
全ての永続トークンを、生まれる前に消し去りたい!
sylph01
2
790
Event is what happens
moro
2
730
すこし踏み込む CancellationToken
htkym
2
1.7k
Featured
See All Featured
Crafting Experiences
bethany
1
380
Music & Morning Musume
bryan
48
7.4k
Documentation Writing (for coders)
carmenintech
77
5.6k
Practical Orchestrator
shlominoach
192
12k
Noah Learner - AI + Me: how we built a GSC Bulk Export data pipeline
techseoconnect
PRO
0
460
[SF Ruby Conf 2025] Rails X
palkan
3
1.5k
Chasing Engaging Ingredients in Design
codingconduct
0
360
Designing Dashboards & Data Visualisations in Web Apps
destraynor
232
55k
BBQ
matthewcrist
90
10k
A brief & incomplete history of UX Design for the World Wide Web: 1989–2019
jct
2
530
How to Grow Your eCommerce with AI & Automation
katarinadahlin
PRO
2
330
Pawsitive SEO: Lessons from My Dog (and Many Mistakes) on Thriving as a Consultant in the Age of AI
davidcarrasco
0
260
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!