
2026/09/28 19:30
Parley:単なるIRCで通じる分散型の連合チャット
RSS: https://news.ycombinator.com/rss
要約▶
Japanese Translation:
Parley は、IRC を基盤とした連合型チャットネットワークであり、プラグイン不要の標準クライアントを用いてインスタンス間での通信を可能にします。これは、E メールのようなアイデンティティをニックネームに変換する仕組みと、DNS SRV レコードおよび
/.well-known JSON ドキュメント(Ed25519 公開鍵を含む)を利用して、接続発見、アイデンティティ認証、署名確認を実現することにより達成されています。システムは、インスタンス同士がグシッププロトコルを通じてピア情報を自動的に交換し、手動構成なしで動的なクラスターを形成する分散メッシュとして動作します。Parley は現在、ロータリー SQLite データストレージ per インスタンスを持ち、OpenID Connect などのモダンな認証方式をサポートする機能性のある概念実証段階ですが、エンドツーエンド暗号化、ユーザ固有の鍵、チャネル運営者/モード、Web ベースのクライアント、/nick などの伝統的な IRC コマンドといった重要なプロダクション準備状態の機能を欠いています。また、モデレーションはチャネル所有権ではなくブロックリストに依存しています。WeeChat や irssi などのツールに対するセットアップが簡略化されるという利点がある一方で、セキュリティ、機能、データ整合性に関するこれらの現行の制限により、安全なエンタープライズ展開への即時適性は限られています。本文
Parley: 連邦化された非集中型チャットネットワーク
Parley は、中央管理者を持たない、標準的な IRC 言語を使用する分散型のチャットネットワークです。各ユーザーやチームが独自ドメイン上の小型インスタンスを運用し、DNS とアイデンティティドキュメントを通じて互いを見出し、署名されたメッセージを交換することで、プラグインなしで通常の IRC クライアント(irssi, WeeChat, Textual など)から連邦化されたネットワークとして機能します。
基本概念と仕組み
アーキテクチャ
- 非集中型構造: 中央サーバーではなく、各ドメイン (
,alice@foo.com
など) が独立したインスタンスを運用します。bob@bar.com - アイデンティティ管理: メールアドレス形式を採用し、各インスタンスが互いを発見・通信します。
- 現在のステータス: 実用的な概念検証(PoC)段階です。設計全体のエンドツーエンド動作は確認済みですが、完全に強化されているわけではありません。
クライアントとの連携
既存の IRC クライアントで動作し、以下の機能を拡張しています:
主要機能
- 標準 IRC プロトコル: PASS または SASL PLAIN でログイン可能な標準 IRC 形式を前面に配置。IRCv3(サーバー時刻、メッセージタグ、マルチプレキシングなど)をサポート。
- タイプインジケーター: TAGMSG を介してクライアント固有のタグを連邦間でリレー。履歴から復帰しても
が正しく機能し、ドラフトや複数行テキストを 1 つのメッセージとして扱えます。+reply - スクロールバック (Scrollback): CHATHISTORY でチャンネルと DM をページネート可能。参加時に見られなかった内容を再生(リプレイ)できます。スマホで「既読」にマークするとデスクトップ表示も同期され、再開位置を自動検知します。
- アカウント管理: 設定ファイルではなくインスタンスデータディレクトリ内に保存。
、管理ページ、HTTP API、または OpenID Connect (SSO) で作成・管理可能。ボットも「ボットロール」を持つアカウントとして扱われます。parleyctl - 発見機能: DNS (
) と WKID による自動ピアリング。Salty IM の仕組みと同様のアプローチを採用。_parley._tcp.<domain> - 署名された HTTP 連邦化 (Federation): JSON ドキュメントに ed25519 署名を付与し、相互検証可能な通信を実現。開放型(Open)フェデレーションに対応。
- 自動ピアリング: 新しいドメインとのメッセージ送信時、インスタンス間が自動的にリンクされ、設定なしでメッシュネットワーク形成。
チャネルとモデレーション
- チャンネル種類:
(グローバル): 全連携インスタンスに複製される共有空間。トピックやオペレーター機能はありません。#dev
(ローカル): インスタンス内限定のチャンネル。外部からは不可視であり、トピック管理用の場所です。¬es
- モデレーション方針: チャンネル所有権がないため、「追い出し」は行えません。代わりにマスクベースのブロックリスト (
) を使用します。/ban- 個人制限:
/ban quark@example.com - インスタンス全体制限:
/ban *!*@example.com
- 個人制限:
アドレスと履歴
- IRC アイデンティティ: ユーザーニックネームはホスト名なしのローカル部分のみを使用(例:
)。表示はalice
となり、WHOIS コマンドなどでドキュメントにアクセス可能です。alice!alice@foo.com - 永続的履歴: チャンネルログは SQLite に保存され、全文インデックス付き検索が可能。ピアが復旧すると不足した履歴を自動プルします。
設定と実装ガイド
インスタンスの起動(Quick Start)
本番環境では以下の要件を満たす必要があります:
- 実際のドメインと DNS:
SRV レコードをセットアップ。_parley._tcp - TLS/HTTPS: リバースプロキシで TLS を終端し、ポート
で HTTPS を提供。8443 - IRC プロキシ化: クライアントへの IRC 接続 (
) は TLS 経由とし、前面で TLS を終端する設定が必要。6697 - SRV レコード: 他インスタンスの発見用として必須(欠落すると well-known ドキュメントにフォールバック)。
Docker Compose の基本構成
# docker-compose.example.yml の出発点 version: '3' services: parley: image: prologic/parley ports: - "8443:8443" - "6697:6697" # IRC ポート(プロキシ化済みの場合) volumes: - ./data:/data environment: - PARLEY_DOMAIN=chat.example.com - PARLEY_DATA_DIR=/data # TLS 証明書や認証設定を追加
アカウント作成
- 管理者トークンがない場合、ブラウザで
URL を表示して初期管理者を作成。/setup - OpenID Connect (SSO) またはリバースプロキシヘッダーでのログインも対応。
- ユーザーは設定ページから IRC トークンを発行可能。
コマンドラインツール: parleyctl
: SRV レコード、well-known ドキュメント、TLS ポートなどをプローブし、問題を報告(トークン不要)。parleyctl check
: ピアリング状況の確認と制御。parleyctl peers
: 設定ファイルからの一括適用(parleyctl settings import
-> データベース移行)。config.json
重要設定項目一覧
パラメータは環境変数 (
PARLEY_...) またはフラグ (-flag) で指定します。データベース保存後の変更は再起動不要です。
| フラグ/設定項目 | 環境変数対応 | デフォルト | 備考 |
|---|---|---|---|
| PARLEY_DOMAIN | -domain | 必須 | アイデンティティドメイン |
| PARLEY_DATA_DIR | -data | ./data | 鍵、DB、ピア情報の保存先 |
| PARLEY_IRC_LISTEN | -irc | :6667 | IRC リスナー(平文) |
| PARLEY_HTTP_LISTEN | -http | :8443 | Web UI / Discover リスナー |
| PARLEY_ADMIN_TOKEN | -admin-token | オフ | 管理 API の認証トークン |
| PARLEY_TRUSTED_PROXIES | - (ヘッダー) | オフ | リバースプロキシへの対応設定 |
プロキシとアドレス制限の設定注意
- TCP プロキシ背後:
で PROXY ヘッダーを追加し、クライアントアドレスを正確に把握する必要があります。irc_proxies- 設定変更時は同時に変更し、元に戻せる準備を。
: アドレスごとの接続制限を有効にするにはオン(デフォルトオフ)。max_conns_per_addr
- ウェブリスナー:
で X-Forwarded-For を信頼。http_proxies
ではなく、auth.trusted_headers.proxies
を使用してください。PARLEY_TRUSTED_PROXIES
アップグレードとメンテナンス
バージョン履歴と注意点
- v0.6.0: アカウント別のメッセージレート制限導入(デフォルト:1 秒あたり 1 通)。旧動作に戻すには
を設定。message_rate=0 - v0.5.0:
- ユーザーID表記変更 (
)。alice:foo.com
デフォルト値が 20→50 に増大。history_replay
がチャンネルメンバー情報を公開しなくなった(セキュリティ強化)。/api/v1/status
- ユーザーID表記変更 (
- v0.4.x 以前:
パラメータは廃止され、データ移行が必要になる場合があります。-user
データバックアップと鍵の管理
- 重要:
は復元不可能。このファイルを失うと、信頼関係が切断され修復には全ピアからの再信頼が必要です。必ずバックアップしてください。<data_dir>/identity.key - 鍵の更新: 漏洩時や破棄時は、新しい鍵ペアを生成して
を再起動するだけで自動回復します。古い鍵はparleyd
ファイルとして保持されます。.bak
制限事項とロードマップ
現在の制限
- 暗号化: インスタンスレベルの鍵のみ。ユーザー別鍵または E2EE (Salty IM 風) は将来的に追加予定。
- チャンネル機能: モードやオペレーター機能は設計上存在しません(グローバルチャンネルは所有者不在)。
- ニックネーム: アカウントにバインドされており、
コマンドは使用できません。/nick - クライアント: 専用の Web チャットクライアントは用意されていません(既存 IRC クライアントが対象)。
今後の計画(ロードマップ)
- WKID を介したユーザー別鍵公開と E2EE DM の実装。
- IRCv3 機能の追加(メッセージ改ざん防止、ユーザーメタデータレジストリの充実など)。
ライセンス
MIT ライセンスを適用しています。詳細は
LICENSE ファイルを参照してください。