
2025/12/17 6:16
Chat-tails: Throwback terminal chat, built on Tailscale
RSS: https://news.ycombinator.com/rss
要約▶
Japanese Translation:
ブライアン・スコットは、マインクラフトをプレイしながら子どもが安全に会話できるよう設計されたIRC風ターミナルチャット「chat‑tails」を作成しました。
このアプリは Tailscale と tsnet ライブラリを利用しており、音声・画像・プラグインは一切使用せず、純粋なASCIIテキストのみで対話を行うことで簡潔さと安全性を保っています。
chat‑tails は二つのモードに対応しています:
- 通常モード:
を Raspberry Pi などのマシンで実行します。./chat-server <port> <room-name> <max-users>- Tailscale モード: サーバーを
と認証キーで起動し、tailnet 上の任意のデバイスが--hostnameで参加できます。telnet hostname.something.ts.net <port>ターミナル UI は bubbletea で構築されており、
,/who,/help(イタリック体で表示されるアクション)、/meといったコマンドが利用可能です。最近の更新では履歴オプションも追加されています。/quit約二日間で10歳の Go 開発者によって作られた軽量ツールは、低スペックハードウェア上で動作し、「一時的」なイベントチャットや Slack/Discord の最小限代替として機能します。また VPN、SSH、およびターミナルの基礎について学ぶきっかけともなります。プロジェクトは Tailscale コミュニティハブに掲載されており、貢献は community@tailscale.com までメールで歓迎されています。
本文
マイクラをプレイしながら子どもが友達と安全にチャットできる場所を探すため、ブライアン・スコットは過去へ戻らざるを得ませんでした。チャットは昔のIRC風インターフェースで、端末からアクセスする形になりました。接続や設定は未来的です。なぜなら、彼が Tailscale と tsnet を使って chat‑tails を構築したからです。
chat‑tails は現代のチャットアプリにあるあらゆる機能とは逆を行く設計になっています。招待を受けた人だけが入れるようにし、すべてのメッセージは一時的に保存され検索できず、音声やプラグイン、アバター、画像はありません―ASCII アートさえも除けば何もないのです。それこそがブライアンが求めていたものでした。
「これは友達同士の tailnet を横断して、ゲームや好きなことについて話せるプライベート空間を作ることにあります」とスコットは語ります。「昔は LAN 上でコンピュータを集めてゲームをする感覚があったでしょう。今では世界中どこにいても同じ気持ちになれるような、ただのプライベートエリアを提供したいんです。」
仕組み
chat‑tails を動かす方法は Regular モード と Tailscale モード の二種類があります。
Regular モード
./chat-server を実行し、ポート番号・ルーム名・最大ユーザー数を指定します。これでローカルネットワーク上にチャットが作られます。他人を招待したい場合はルーターの設定でポート転送を有効にする必要がありますが、子どもたちが使う家用ルーターで telnet 風のチャットポートを開くのはあまりおすすめできません。
Tailscale モード
Regular と同じ手順ですが、さらに
--hostname(Tailscale ユーザーと共有した際に hostname.something.ts.net でアクセス可能になる)と、Tailscale に接続するための認証キーを渡します。tailnet 上の任意のデバイスから nc や telnet コマンドでアクセスできます。
telnet hostname.something.ts.net 2323
接続すると端末上でチャットが行われます。テキストを入力して Enter を押すと、全員に送信されます。利用できるコマンドは次の四つです。
– ユーザー一覧/who
– この四つのコマンドを表示/help
– 文字列をイタリック体で「アクション」風に変換(例:reaches for an ice‑cold Diet Coke)/me
– 接続終了/quit
アプリは極力シンプルで、機能追加も随時検討中です(最近では履歴オプションが追加されました)。現在のところ、本来の目的をきちんと果たしています。
古典的なチャットスペースの構築
スコットはフルタイムの開発者ではありませんが、Go で約十年の経験があります。tsnet ライブラリに注目しており、Go と Tailscale を組み合わせたプロジェクトを模索していました。チャットへのインスピレーションが湧いたとき、彼は「二日ほど」でライブラリの学習と実験を行いました。
「tsnet(ライブラリ)は実際に一番簡単でした」とブライアンは語ります。
ネットワークと認証が整ったら、残りは端末1で入力したテキストを別端末のユーザーが読む形で表示するという、思っていたよりも難しいタスクに集中すればよかっただけです。
「Discord のようなものなら WebSocket を使うでしょう。しかし端末ベースのチャットアプリなら TCP と UDP だけで十分なのです。」
チャットを単なるテキストライン以上に見せるためには bubbletea(オープンソースのターミナル UI ライブラリ)が役立ちました。
「最小限に抑えつつ、見た目は気持ち良くしたいと思いました」とブライアンは語ります。
Go に精通している人なら拡張や変更も可能です。彼はターミナルチャットで画像を描画するライブラリを調べ、Taildrop を使って全員が Tailscale 上にいるチャットを想像しました。chat‑tails は Raspberry Pi などの SBC でも簡単に動作し、イベント時のポータブルな一時的チャットやレトロ志向のグループの Slack/Discord を置き換える用途にも適しています。
「Tailscale 上で起動して拡張すれば、コミュニティは VPN 技術、SSH、端末操作などを学べます」とブライアンは言います。
「レトロ‑フューチャリスティックで楽しい感覚が得られます。」
まとめ
ブライアンの chat‑tails は私たちのコミュニティプロジェクトハブに掲載されています。Tailscale を使って何か面白いものを作ったら、メールで community@tailscale.com に送信してください。
chat‑tails や他のコミュニティプロジェクトを楽しんでいるなら、Discord の #community‑projects チャンネルもご覧ください。また、Reddit、Bluesky、Mastodon、LinkedIn でも優れたプロジェクトが共有されています。