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
PHP x Nostr
Search
Hakkadaikon
November 21, 2024
Programming
210
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
PHP x Nostr
第170回 PHP勉強会@東京で発表した内容
https://phpstudy.connpass.com/event/335943/
Hakkadaikon
November 21, 2024
Transcript
28 slides
イラスト: @Bitpopart https://nostr-php.dev
自己紹介
名前 : 発火大根 PHP歴 : 3-4年くらい PHP勉強会 : offで1回参加したことあり 自己紹介1
自己紹介2 ~直近の活動~ 2024/9/23, Nostrの国際カンファレンスの 発起人をやりました。 (参加者99人、海外から参加/登壇多数) 登壇したり Nostrを提唱したfiatjaf氏に メッセージ貰ったり マグロの
解体ショーも!
Q.Nostrとは?
A.プロトコルです
Twitter(X)ぽいSNSとか Damus Nostter
クックパッド みたいなサービスとか zap.cooking
NoteやQiitaみたいな エントリ投稿できるやつとか YakiHonne
色々作れます
①WebSocket通信で速い ②電話番号メールアドレスいらない ③潰れない Nostrの特徴
①WebSocket通信で速い Nostr Websocket TCP / IP Ethernet Physical パケット クライアント
リレー (サーバー)
②電話番号メールアドレスいらない { "content": "test", “created_at”: 1726456407, "id": "7b31d7a9d9e8f65b1e3102a4cdc...", "kind": 1,
"pubkey": "101b30ee88c27a13de68bf7...", "sig": "3d7d019db85deece5c1d704c987393957bb8c5c61458...", "tags": [] } ・アカウント=鍵(公開鍵/秘密鍵) ・全てのイベント発行時に電子署名する
③潰れない ・自分で選んだ複数のリレーにデータをバラまく
今年から、他の界隈 x Nostrの組み合わせで 何回かLTをやっています 2024/2/10 Nostr x Vim 2024/4/27 Nostr
x C# 2024/10/27 Nostr x Emacs 2024/11/21 Nostr x PHP <- 今日
PHPでも Nostr開発 してみよう
使うOSS (PHP製のNostrプロトコルスタック) 8.1以上で動くよ
STEP1. laravelのプロジェクトを作る $composer create-project --prefer-dist laravel/laravel nostr-console
STEP2. nostr-phpをインストール $ composer require swentel/nostr-php
STEP3. artisanコマンドを作る $ php artisan make:command FetchTimelineCommand
STEP4. ちょろっと ソース書く(38L) <?php namespace App¥Console¥Commands; use Illuminate¥Console¥Command; use swentel¥nostr¥Filter¥Filter;
use swentel¥nostr¥Message¥RequestMessage; use swentel¥nostr¥Relay¥Relay; use swentel¥nostr¥Request¥Request; use swentel¥nostr¥Subscription¥Subscription; class FetchTimelineCommand extends Command { protected $signature = 'app:fetch-timeline-command {--kinds=1} {--limit=1}'; protected $description = 'Fetch the nostr timeline'; public function handle() { $kinds = array_map('intval', explode(',', $this->option('kinds'))); $limit = intval($this->option('limit')); $subid = (new Subscription())->setId(); $filter = (new Filter())->setKinds($kinds)->setLimit($limit); $response = ( new Request( new Relay('wss://yabu.me'), new RequestMessage($subid, [$filter]) ) )->send(); echo sprintf("%s¥n", json_encode($response, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE)); return 0; } }
NostrのTLを取得する コンソールアプリが 出来ました
早速動かしてみよう! $ php artisan app:fetch-timeline-command --kinds=1 --limit=1 --kinds : イベント種別
(0:プロフィール 1:投稿 7:リアクション etc…) --limit : イベント取得件数
{ "wss://yabu.me": [ { "type": "EVENT", "isSuccess": true, "message": "",
"subscriptionId": "Wd2SDCfvkh9T0eO6I1Mgw85iJbqGURLtjEr7BKmAyPasZNXHo4cFYuQ3lzxpnV", "event": { "content": "てすと", "created_at": 1732172057, "id": "de20ad56d21cf4c2e1fae1c67a58dbe475120fecded61c4563ed1faeff7b9839", "kind": 1, "pubkey": "101b30ee88c27a13de68bf7c8c06368ea3e3e837641595c18675677d18a46a45", "sig": "4d7002e71853282e61cb97ff0e093457d3dfd5c99fd512b1e074aaaca1a50a84250b3d16f6b895b7ebf0c8df1f247aee1cd0569f7075f937ed5e8ddf5bd0f36d", "tags": [] } }, { "type": "EOSE", "isSuccess": true, "message": "", "subscriptionId": "Wd2SDCfvkh9T0eO6I1Mgw85iJbqGURLtjEr7BKmAyPasZNXHo4cFYuQ3lzxpnV" } ] } こういうjsonが取れます
結構カンタンに つくれる
awesome- nostr-japan
気軽にやってみよう!仕組みはシンプル
Thank you for your attention !
More Decks by Hakkadaikon
See All by Hakkadaikon
高橋メソッドでCVE解説シリーズ 〜CVE-2026-99999〜
hakkadaikon
0
36
高橋メソッドでCVE解説シリーズ 〜CVE-2026-98432〜
hakkadaikon
0
36
高橋メソッドでCVE解説シリーズ 〜CVE-2026-112816〜
hakkadaikon
0
260
MoQTフルスクラッチ実装
hakkadaikon
1
120
Just do it ! で 走り抜けてきたけど ちょっと立ち止まってみた
hakkadaikon
0
950
自作WebSocket (RFC6455)
hakkadaikon
0
170
routstrについて
hakkadaikon
0
190
Nostr x BTC
hakkadaikon
0
84
Blueskyのプラグインを作ってみた
hakkadaikon
1
910
Other Decks in Programming
See All in Programming
Spec-Driven Development - Why Vaadin Is the Perfect Fit
simas
PRO
0
250
複数ドメインを一つのアプリに統合するFlutterの設計と運用_FlutterKaigi2026登壇資料(須永高弘)
takahirosunaga
0
180
Railsバージョンを4倍にした話
optim
0
1k
우리의 Nitro Modules는 당신의 Turbo Modules보다 아름답다
l2hyunwoo
0
260
Kawaiicon: Kubernetes, it's no longer cool, but let's secure it anyway!
barnbarn
0
130
Lambda durable functionsでHuman in the Loopを楽に…楽に……
har1101
2
310
GraphQL の onError と Nullability のこれから
quramy
0
210
graphql-ruby を Spinel で速くしようとした話
mtsmfm
0
140
オーケストレーション記述言語 Katari
yukikurage
0
260
AIが実装を担う時代の「技術設計」と「チームマネジメント」
kamina_zzz
2
260
Distance field of Julia set
kinakomoti321
0
320
クラウドゲーミングのパフォーマンス最適化に挑む / Cloud Gaming Performance Tuning
vivion
0
330
Featured
See All Featured
The Power of CSS Pseudo Elements
geoffreycrofte
82
6.6k
Test your architecture with Archunit
thirion
2
2.5k
Prompt Engineering for Job Search
mfonobong
0
580
A brief & incomplete history of UX Design for the World Wide Web: 1989–2019
jct
2
560
Faster Mobile Websites
deanohume
310
32k
The Illustrated Guide to Node.js - THAT Conference 2024
reverentgeek
1
610
Reality Check: Gamification 10 Years Later
codingconduct
0
2.4k
Building Adaptive Systems
keathley
44
3.3k
New Earth Scene 8
popppiees
5
2.8k
Ethics towards AI in product and experience design
skipperchong
2
460
4 Signs Your Business is Dying
shpigford
187
23k
Navigating the moral maze — ethical principles for Al-driven product design
skipperchong
2
690