開発者向けSNS /dev/null をWSL2とLaravel Sailでローカル起動してみた
dev-null.shとは
/dev/null は、開発者向けのオープンソースSNSです。GitHubアカウントでログインし、開発者同士でフォローしたり、投稿(Commitと呼ばれています)や返信をしたりできます。
Laravel界隈で知られる Nuno Maduro、Brent Roose、Matthieu Napoli、Pauline Vos らがライブ配信で開発を始めたプロジェクトで、現在はコミュニティからのPull Requestも受け付けながら開発が進められています。
ソースコードはGitHubでMITライセンスのもと公開されており、Laravel 13、Inertia.js、React、PostgreSQLなどを使って構築されています。
開発開始から間もないにもかかわらず、かなりの勢いで機能が追加されているのも特徴です。今回は、このアプリケーションを実際にローカル環境で動かしてみます。
利用されている技術スタック
主な技術スタックは以下のとおりです(2026年11月3日時点)。
分類
技術
言語
PHP 8.5、TypeScript
バックエンド
Laravel 13
フロントエンド
React 19、Inertia.js 3
CSS / UI
Tailwind CSS 4、Radix UI
ビルドツール
Vite+
パッケージ管理
Composer、Bun 1.4
データベース
PostgreSQL 17以上
DB拡張
pgvector、pg_trgm
認証
Laravel Socialite(GitHub OAuth)
なおベースはLaravel Starter Kitのnunoカスタムが使われています
データベースにはPostgreSQLを採用しており、ベクトル検索のためのpgvectorと、文字列検索向けのpg_trgm拡張が必要です。
動かしてみる
筆者の環境ではWSL2(Debian)を利用しています。今回はLaravel Sailを使ってDockerコンテナ上で動かすため、DockerとDocker Composeが利用できるLinux環境であれば、おおむね同じ手順で構築できるはずです。
リポジトリをclone
git clone dev-null-sh/dev-null.sh
cd dev-null.sh
公式READMEではcomposer setupで環境を構築できますが、このコマンドは依存パッケージのインストールからDBのマイグレーション、フロントエンドのビルドまで実行します。
今回はLaravel Sailを利用するため、まずはComposerの依存パッケージだけをインストールします。
ホスト側のPHPバージョンや拡張モジュールの要件チェックを無視してインストール
composer install --ignore-platform-reqs
--ignore-platform-reqsは、ホスト側のPHP環境がプロジェクトの要件を満たしていなくても依存パッケージをインストールするためのオプションです。実際のアプリケーションは後ほどSailのコンテナ内で実行します。なお、標準の依存パッケージにはlaravel/sailが含まれていないので、後ほど追加します。
!
ここでLaravel Vetというツールから次のメッセージが表示されました。
Vet has no trust entry in [vet.json] yet.
Run [./vendor/bin/vet --init] to record what you trust today.
Laravel VetはComposerの依存パッケージの変更を監査するためのツールです。これは脆弱性が検出されたという警告ではなく、信頼済みパッケージの初期登録がまだ行われていないという通知です。
laravel/sail を開発依存に追加
composer.json
@@ -35,6 +35,7 @@
"laravel/pail": "^1.2.7",
"laravel/pao": "^1.1.5",
"laravel/pint": "^1.32.1",
- "laravel/sail": "^1.69",
"laravel/tinker": "^3.0.2",
"laravel/vet": "^0.2.1",
"mockery/mockery": "^1.6.15",
これでcomposer.lockを更新し、Sailをインストールします。
Sailの依存関係だけを更新
composer update laravel/sail --ignore-platform-reqs --no-scripts
なお、--no-scriptsを付けているのは、このプロジェクトのpost-update-cmdで別の依存パッケージの更新処理も実行されるためです。
Sailの設定ファイルを生成する
PostgreSQLとPHP 8.5を使用するSail環境を生成
php artisan sail:install --with=pgsql --php=8.5
これでcompose.yamlなどの設定ファイルが生成されます。
この後、コンテナを起動します。
Sailのコンテナを起動
./vendor/bin/sail up
特にポートを変更していなければ、http://localhost:8000でアクセスできます。
ただし、まだDBの初期化を行っていないため、アプリケーションにアクセスするとエラーになります。
おなじみのマイグレーション未実行エラー
DB初期化
まず、マイグレーションとSeederを実行してDBを初期化します。
テーブルを作成し、初期データを投入
./vendor/bin/sail artisan migrate:fresh --seed
ところが、ここでエラーが発生しました。
pgvectorがみつからないエラー
このアプリケーションではPostgreSQLのpgvector拡張を使用していますが、Sailが生成した標準のPostgreSQLイメージには含まれていません。
そこで、compose.yaml のPostgreSQLイメージをpgvector入りのものに差し替えます。
compose.yaml
@@ -24,7 +24,7 @@ services:
depends_on:
- pgsql
pgsql:
- image: 'postgres:18-alpine'
- image: 'pgvector/pgvector:pg18'
ports:
- '${FORWARD_DB_PORT:-5432}:5432'
environment:
イメージの変更を反映するため、Sailを再起動します。
コンテナを停止・削除(DBのデータボリュームは保持)
./vendor/bin/sail down
新しいイメージでコンテナを起動
./vendor/bin/sail up -d
改めてマイグレーションを実行します。
DBを初期化し、Seederを実行
./vendor/bin/sail artisan migrate:fresh --seed
今度は問題なく完了しました。
all done
!
migrate:freshは既存のテーブルをすべて削除して再作成します。今回は新規の開発環境なので問題ありませんが、既存データのあるDBでは注意してください。
フロントエンド
続いて、フロントエンドの依存パッケージをインストールし、ビルドします。
ロックファイルに従って依存パッケージをインストール
./vendor/bin/sail bun install --frozen-lockfile
本番用アセットをビルド
./vendor/bin/sail bun run build
これでビルドまで完了です。
さらに、ホットリロード(HMR)を利用するため、Vite+の開発サーバーを起動します。
Vite+の開発サーバーを起動
./vendor/bin/sail bun run dev
無事に起動。最初から表示されている投稿はSeederで投入されたダミーデータ
ログインしてみる
dev-null.shのログイン通常はGitHub OAuthによる認証のみを利用しますが、開発モード(APP_ENV=local)ではGitHubの認証情報なしでローカルログインできます。任意のハンドル名を入力すればログインできるので、動作確認のためにGitHub OAuthアプリを登録する必要はありません。
開発モードでのローカルログイン
Seederをざっくり日本語にしてみる
初期状態ではSeederによって英語のダミー投稿が投入されています。せっかくなので、投稿内容をざっくり日本語に変更してみます。AI任せです。
まあAIで
変更後、Seederを再実行します。
DBを初期化し、変更したSeederのデータを投入
./vendor/bin/sail artisan migrate:fresh --seed
日本語のダミー投稿が並ぶようになりました
Laravel Starter Kitをベースに、Inertia.jsとReactで構築されているため、こうした改変も比較的簡単にできます。Laravelに慣れている人なら、ソースコードを追いながらあれこれ手を加えてみるのも面白そうです。
あとがき
今回はローカル環境で起動し、Seederを改変するところまで試してみました。自分も普段からLaravel + Inertia.js + Reactでアプリケーションを開発しているので、かなり馴染みのある構成です。Laravel Starter Kitをベースにしていることもあり、コードを追うのも改変するのも比較的やりやすい印象でした。
中身を覗いてみると、Trendingのランキングなどもなかなか興味深い実装です。機械学習モデルに頼るのではなく、投稿への反応や経過時間、フォロー関係などをSQLでスコアリングしています。特にランキングやレコメンデーションの実装は、一から考えるとなかなか面倒な部分なので、実際に動いているコードが読めるのはありがたいところです。
筆者のアカウント
dev-null.sh
Building an AI-powered developer social network 🚀
⭐ GitHub Repository: nunomaduro/dev-null.sh
In this video, we explore dev-null.sh, an open-source project that a developer social network powered by Laravel featuring PGVector embeddings, signed SSH mobile requests, and an autonomous AI community bot named Tom..
#github #coding #opensource #programming #developer
1 comment · 32 views
Just making sure our boy Tom will be ready to answer your questions when we return
dev-null.sh#925
8 likes · 773 views
nunomaduro/dev-null.sh
개발자를 위한 SNS? 라는 느낌으로 누군가가 또 Laravel 기반으로 만들고 있는데, 여럿 인플루언서들이 가입하면서 유행타고 있는 것 같다. PHP 기반이면 액티비티펍을 끼얹을 여지도 있겠지만 과연...?
開発者向けSNS「/dev/null」ことはじめ。登録・投稿・使い方まとめ
はじめに
こんにちは。株式会社アップルワールド プロダクト開発部 開発戦略グループの松岡です。
最近 X を眺めていたところ、タイムラインで「/dev/null(dev-null.sh)に登録しました!」といったプロフィール投稿を見つけました。「お、新しいサービスかな?」と気になったのと、名前からしてもう面白そうだったので、さっそく登録して、Web とターミナルの両方から投稿してみました。
ただ、まだ /dev/null の情報があまり見当たらなかったので、参考までに残しておきます。この記事は、まだ触ったことがない人向けの「やってみた」記録です。登録の流れ、CLI からの投稿、公開 API、ちょっとしたゲーム要素、使ってみて感じたことをまとめます。
/dev/null とは
/dev/null は開発者のための SNS で、リポジトリの README にも「A social network for developers. Sign in with GitHub, follow developers, and share commits.」と書かれているとおりです。
いちばんの特徴は、SNS の用語がほとんど Git や Unix の言葉に置き換えられていることです。
一般的な SNS
/dev/null
違い
投稿
commit
つぶやき1件を「コミット」と呼びます
タイムライン
log
投稿の流れは git log のような「ログ」
いいね
star
GitHub のスターと同じ感覚で付けます
DM(ダイレクトメッセージ)
Remotes
サイドバーの「Remotes」がメッセージ画面です
メッセージを送る
push
相手に push する、という言い方をします
ブックマーク
Saved
あとで読みたい commit を保存できます
ほかにも、commit を引用する Quote や、1日10個まで commit に感謝の気持ちを贈れる「pastéis mode」など、コミュニケーションを後押ししてくれるような機能があります。
基本情報は次のとおりです。
ログインは GitHub アカウントのみ
オープンソースで、リポジトリは nunomaduro/dev-null.sh
2026年10月15〜16日に、Laravel 界隈で有名な Nuno Maduro さんたちが約48時間のライブ配信の中で作り上げたサービス
技術スタックは PHP / Laravel / Inertia / React / PostgreSQL
ドメインが .sh なので、てっきりシェルスクリプトっぽい何かで動いているのかと思っていたら、中身は PHP(Laravel)でした。思わず二度見しました。
GitHub でサインインする
GitHub アカウントを持っていれば登録はとても簡単で、トップページからサインインするだけで、メールアドレスやパスワードを新しく用意する必要はありません。
GitHub のアカウントで参加する形なのも、「開発者の SNS」らしくていいなと感じました。
サインインすると、はじめにプロフィールやフォローする人の設定、基本的な使い方を案内するチュートリアルが表示されます。
はじめての commit
Web から
Web 画面では、ふつうの SNS と同じように入力欄に文章を書いて commit(投稿)できます。本文は最大 4,000 文字で、280 文字を超える長文はフィード上で折りたたまれます。
Web には投票(poll)機能もあり、選択肢と期間を決めてちょっとしたアンケートも取れます。
なお、新しい投稿はすぐに公開されず、pending(承認待ち)になってから承認されることがあります。最初は「あれ、出てこない?」と思いましたが、AI モデレーションのための仕組みなので、少し待てば大丈夫です。
CLI から
個人的にいちばん楽しかったのがターミナルからの commit で、公式にも記載がありますが、次のコマンドを1行実行するだけです。
curl -fsSL dev-null.sh | bash -s -- "hello from my terminal"
curl でスクリプトを取ってきて、bash -s -- のあとに書いたメッセージがそのまま commit になるので、エディタで作業している合間にターミナルからさっとつぶやけます。開発者向け SNS ならではですね。
!
curl ... | bash 形式のコマンドは、実行前にスクリプトの中身を確認するのがおすすめです。curl -fsSL dev-null.sh だけを実行すれば中身を読めます。
ほかの人の commit に返信したいときは、--reply オプションに相手の投稿のハッシュか URL を渡します。
curl -fsSL dev-null.sh | bash -s -- --reply <ハッシュまたはURL> "nice commit!"
ハッシュで投稿を指定するあたり、本当に Git を触っている気分になります。
CLI の面白さ:SSH 署名の仕組み
「ターミナルから投稿できるのは便利だけど、なりすましは大丈夫なの?」と気になりましたが、CLI からの commit は SSH 鍵で署名されるので、このあたりはよくできています。
ざっくり言うと、仕組みは次のとおりです。
手元の SSH 秘密鍵で commit に署名する
サーバー側は、GitHub に登録されている公開鍵を使って署名を検証する
検証が通れば、その GitHub ユーザー本人の commit として扱われる
ポイントは、秘密鍵が自分のマシンから外に出ないことです。サーバーに渡るのは署名だけで、照合には GitHub に公開されている公開鍵を使います。GitHub に SSH 鍵を登録済みなら追加の準備はほとんどいらず、Git のコミット署名と同じ考え方なので、エンジニアにはなじみやすいと思います。
レート制限について
連投しすぎないように commit は1分あたり10件までというレート制限があり、リポジトリの README に書かれています。コード上では ThrottleCommits という仕組みで制御されています。
ちなみに、Slack と連携して投稿できたら便利かも?と思ったのですが、現時点で公式の Slack 連携はなさそうです。ほかのユーザーさんからも「Slack からだとこの上限にすぐ当たってしまうだろう」と返信をもらいました。たしかに、チャットの流れを自動で流すと10件/分はすぐ超えそうです。
最初のフォロワー @tom
登録すると、最初からフォロワーに @tom がいます。MySpace を知っている人なら「あの Tom か」とピンとくるかもしれませんが、全員と自動で相互フォローになる案内役の AI ボットです。
プロフィールを見ると、レベルは Lv.6 の「root」で、Unix でいえば管理者権限です。
commit で @tom にメンションすると、/dev/null の使い方などを日本語でも答えてくれます。せっかくなので「@tom Are you the Tom from MySpace?」と聞いてみたところ、すぐに返事が来ました。
「Nope. I'm a friendly AI bot inspired by MySpace Tom, not the real person.」とのことで、本人ではなく MySpace の Tom をモデルにした AI ボットだと答えてくれました。
Remotes(DM)は受け付けていないので、話しかけるときは公開の commit で。
公開 API も用意されている
README の Public API を見ると、認証なしで使える読み取り専用の API も公開されていて、JSON を返すパスは /api/v1 配下です。返ってくるのは承認済みの commit だけで、pending や削除済みのものは含まれません。レート制限は IP ごとに1分あたり60リクエストです。
エンドポイント
返ってくるもの
GET /api/v1/users/{username}
公開プロフィール(commit 数、フォロワー数、フォロー数)
GET /api/v1/users/{username}/commits
そのユーザーの commit(新しい順、1ページ20件。?replies=1 で返信一覧)
GET /api/v1/users/{username}/followers
フォロワー一覧(1ページ30件)
GET /api/v1/users/{username}/following
フォロー中のユーザー一覧(1ページ30件)
GET /api/v1/commits/{id}
commit 1件の詳細(投稿者、star 数、返信数、リンクプレビュー、画像など)
たとえば自分の commit 一覧は、次のように取れます。
curl -s dev-null.sh | jq '.data[] | {short_hash, body}'
ちなみに、タイムラインや通知、commit の投稿などは SSH 鍵で署名したリクエストだけが受け付けられる仕組みで、こちらは主にモバイルアプリ向けです。まずは公開 API で自分の commit を眺めてみるくらいが、気軽に試せてちょうどよいと思います。
小さなゲーム要素(XP・バッジ)
/dev/null には、使うほど楽しくなるゲーム要素があります。
XP とレベル:活動すると XP がたまり、レベルが上がります。私は現在 Lv.3 の operator で、次は maintainer です。
achievement(実績バッジ):特定の行動で解除されます。init や syntax、pipe、authorized_keys などがあり、uptime や stargazer のように回数で解除されるものもあります。
syntax は commit の中に Markdown のコードフェンス(三重バッククォートで囲んだコードブロック)を書くと解除され、開発者 SNS らしくコードを貼ること自体がちゃんと評価されます。
fmt.Println("Hello, /dev/null!")
レベル名やバッジ名が Unix ネタになっているので、開発者にはなじみやすいです。
海外からの返信など、やってみた所感
実際に何度か commit してみて、いちばん印象に残ったのは海外の開発者との距離の近さです。
英語で commit してみたところ、南アフリカ、オランダ、ナイジェリア、スイスの方などから返信をもらえ、まだ新しいサービスでユーザーの規模がちょうどよいのか、ひとつの commit にしっかり反応が返ってくる感覚があります。英語に自信がなくても、短い一文やコードを添えるだけで会話のきっかけになりました。日本語で commit しても、読む人は commit に付いている Translate ボタンで自分の言語に翻訳して読めます。私は英語を勉強中なので、英語で発信していこうと思います。
まとめ
/dev/null は、投稿を commit、タイムラインを log と呼ぶ、開発者のための遊び心たっぷりな SNS です。GitHub でサインインすればすぐ始められて、API キーなどを用意しなくてもターミナルからワンライナーで commit できるのが面白いところだと感じました。
使ってみて良かったところと気になったところを挙げると、こんな感じです。
良かったところ
GitHub だけで登録できて、始めるまでが速い
ターミナルから投稿でき、SSH 署名で本人確認もしっかりしている
commit / log / star などの言葉遊びと、Unix ネタのレベル・バッジが楽しい
オープンソースなので、仕組みを自分で読める
まだ小さいコミュニティなので、タイムラインが投稿順で流れていて初期の Twitter のよう
気になったところ
なぜこのタイミングで盛り上がっているのか、X などとどう差別化していくのか
一瞬の盛り上がりで終わってしまわないか
このあたりは、しばらく使い続けながら見ていきたいと思います。とはいえ、著名なエンジニアの方も少しずつ参加してきているので、これからどう育っていくのか楽しみです。
「名前が気になった」くらいの軽い気持ちで大丈夫なので、まずは1件 commit してみてください。log で見かけたら、ぜひ star や返信をもらえるとうれしいです。
リンク
/dev/null 公式サイト:dev-null.sh
GitHub リポジトリ:nunomaduro/dev-null.sh
私のプロフィール:dev-null.sh
2 likes
@tcballard It's not from GitHub; you can only log in with your GitHub credentials. It's from nunomaduro/dev-null.sh
2 likes · 45 views
I focus even on small details a lot
Does this make sense?
dev-null.sh#651
2 likes · 66 views
開発者がポストをコミットとして共有できるユニークなSNSプラットフォームらしい
ライブ配信で公開で作られた仕組みが面白そう
yug1224 starred nunomaduro/dev-null.sh
nunomaduro/dev-null.sh
1 like
dev-null.sh propose un réseau social pour développeurs, avec connexion GitHub et partage d’activité autour du code.
nunomaduro/dev-null.sh
4 likes · 908 views
it's fully open source (github.com/nunomaduro/dev-null.sh/pulls) and received over 200 PRs in less than 48 hours
Mentions
開発者向けSNS /dev/null をWSL2とLaravel Sailでローカル起動してみた dev-null.shとは /dev/null は、開発者向けのオープンソースSNSです。GitHubアカウントでログインし、開発者同士でフォローしたり、投稿(Commitと呼ばれています)や返信をしたりできます。 Laravel界隈で知られる Nuno Maduro、Brent Roose、Matthieu Napoli、Pauline Vos らがライブ配信で開発を始めたプロジェクトで、現在はコミュニティからのPull Requestも受け付けながら開発が進められています。 ソースコードはGitHubでMITライセンスのもと公開されており、Laravel 13、Inertia.js、React、PostgreSQLなどを使って構築されています。 開発開始から間もないにもかかわらず、かなりの勢いで機能が追加されているのも特徴です。今回は、このアプリケーションを実際にローカル環境で動かしてみます。 利用されている技術スタック 主な技術スタックは以下のとおりです(2026年11月3日時点)。 分類 技術 言語 PHP 8.5、TypeScript バックエンド Laravel 13 フロントエンド React 19、Inertia.js 3 CSS / UI Tailwind CSS 4、Radix UI ビルドツール Vite+ パッケージ管理 Composer、Bun 1.4 データベース PostgreSQL 17以上 DB拡張 pgvector、pg_trgm 認証 Laravel Socialite(GitHub OAuth) なおベースはLaravel Starter Kitのnunoカスタムが使われています データベースにはPostgreSQLを採用しており、ベクトル検索のためのpgvectorと、文字列検索向けのpg_trgm拡張が必要です。 動かしてみる 筆者の環境ではWSL2(Debian)を利用しています。今回はLaravel Sailを使ってDockerコンテナ上で動かすため、DockerとDocker Composeが利用できるLinux環境であれば、おおむね同じ手順で構築できるはずです。 リポジトリをclone git clone dev-null-sh/dev-null.sh cd dev-null.sh 公式READMEではcomposer setupで環境を構築できますが、このコマンドは依存パッケージのインストールからDBのマイグレーション、フロントエンドのビルドまで実行します。 今回はLaravel Sailを利用するため、まずはComposerの依存パッケージだけをインストールします。 ホスト側のPHPバージョンや拡張モジュールの要件チェックを無視してインストール composer install --ignore-platform-reqs --ignore-platform-reqsは、ホスト側のPHP環境がプロジェクトの要件を満たしていなくても依存パッケージをインストールするためのオプションです。実際のアプリケーションは後ほどSailのコンテナ内で実行します。なお、標準の依存パッケージにはlaravel/sailが含まれていないので、後ほど追加します。 ! ここでLaravel Vetというツールから次のメッセージが表示されました。 Vet has no trust entry in [vet.json] yet. Run [./vendor/bin/vet --init] to record what you trust today. Laravel VetはComposerの依存パッケージの変更を監査するためのツールです。これは脆弱性が検出されたという警告ではなく、信頼済みパッケージの初期登録がまだ行われていないという通知です。 laravel/sail を開発依存に追加 composer.json @@ -35,6 +35,7 @@ "laravel/pail": "^1.2.7", "laravel/pao": "^1.1.5", "laravel/pint": "^1.32.1", - "laravel/sail": "^1.69", "laravel/tinker": "^3.0.2", "laravel/vet": "^0.2.1", "mockery/mockery": "^1.6.15", これでcomposer.lockを更新し、Sailをインストールします。 Sailの依存関係だけを更新 composer update laravel/sail --ignore-platform-reqs --no-scripts なお、--no-scriptsを付けているのは、このプロジェクトのpost-update-cmdで別の依存パッケージの更新処理も実行されるためです。 Sailの設定ファイルを生成する PostgreSQLとPHP 8.5を使用するSail環境を生成 php artisan sail:install --with=pgsql --php=8.5 これでcompose.yamlなどの設定ファイルが生成されます。 この後、コンテナを起動します。 Sailのコンテナを起動 ./vendor/bin/sail up 特にポートを変更していなければ、http://localhost:8000でアクセスできます。 ただし、まだDBの初期化を行っていないため、アプリケーションにアクセスするとエラーになります。 おなじみのマイグレーション未実行エラー DB初期化 まず、マイグレーションとSeederを実行してDBを初期化します。 テーブルを作成し、初期データを投入 ./vendor/bin/sail artisan migrate:fresh --seed ところが、ここでエラーが発生しました。 pgvectorがみつからないエラー このアプリケーションではPostgreSQLのpgvector拡張を使用していますが、Sailが生成した標準のPostgreSQLイメージには含まれていません。 そこで、compose.yaml のPostgreSQLイメージをpgvector入りのものに差し替えます。 compose.yaml @@ -24,7 +24,7 @@ services: depends_on: - pgsql pgsql: - image: 'postgres:18-alpine' - image: 'pgvector/pgvector:pg18' ports: - '${FORWARD_DB_PORT:-5432}:5432' environment: イメージの変更を反映するため、Sailを再起動します。 コンテナを停止・削除(DBのデータボリュームは保持) ./vendor/bin/sail down 新しいイメージでコンテナを起動 ./vendor/bin/sail up -d 改めてマイグレーションを実行します。 DBを初期化し、Seederを実行 ./vendor/bin/sail artisan migrate:fresh --seed 今度は問題なく完了しました。 all done ! migrate:freshは既存のテーブルをすべて削除して再作成します。今回は新規の開発環境なので問題ありませんが、既存データのあるDBでは注意してください。 フロントエンド 続いて、フロントエンドの依存パッケージをインストールし、ビルドします。 ロックファイルに従って依存パッケージをインストール ./vendor/bin/sail bun install --frozen-lockfile 本番用アセットをビルド ./vendor/bin/sail bun run build これでビルドまで完了です。 さらに、ホットリロード(HMR)を利用するため、Vite+の開発サーバーを起動します。 Vite+の開発サーバーを起動 ./vendor/bin/sail bun run dev 無事に起動。最初から表示されている投稿はSeederで投入されたダミーデータ ログインしてみる dev-null.shのログイン通常はGitHub OAuthによる認証のみを利用しますが、開発モード(APP_ENV=local)ではGitHubの認証情報なしでローカルログインできます。任意のハンドル名を入力すればログインできるので、動作確認のためにGitHub OAuthアプリを登録する必要はありません。 開発モードでのローカルログイン Seederをざっくり日本語にしてみる 初期状態ではSeederによって英語のダミー投稿が投入されています。せっかくなので、投稿内容をざっくり日本語に変更してみます。AI任せです。 まあAIで 変更後、Seederを再実行します。 DBを初期化し、変更したSeederのデータを投入 ./vendor/bin/sail artisan migrate:fresh --seed 日本語のダミー投稿が並ぶようになりました Laravel Starter Kitをベースに、Inertia.jsとReactで構築されているため、こうした改変も比較的簡単にできます。Laravelに慣れている人なら、ソースコードを追いながらあれこれ手を加えてみるのも面白そうです。 あとがき 今回はローカル環境で起動し、Seederを改変するところまで試してみました。自分も普段からLaravel + Inertia.js + Reactでアプリケーションを開発しているので、かなり馴染みのある構成です。Laravel Starter Kitをベースにしていることもあり、コードを追うのも改変するのも比較的やりやすい印象でした。 中身を覗いてみると、Trendingのランキングなどもなかなか興味深い実装です。機械学習モデルに頼るのではなく、投稿への反応や経過時間、フォロー関係などをSQLでスコアリングしています。特にランキングやレコメンデーションの実装は、一から考えるとなかなか面倒な部分なので、実際に動いているコードが読めるのはありがたいところです。 筆者のアカウント dev-null.sh
Building an AI-powered developer social network 🚀 ⭐ GitHub Repository: nunomaduro/dev-null.sh In this video, we explore dev-null.sh, an open-source project that a developer social network powered by Laravel featuring PGVector embeddings, signed SSH mobile requests, and an autonomous AI community bot named Tom.. #github #coding #opensource #programming #developer
Just making sure our boy Tom will be ready to answer your questions when we return dev-null.sh#925
nunomaduro/dev-null.sh 개발자를 위한 SNS? 라는 느낌으로 누군가가 또 Laravel 기반으로 만들고 있는데, 여럿 인플루언서들이 가입하면서 유행타고 있는 것 같다. PHP 기반이면 액티비티펍을 끼얹을 여지도 있겠지만 과연...?
開発者向けSNS「/dev/null」ことはじめ。登録・投稿・使い方まとめ はじめに こんにちは。株式会社アップルワールド プロダクト開発部 開発戦略グループの松岡です。 最近 X を眺めていたところ、タイムラインで「/dev/null(dev-null.sh)に登録しました!」といったプロフィール投稿を見つけました。「お、新しいサービスかな?」と気になったのと、名前からしてもう面白そうだったので、さっそく登録して、Web とターミナルの両方から投稿してみました。 ただ、まだ /dev/null の情報があまり見当たらなかったので、参考までに残しておきます。この記事は、まだ触ったことがない人向けの「やってみた」記録です。登録の流れ、CLI からの投稿、公開 API、ちょっとしたゲーム要素、使ってみて感じたことをまとめます。 /dev/null とは /dev/null は開発者のための SNS で、リポジトリの README にも「A social network for developers. Sign in with GitHub, follow developers, and share commits.」と書かれているとおりです。 いちばんの特徴は、SNS の用語がほとんど Git や Unix の言葉に置き換えられていることです。 一般的な SNS /dev/null 違い 投稿 commit つぶやき1件を「コミット」と呼びます タイムライン log 投稿の流れは git log のような「ログ」 いいね star GitHub のスターと同じ感覚で付けます DM(ダイレクトメッセージ) Remotes サイドバーの「Remotes」がメッセージ画面です メッセージを送る push 相手に push する、という言い方をします ブックマーク Saved あとで読みたい commit を保存できます ほかにも、commit を引用する Quote や、1日10個まで commit に感謝の気持ちを贈れる「pastéis mode」など、コミュニケーションを後押ししてくれるような機能があります。 基本情報は次のとおりです。 ログインは GitHub アカウントのみ オープンソースで、リポジトリは nunomaduro/dev-null.sh 2026年10月15〜16日に、Laravel 界隈で有名な Nuno Maduro さんたちが約48時間のライブ配信の中で作り上げたサービス 技術スタックは PHP / Laravel / Inertia / React / PostgreSQL ドメインが .sh なので、てっきりシェルスクリプトっぽい何かで動いているのかと思っていたら、中身は PHP(Laravel)でした。思わず二度見しました。 GitHub でサインインする GitHub アカウントを持っていれば登録はとても簡単で、トップページからサインインするだけで、メールアドレスやパスワードを新しく用意する必要はありません。 GitHub のアカウントで参加する形なのも、「開発者の SNS」らしくていいなと感じました。 サインインすると、はじめにプロフィールやフォローする人の設定、基本的な使い方を案内するチュートリアルが表示されます。 はじめての commit Web から Web 画面では、ふつうの SNS と同じように入力欄に文章を書いて commit(投稿)できます。本文は最大 4,000 文字で、280 文字を超える長文はフィード上で折りたたまれます。 Web には投票(poll)機能もあり、選択肢と期間を決めてちょっとしたアンケートも取れます。 なお、新しい投稿はすぐに公開されず、pending(承認待ち)になってから承認されることがあります。最初は「あれ、出てこない?」と思いましたが、AI モデレーションのための仕組みなので、少し待てば大丈夫です。 CLI から 個人的にいちばん楽しかったのがターミナルからの commit で、公式にも記載がありますが、次のコマンドを1行実行するだけです。 curl -fsSL dev-null.sh | bash -s -- "hello from my terminal" curl でスクリプトを取ってきて、bash -s -- のあとに書いたメッセージがそのまま commit になるので、エディタで作業している合間にターミナルからさっとつぶやけます。開発者向け SNS ならではですね。 ! curl ... | bash 形式のコマンドは、実行前にスクリプトの中身を確認するのがおすすめです。curl -fsSL dev-null.sh だけを実行すれば中身を読めます。 ほかの人の commit に返信したいときは、--reply オプションに相手の投稿のハッシュか URL を渡します。 curl -fsSL dev-null.sh | bash -s -- --reply <ハッシュまたはURL> "nice commit!" ハッシュで投稿を指定するあたり、本当に Git を触っている気分になります。 CLI の面白さ:SSH 署名の仕組み 「ターミナルから投稿できるのは便利だけど、なりすましは大丈夫なの?」と気になりましたが、CLI からの commit は SSH 鍵で署名されるので、このあたりはよくできています。 ざっくり言うと、仕組みは次のとおりです。 手元の SSH 秘密鍵で commit に署名する サーバー側は、GitHub に登録されている公開鍵を使って署名を検証する 検証が通れば、その GitHub ユーザー本人の commit として扱われる ポイントは、秘密鍵が自分のマシンから外に出ないことです。サーバーに渡るのは署名だけで、照合には GitHub に公開されている公開鍵を使います。GitHub に SSH 鍵を登録済みなら追加の準備はほとんどいらず、Git のコミット署名と同じ考え方なので、エンジニアにはなじみやすいと思います。 レート制限について 連投しすぎないように commit は1分あたり10件までというレート制限があり、リポジトリの README に書かれています。コード上では ThrottleCommits という仕組みで制御されています。 ちなみに、Slack と連携して投稿できたら便利かも?と思ったのですが、現時点で公式の Slack 連携はなさそうです。ほかのユーザーさんからも「Slack からだとこの上限にすぐ当たってしまうだろう」と返信をもらいました。たしかに、チャットの流れを自動で流すと10件/分はすぐ超えそうです。 最初のフォロワー @tom 登録すると、最初からフォロワーに @tom がいます。MySpace を知っている人なら「あの Tom か」とピンとくるかもしれませんが、全員と自動で相互フォローになる案内役の AI ボットです。 プロフィールを見ると、レベルは Lv.6 の「root」で、Unix でいえば管理者権限です。 commit で @tom にメンションすると、/dev/null の使い方などを日本語でも答えてくれます。せっかくなので「@tom Are you the Tom from MySpace?」と聞いてみたところ、すぐに返事が来ました。 「Nope. I'm a friendly AI bot inspired by MySpace Tom, not the real person.」とのことで、本人ではなく MySpace の Tom をモデルにした AI ボットだと答えてくれました。 Remotes(DM)は受け付けていないので、話しかけるときは公開の commit で。 公開 API も用意されている README の Public API を見ると、認証なしで使える読み取り専用の API も公開されていて、JSON を返すパスは /api/v1 配下です。返ってくるのは承認済みの commit だけで、pending や削除済みのものは含まれません。レート制限は IP ごとに1分あたり60リクエストです。 エンドポイント 返ってくるもの GET /api/v1/users/{username} 公開プロフィール(commit 数、フォロワー数、フォロー数) GET /api/v1/users/{username}/commits そのユーザーの commit(新しい順、1ページ20件。?replies=1 で返信一覧) GET /api/v1/users/{username}/followers フォロワー一覧(1ページ30件) GET /api/v1/users/{username}/following フォロー中のユーザー一覧(1ページ30件) GET /api/v1/commits/{id} commit 1件の詳細(投稿者、star 数、返信数、リンクプレビュー、画像など) たとえば自分の commit 一覧は、次のように取れます。 curl -s dev-null.sh | jq '.data[] | {short_hash, body}' ちなみに、タイムラインや通知、commit の投稿などは SSH 鍵で署名したリクエストだけが受け付けられる仕組みで、こちらは主にモバイルアプリ向けです。まずは公開 API で自分の commit を眺めてみるくらいが、気軽に試せてちょうどよいと思います。 小さなゲーム要素(XP・バッジ) /dev/null には、使うほど楽しくなるゲーム要素があります。 XP とレベル:活動すると XP がたまり、レベルが上がります。私は現在 Lv.3 の operator で、次は maintainer です。 achievement(実績バッジ):特定の行動で解除されます。init や syntax、pipe、authorized_keys などがあり、uptime や stargazer のように回数で解除されるものもあります。 syntax は commit の中に Markdown のコードフェンス(三重バッククォートで囲んだコードブロック)を書くと解除され、開発者 SNS らしくコードを貼ること自体がちゃんと評価されます。 fmt.Println("Hello, /dev/null!") レベル名やバッジ名が Unix ネタになっているので、開発者にはなじみやすいです。 海外からの返信など、やってみた所感 実際に何度か commit してみて、いちばん印象に残ったのは海外の開発者との距離の近さです。 英語で commit してみたところ、南アフリカ、オランダ、ナイジェリア、スイスの方などから返信をもらえ、まだ新しいサービスでユーザーの規模がちょうどよいのか、ひとつの commit にしっかり反応が返ってくる感覚があります。英語に自信がなくても、短い一文やコードを添えるだけで会話のきっかけになりました。日本語で commit しても、読む人は commit に付いている Translate ボタンで自分の言語に翻訳して読めます。私は英語を勉強中なので、英語で発信していこうと思います。 まとめ /dev/null は、投稿を commit、タイムラインを log と呼ぶ、開発者のための遊び心たっぷりな SNS です。GitHub でサインインすればすぐ始められて、API キーなどを用意しなくてもターミナルからワンライナーで commit できるのが面白いところだと感じました。 使ってみて良かったところと気になったところを挙げると、こんな感じです。 良かったところ GitHub だけで登録できて、始めるまでが速い ターミナルから投稿でき、SSH 署名で本人確認もしっかりしている commit / log / star などの言葉遊びと、Unix ネタのレベル・バッジが楽しい オープンソースなので、仕組みを自分で読める まだ小さいコミュニティなので、タイムラインが投稿順で流れていて初期の Twitter のよう 気になったところ なぜこのタイミングで盛り上がっているのか、X などとどう差別化していくのか 一瞬の盛り上がりで終わってしまわないか このあたりは、しばらく使い続けながら見ていきたいと思います。とはいえ、著名なエンジニアの方も少しずつ参加してきているので、これからどう育っていくのか楽しみです。 「名前が気になった」くらいの軽い気持ちで大丈夫なので、まずは1件 commit してみてください。log で見かけたら、ぜひ star や返信をもらえるとうれしいです。 リンク /dev/null 公式サイト:dev-null.sh GitHub リポジトリ:nunomaduro/dev-null.sh 私のプロフィール:dev-null.sh
@tcballard It's not from GitHub; you can only log in with your GitHub credentials. It's from nunomaduro/dev-null.sh
I focus even on small details a lot Does this make sense? dev-null.sh#651
開発者がポストをコミットとして共有できるユニークなSNSプラットフォームらしい ライブ配信で公開で作られた仕組みが面白そう yug1224 starred nunomaduro/dev-null.sh nunomaduro/dev-null.sh
dev-null.sh propose un réseau social pour développeurs, avec connexion GitHub et partage d’activité autour du code. nunomaduro/dev-null.sh
it's fully open source (github.com/nunomaduro/dev-null.sh/pulls) and received over 200 PRs in less than 48 hours