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 のフィードを作ろう / 20250620-niigata-5min-tech
Search
girigiribauer
June 20, 2025
Programming
87
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Bluesky のフィードを作ろう / 20250620-niigata-5min-tech
2025/06/20 Niigata5分Tech #20 で話した資料です
girigiribauer
June 20, 2025
More Decks by girigiribauer
See All by girigiribauer
続・BlueskyとXにクロスポストするツールを作った / 20260619-niigata-5min-tech
girigiribauer
0
85
Figma デザインを自動マークアップさせた記録と肌感 / 20260425-nagaoka-tech-junction-1
girigiribauer
0
99
2026年は Rust 置き換えが流行る! / 20260220-niigata-5min-tech
girigiribauer
0
330
移動は善 / 20260124-NGK2026S
girigiribauer
1
230
Google Antigravity を使ってみた肌感 / 20251130-ai-craft-hacks-niigata
girigiribauer
0
120
なんとなく使っていたクリップボードの不思議 / 20250926-niigata-5min-tech
girigiribauer
1
110
タスクにもストック型・フロー型があるということに Todoist を使い始めて気づいた話 / 20250725-niigata-5min-tech
girigiribauer
0
110
『Bluesky 公式アカウント移行まとめ』のアップデートをした話 / 20241018-niigata-5min-tech
girigiribauer
0
150
コンテナクエリはコンテナ技術の話ではなく CSS の話です / 20240920-niigata-5min-tech
girigiribauer
1
130
Other Decks in Programming
See All in Programming
當我們開始不讀 Code - AI Agent 時代,Code Review 與 Clean Code 還剩下什麼?
jame2408
1
300
最近”作らせてる” ローカルAIアプリの話
akit37
0
490
全ての永続トークンを、生まれる前に消し去りたい!
sylph01
2
1.1k
Augmenting AI with the Power of Jakarta EE
ivargrimstad
0
350
S3 TablesのIcebergデータに、AIエージェントからアクセスしてみた / 20261016developersio2026joetsu-accessing-iceberg-in-s3tables-via-agent
kasacchiful
PRO
0
190
自サークルのIdPからログアウトできるようになるまで
taiseiue
1
150
【加筆修正版】Laravel のアプリケーションをどこにデプロイするか #phpcon_ehime
akase244
0
160
HTML-in-Canvasで作る未来のWeb UI表現
clockmaker
5
5.2k
3回つくってわかった、 定期実行ジョブ基盤の本質情報
takai
0
610
AmebaブログはKMPから卒業します
kmars0605
0
220
AI主導のプログラミング学習アプリを作ってみた
econanringo
0
180
Railsのためのパスキー実践入門 〜マルチテナントSaaSでの意思決定〜
utakaha
3
1k
Featured
See All Featured
Fight the Zombie Pattern Library - RWD Summit 2016
marcelosomers
234
18k
The Straight Up "How To Draw Better" Workshop
denniskardys
239
140k
How to Create Impact in a Changing Tech Landscape [PerfNow 2023]
tammyeverts
56
3.5k
How to build a perfect <img>
jonoalderson
1
6.1k
Chrome DevTools: State of the Union 2024 - Debugging React & Beyond
addyosmani
10
1.4k
AI Search: Where Are We & What Can We Do About It?
aleyda
0
8.1k
Digital Projects Gone Horribly Wrong (And the UX Pros Who Still Save the Day) - Dean Schuster
uxyall
1
3.5k
The Curious Case for Waylosing
cassininazir
1
570
XXLCSS - How to scale CSS and keep your sanity
sugarenia
250
1.3M
Skip the Path - Find Your Career Trail
mkilby
1
260
Docker and Python
trallard
47
4.2k
JAMstack: Web Apps at Ludicrous Speed - All Things Open 2022
reverentgeek
1
640
Transcript
/JJHBUB5FDI #MVFTLZͷϑΟʔυΛ࡞Ζ͏ HJSJHJSJCBVFS
ࣗݾհ w ωοτ্ͰHJSJHJSJCBVFSͱ͍͏ϋϯυϧωʔϜͰͬͯ·͢ w چ໊ݹຽͰ͢ 2
#MVFTLZ͍͍ͧ w ϒϧʔεΧΠ͍͍͓ͧ͡͞ΜʮϒϧʔεΧΠ͍͍ͧʯ 3
#MVFTLZͷϑΟʔυͱ w ཁ͢ΔʹࣗͳΓͷϩδοΫͰฒͨɺߘͷλΠϜϥΠϯΛ࡞ΕΔ w ΧελϜϑΟʔυΛੜ͢ΔαʔόʔαʔϏεͷ͜ͱΛ ϑΟʔυδΣωϨʔλʔͱݺͿ w ࠷খݶͷϑΟʔυΛ࡞ͬͯɺϑΟʔυΛཧղ͠Α͏ʂ 4
ϑΟʔυʹؔ͢Δոใ w ոใͱ͍͏ͷɺܾͯ͠σΟεΔҙਤͰ͋Γ·ͤΜ w ༗ࢤͷํʑ͕։ൃͨ͠ɺ(6*Ͱϙνϙν͢Δ͚ͩͰϑΟʔυ͕࡞ΕΔαʔϏ ε͕৭ʑ͋Δʢ͢Β͍͠ʣ w ྫಛఆΩʔϫʔυ܈Λઃఆͯ͠ɺͦΕΒΛؚΉϑΟʔυΛ࡞Δ w ཁ͢ΔʹϑΟʔυδΣωϨʔλʔͷδΣωϨʔλʔ
w άάΔͱ͜ͷลͷ(6*ͷૢ࡞ͷํΈ͍ͨͳͷ͕ͨ͘͞ΜҾ͔͔ͬͬͯ͘Δ w ͕ͩཉ͍͠ใͰͳ͍ɾɾɾ 5
ϑΟʔυʹؔ͢Δެࣜใ w ։ൃऀެࣜυΩϡϝϯτΛݟΑ͏ w IUUQTEPDTCTLZBQQEPDTTUBSUFSUFNQMBUFTDVTUPNGFFET w ελʔλʔΩοτ͕Ұ൪Θ͔Γ͍͢ w IUUQTHJUIVCDPNCMVFTLZTPDJBMGFFEHFOFSBUPS w
ͱ͍͑ͬͱ͗མͱͤΔͷͰɺࢀߟʹͭͭࣗ͠લͰ࡞Δ w ඞཁʹԠͯ͡"51SPUPDPMʢΞοτϓϩτίϧʣΛݟΔ w IUUQTHJUIVCDPNCMVFTLZTPDJBMBUQSPUP w ྫϨίʔυΛՃ͢Δ"1*ͰɺʮͲ͜ʹʯʮԿΛʯ͕ͬͪ͜ʹॻ͍ͯ ͋Δʢਖ਼ͪΐͬͱΘ͔ΓͮΒ͍ʣ 6
࠷খݶͷ#MVFTLZϑΟʔυ w αʔόʔΛ༻ҙ͢Δ w దͳ+40/Λฦ͢ΤϯυϙΠϯτΛؚΉ8FCαʔϏεΛ༻ҙ͢Δ w खݩͰ"1*Λୟ͍ͯϑΟʔυΛొ͢Δ 7 \؆୯ʂ/
αʔόʔΛ༻ҙ͢Δ w ݻఆϙετ͚ͩͰ͍͍ͳΒແྉͷTUBUJDTJUFͰେৎ w σʔλϕʔεඞਢͰͳ͍ɺϑΟʔυͷϩδοΫ࣍ୈ 8
దͳ+40/Λฦ͢ΤϯυϙΠϯτΛؚΉ8FCαʔϏεΛ༻ҙ͢Δ w XFMMLOPXOEJEKTPO w ࢄ*% %*% %FDFOUSBMJ[FE*EFOUJGJFS Λ׆༻ͯ͠ɺ8$͕ඪ४Խͯ͠ ͍Δ%*%%PDVNFOUΛฦ͢
w #MVFTLZଆ͔Β͍߹Θ͕ͤདྷΔ 9
దͳ+40/Λฦ͢ΤϯυϙΠϯτΛؚΉ8FCαʔϏεΛ༻ҙ͢Δ 10 const app = new Hono(); app.get("/.well-known/did.json", (c)
=> { return c.json({ "@context": ["https://www.w3.org/ns/did/v1"], id: "did:web:feeds.bsky.girigiribauer.com", service: [ { id: "#bsky_fg", type: "BskyFeedGenerator", serviceEndpoint: "https://feeds.bsky.girigiribauer.com", }, ], }); });
దͳ+40/Λฦ͢ΤϯυϙΠϯτΛؚΉ8FCαʔϏεΛ༻ҙ͢Δ w YSQDBQQCTLZGFFEHFU'FFE4LFMFUPO w IUUQTEPDTCTLZBQQEPDTBQJBQQCTLZGFFEHFUGFFETLFMFUPO w ͜ͷϨεϙϯεʹԊͬͯฦͯ͋͛͠Δ͚ͩ w ϦΫΤετʹGFFEύϥϝʔλ͕͋ΓɺෳϑΟʔυͷͲΕ͔ΒͷΞΫηε
͔ผͰ͖Δ w ͜ͷ"1*#MVFTLZଆ͔Βୟ͔ΕΔͷ 11
12
దͳ+40/Λฦ͢ΤϯυϙΠϯτΛؚΉ8FCαʔϏεΛ༻ҙ͢Δ 13 const app = new Hono(); app.get("/xrpc/app.bsky.feed.getFeedSkeleton", async
(c) => { return c.json({ feed: [ { post: "at://did:plc:tsvcmd72oxp47wtixs4qllyi/app.bsky.feed.post/ 3ldcooerekc2y", }, ], }) });
खݩͰ"1*Λୟ͍ͯϑΟʔυΛొ͢Δ w ࠓ#MVFTLZଆͷ"1*Λୟ͘ w ελʔλʔΩοτͷTDSJQUTQVCMJTI'FFE(FOUTࢀর w Ճ͢ΔํͷใQVU3FDPSE w IUUQTEPDTCTLZBQQEPDTBQJDPNBUQSPUPSFQPQVUSFDPSE
w Ճ͞ΕΔํͷใBQQCTLZGFFEHFOFSBUPS w IUUQTHJUIVCDPNCMVFTLZTPDJBMBUQSPUPCMPCNBJOMFYJDPOTBQQ CTLZGFFEHFOFSBUPSKTPO 14
खݩͰ"1*Λୟ͍ͯϑΟʔυΛొ͢Δ 15 const agent = new AtpAgent({ service: "https://bsky.social"
}); await agent.login({ identi fi er: handle, password }); // தུ const image = await fs.readFile(path); const blobResponse = await agent.com.atproto.repo.uploadBlob(image, { encoding: "image/png", }); // தུ const result = await agent.com.atproto.repo.putRecord({ repo: agent.session?.did ?? "", collection: "app.bsky.feed.generator", rkey: "helloworld", record: { did: "did:web:feeds.bsky.girigiribauer.com", displayName: "Helloworld feed", description: "Hello! Hello!", avatar, // BlobRef createdAt: new Date().toISOString(), }, });
/FYUTUFQ w ϑΟʔυʹΞΫηε͖ͯͨ͠ਓͷEJEΛΔʹ"VUIPSJ[BUJPOϔομʔ Λղੳͯ͠+85͔ΒऔΓग़͢ w IUUQTHJUIVCDPNCMVFTLZTPDJBMGFFEHFOFSBUPSCMPCNBJOTSD BVUIUT- w &YQSFTTKTґଘʹͳͬͯΔ෦͕͋ΔͷͰؾΛ͚ͭͯͶ w
໘നϑΟʔυΛ࡞ͬͯΈΔ w ϑΟʔυҎ֎ʹ৭ʑΤϯδχΞϦϯάͰ͖Δͧ 16
·ͱΊ w #MVFTLZͷϑΟʔυɺࣗͰΧελϚΠζͨ͠λΠϜϥΠϯΛఏڙͰ͖Δ Έ w #MVFTLZͷ"1*ɺ͔ͬͪ͜Βୟ͘ͷɺ͜͏͔Βୟ͔ΕΔͷͷ྆ํ ͕ࠞͬͯ͟ॻ͍ͯ͋Δ w Φʔϓϯͳϓϩτίϧͱ"1*ΛͬͯɺࣗͳΓͷใۭؒΛ࡞Ζ͏ 17
w ϒϧʔεΧΠ͍͍͓ͧ͡͞ΜʮϒϧʔεΧΠ͍͍ͧʯ 18 https://internet.watch.impress.co.jp/docs/yajiuma/2024244.html
͝ਗ਼ௌ͋Γ͕ͱ͏͍͟͝·ͨ͠ʂ 19