HN ランチ:Rivet(YC W23)– S3 でエージェントのスケーリングとオーケストレーション

2026/11/06 2:17

HN ランチ:Rivet(YC W23)– S3 でエージェントのスケーリングとオーケストレーション

RSS: https://news.ycombinator.com/rss

要約▶

Japanese Translation:

Rivet は、アクターモデルに基づき S3 上の SQLite を活用して SSD 速度で動作する、高密度かつスケーラブルなエージェントワークロード向けオーケストレーターです。高価なサンドボックスや独自ランタイム(マイクロVM など)を必要とせず、Node.js、Bun、Rust などのネイティブフレームワーク上で直接動作することで実現します。このアーキテクチャにより、起動時間は p99 で 4.99 ms に劇的に短縮され、メモリ使用量は数百メガバイトからアクターあたりわずか 72 KB に削減されます。アイドル状態のプロセスをハイバーネーション化し、ノードリソースを共有することで、単一のサーバー上で数十万のアクターをサポートし、従来の複製 SSD ストレージアプローチと比較してコストは約 10.4 倍低減します。プラットフォームは、自己管理型コンテナ(Docker/Kubernetes)および BYOC セットアップから、AWS、GCP、Azure 上の完全管理クラウドサービスまで、柔軟なデプロイオプションを提供します。RivetKit SDKs、Pegboard スケジューラー、Gasoline エンジン、Guard プロキシ、Epoxy ストアを含む包括的なコンポーネントエコシステムを土台に、複雑な仮想化要件を簡素化すると同時に、Apache 2.0 ライセンス下でエンタープライズ対応の柔軟性を備えています。

本文

Rivet Actors:高速・高密度・拡張可能なオーケストレーション

S3 を基盤とし、SSD の速度で動作します。

  • 冷たい開始(Cold Start)の p99 latency が 4.99 ミリ秒
  • アクター当り 72 KB の RAM
  • 数十億規模までスケーリング可能

Rivet とは?

Rivet は、アクターモデルを基盤としたエージェント型ワークロード専用のオーケストレーターです。

アクターの概要

  • 各 Rivet Actor は、メモリ上の状態を保持する長期実行プロセスです。
  • 内蔵機能:SQLite データベース、リアルタイム通信用 WebSockets、スケジューリング機能。
  • キーでアドレス指定可能(エージェント、セッション、ユーザー、テナントごとに作成)。
  • シンプルな Node.js、Bun、または Rust で動作します。

主な仕様

  • アクター当り 72 KB
    • 各アクターがサンドボックスを起動するのではなくノードプロセスを共有するため、単一サーバーで数十万〜数百万のアクターをホストできます。
  • 冷たい開始(p99)4.99 ミリ秒
    • イメージのプルや VM の起動不要です。
  • S3 上の SQLite で SSD の速度を実現
    • p99 レベルでの持続性のある書き込みが 1.07 ミリ秒、読み込みが 1.36 ミリ秒。
    • レプリケーション付きの SSD ストレージと比較して約 10.4 倍低コストです。
  • アイドル時は休眠
    • アイドル状態にあるアクターはコストを発生せず、次のリクエスト時に何らかのデータ損失なく目覚めます。

バックエンドの実装例

サーバーサイド(Rivet Actor)

以下のコードでは、SQLite データベースが永続化され、マルチプレイヤー対応のためのブロードキャスト機能が実装されています。

import { actor } from "rivetkit";
import { db } from "rivetkit/db";

const agent = actor({
  // アクター当りの SQLite データベース。再起動や休眠でも状態を保持します。
  db: db({
    onMigrate: async (db) => {
      // SQLite スキーマの適用
      await db.execute(`CREATE TABLE IF NOT EXISTS messages (role TEXT, content TEXT)`);
    },
  }),

  actions: {
    chat: async (c, text: string) => {
      // メッセージを永続化して保存
      await c.db.execute("INSERT INTO messages VALUES (?, ?)", "user", text);
      const messages = await c.db.execute("SELECT role, content FROM messages");

      const response = streamText({ model: openai("gpt-5"), messages });

      // マルチプレイヤー対応のため、すべての接続クライアントへトークンをストリーム配信
      for await (const delta of response.textStream) {
        c.broadcast("token", delta);
      }

      // レスポンスを永続化して保存
      await c.db.execute("INSERT INTO messages VALUES (?, ?)", "assistant", await response.text);
    },
  },
});

クライアント(フロントエンドまたはバックエンド)

// アクターへ接続する
const agent = client.agent.getOrCreate("agent-123").connect();

// リアルタイムイベントの受信を待機
agent.on("token", delta => process.stdout.write(delta));

// アクターのアクションを実行
await agent.chat("strawberry に含まれる 'r' は何個ありますか?");

始め方

コーディングエージェントとの連携

Claude Code、Cursor、Codex、または任意のコーディングエージェントに以下のプロンプトを貼り付けてください。

「

npx skills add rivet-dev/skills
を実行し、作成したい内容を聞いて実行します。その後、ローカルで動作させるように指示してください。」

新規プロジェクトから開始

Rivet が提供するすべての製品はアクターであり、同じ制御平面によってスケジューリングされます。

  • アクター:状態、リアルタイム通信、スケジューリング機能を内蔵した長期実行プロセスです。
  • エージェント:各エージェント当り永続的なプロセスを持ち、再起動後もメモリ上の情報を保持します。
  • ワークフロー:最初からやり直すのではなく、再生されるマルチステップオペレーションです。
  • agentOS:エージェントが作成したコードを安全に実行し、ネットワークアクセス、ファイルシステムアクセス、リソース制限について細粒度の制御を行う環境です。
  • ダイナミックアプリ(プレビュー):生成された瞬間にデプロイされ、ユーザー当りの専用バックエンドを提供します。

対応しているユースケース

Rivet はエージェントに必要な機能すべてに対応しています。

  • コーディングエージェント
    • 各エージェント当り 1 つのアクターを持ち、永続的なプロセスと状態を保持し、再起動後も情報を保持します。
  • エージェントアプリビルダー
    • 生成された各バックエンドは自身のアクターとしてデプロイされ、ゼロにスケーリング可能です。
  • VPC 内でのエージェント動作
    • データベースや API に隣接してエージェントを実行し、データをクラウド外に出すことはありません。
  • リアルタイムアプリ
    • ドキュメント、ルーム、チャンネル当り 1 つのアクターを持ち、すべてのクライアントへの変更をブロードキャストします。

アクターとサンドボックスの比較

指標Rivet ActorSandboxed (サンドボックス)
冷たい開始(p99)4.99 ミリ秒1.70 秒
インスタンス当りメモリ72.4 KB512 MiB
ストレージS3 上の SQLiteサンドボックス当りデータディスク
ストレージコスト10.4 倍安価レプリケーション付き SSD

ベンチマーク詳細と方法論:

  • Rivet の数値は、Rivet 3.0.3 で実行された「Rivet Actors vs Cloudflare Durable Objects」の公開ベンチマークからのものです。レポジトリには生のサンプルデータと再現スクリプトが含まれています。
  • サンドボックスの数値は、公式ドキュメントに定義されているデフォルトメモリ配分とサードパーティによる冷たい開始ベンチマークから得られています。
  • ストレージコストは AWS のリストプライスに基づいた S3 Standard と Amazon EBS gp3 の 3 コピーの比較です。
  • ソース、日付、および詳細な方法は rivet.dev/docs/benchmarking を参照してください。

機能

  • フォールトトレランス:ノードがダウンしても、アクターは状態を保持したまま他へ移動します。
  • HTTP および WebSocket ネットワーキング:HTTP でアクターを呼び出したり、リアルタイムの WebSocket コネクションを維持したりできます。
  • エンドツーエンド型安全性:バックエンドとフロントエンド(React)向けの型付けされたクライアントとフックを提供します。
  • Cron とスケジューリング:スケジュールまたはアクターが自分で設定した時刻に合わせて目覚めます。
  • アクター間の呼び出し:クラスター内のアクターはキーを通じて互いに呼び出せます。
  • OpenTelemetry:OTel 形式のトレース、メトリクス、ログを提供します。

デプロイオプション

すべてのオプションで、ローカル開発から本番環境まで同じ制御平面が動作します。

オプション説明スタートガイド
ローカルおよびセルフホスト開発中はローカルで実行し、本番環境では Docker、Kubernetes、または VM で制御平面を実行します。唯一の依存関係は S3 です。セルフホスティングドキュメント
Rivet CloudAWS または GCP の任意のリージョンで完全に管理された専用クラスター。ノードを Rivet Cloud に実装するか、自身のもので提供できます。ダッシュボード
BYOC (Bring Your Own Cloud)制御平面が AWS、GCP、または Azure の自社 VPC 内で実行され、Rivet が完全に管理します。データはクラウドを離れません。BYOC ドキュメント

既に利用しているツールとも連携可能

  • 型付けされた SDK:バックエンドおよびフロントエンド(React フック)向け。
  • ランタイム互換性:カスタムランタイム不要でネイティブ Node.js および Bun で動作するため、既存のパッケージやテスト構成を変更せずに使用できます。
  • ノードデプロイ先:Docker Compose、Kubernetes、VM、裸金属サーバー(Hetzner)、AWS ECS、Railway、Render など。
  • フレームワーク:React、Effect
  • ランタイム:Node.js、Bun、Rust
  • ツール:Vitest、OpenTelemetry、Pino、AI SDK、OpenAPI、AsyncAPI

FAQ

Q: Rivet に BYOC はありますか? A: はい。Rivet は空気の隙間(air-gapped)を含むご自身のクラウドアカウントにデプロイできます。制御平面とストレージは VPC 内を実行し、Rivet が運用します。BYOC ドキュメント をご覧ください。

Q: Rivet にクラウドサービスはありますか? A: はい。Rivet Cloud は、AWS または GCP の任意のリージョンで完全に管理された専用クラスターを提供します。アプリケーションの Docker イメージをノードとして Rivet Cloud で実行することも、自身のもので提供することもできます。

Q: Rivet をセルフホストすることは可能でしょうか? A: 可能です。Rivet は完全にセルフホスト可能です。セルフホスティングドキュメント をご覧ください。制御平面はコンテナが動作する場所であればどこでも動作し、Docker Compose、Kubernetes、VM および裸金属サーバー、Hetzner、Railway、Render、AWS ECS 向けのガイドがあります。

Q: Postgres、FoundationDB、NATS も必要でしょうか? A: 不要です。依存関係はオブジェクトストレージバケットのみで十分です:実行するデータベースもメッセージバスもないため、制御平面インスタンスはバケットを通じて互いを見つけます。Rivet は Amazon S3、Google Cloud Storage、Azure Blob Storage、MinIO、Cloudflare R2、Hetzner Object Storage などの S3 互換ストアに対応します。1 マシンでのテストにはローカルファイルシステムバックエンドも利用可能です。

Q: Rivet はオープンソースですか? A: はい。Apache 2.0 ライセンスの下でオープンソースです。ご覧いただいているものがそれです。

Q: Rivet とサンドボックスはどのように異なりますか? A: サンドボックスは各エージェント当り VM やコンテナを起動するため、起動に時間がかかり、大半の時間はアイドル状態です。一方、Rivet Actorは共有ノードプロセス内で動作し、**72 KB のメモリと 4.99 ミリ秒(p99)**での高速起動を実現します。これに対し、サンドボックスは 512 MiB と 1.70 秒かかります。また、アイドル時は休止状態に落ちます。エージェントが作成した非信頼のコードを実行するには agentOS をご使用ください。

Q: Rivet は Cloudflare Durable Objects とどう異なりますか? A: Rivet は Cloudflare Durable Objects のオープンソース代替品として頻繁に使用され、セルフホストとスケーリングが容易です。Durable Objects の多くの制約も解消されています:

  • 128 MB のメモリ制限なし
  • SQLite の 10 GB リミットではなく無限のストレージ
  • アクターのランダムな驱逐(eviction)なし
  • 実行環境を制御できること(アクターはカスタムランタイムではなくバニラ Node.js または Bun で動作するため)

さらに、接続ハンドリング、イベントブロードキャスト、永続的なスケジューリングと Cron、完全な Vitest サポート、ドレイン用のライフサイクルフック、アクターアップグレードの制御などを追加しています。Cloudflare Durable Objects 比較 をご覧ください。

Q: Rivet はカスタム V8 ランタイムを使用しますか? A: いいえ。Rivet はネイティブ Node.js および Bun で動作するため、既存のパッケージやツールの構成を変更せずに使用できます。

Q: Rivet は Erlang、Akka、あるいは Orleans のようなものですか? A: Rivet はバーチャルアクターパターンを実装しており、Orleans に最も近いです。ただし、現代のワークロードが必要な機能に焦点を当てています:シンプルな JSON ストアではなくSQLite の永続性保存、および現代的なランタイムへの対応です。

Q: Rivet はマイクロ VM、gVisor、あるいはネストした仮想化を必要としますか? A: 不要です。Rivet は WebSocket を介して制御平面に接続する標準的なプロセスのみが必要です。そのプロセスは Node.js、Bun、Rust、または何であっても構いません。


このレポジトリ内のプロジェクト

プロジェクト説明
RivetKit TypeScriptActor を構築するためのクライアントとサーバーライブラリ
RivetKit RustRust SDK
RivetKit PythonPython クライアント(実験的)
RivetKit SwiftSwift クライアント(実験的)
Control PlaneActor のスケジューリング、ルーティング、永続化を行う Rust 製制御平面
↳ PegboardActor スケジューリングおよびネットワーキング
↳ Gasoline永続的な実行エンジン
↳ Guardトラフィックルーティングプロキシ
↳ Epoxyマルチリージョン KV ストア(EPaxos)
DashboardActor のデバッグ用のインスペクタ
Documentationrivet.dev/actors/docs のソースコード
Examples実行可能なサンプル例

コミュニティ

  • Discord:コミュニティとのチャット
  • X (旧 Twitter):最新情報フォロー
  • Bluesky:最新情報フォロー
  • GitHub Discussions:質問を投稿
  • GitHub Issues:バグを報告
  • エンジニアと話す:ユースケースの議論

同じ日のほかのニュース

一覧に戻る →

2026/11/06 5:03

誰でも使える Kagi シーach

## Japanese Translation: 2025年11月以降、Kagi はプライバシー重視の検索エンジンから、ノートンヌーク(Notesnook)やエンテ(Ente)といったサードパーティ製サービスとの統合機能を備えた包括的なエコシステムへと進化しました。主な進展には、Python 実行機能を備えた研究アシスタント向けのネイティブモバイルアプリのリリース、2026年秋における Android 版のための大幅な UI リデザイン、そして音声検索、画像貼り付け、Wolfram Alpha 連携といった高度なツールの追加が含まれます。プライバシー重視の理念を維持するために、Kagi はユーザーが AI コンポーネントを完全に無効化できる詳細な制御機能を実装するとともに、IPv6 アドレスのホワイトリスト追加やプレミアム会員向けに Claude 4.5 のような新しいモデルを追加する機能を導入し、ニュースフィードにおけるトラッキングをゼロに抑えました。コンテンツ品質に関する懸念に対処するためにも、コミュニティが低品質な AI コンテンツを報告できる「SlopStop」の起動を行いました。今後の展開としては、Ultimate 会員向けに専用モデルを提供するとともに、開発者向けの新 API を提供し、学生やプロフェッショナルに対し高精度で透明性の高い研究ツールを供与し続けています。 ## Key Points List: (ここに Stage 1 の出力を貼り付けてください)

2026/11/05 21:19

SSH ホール

## Japanese Translation: musl ベースの Linux 分布(Alpine、OpenWrt、Buildroot、Yocto など)に実装されている OpenSSH は、パスワード認証が有効化されていながら PAM が使用されていない環境におけるシステムで重大なセキュリティ欠陥を有しています。この脆弱性により、攻撃者が 256 文字を超える長さのパスワードを提供した場合、`/etc/shadow` ファイル内で `*` を設定したアカウント(例:root、LDAP ユーザーなど)に対するパスワードチェックを回避できます。この問題は、musl ライブラリの認証失敗処理に関する 2012 年の変更および、256 バイトを超える無権限な入力に対するハッシュ検証の特定の動作に起因しています。新規で既存のパスワードのないシステムには影響はありませんが、これらの分布を運用する組織は、アカウント乗っ取りの重大なリスクに直面しています。この即座の脅威に対処するためには、管理者は OpenSSH バージョン 10.6p2 にアップグレードするか、あるいは完全にパスワード認証を無効化する必要があります。なお、この脆弱性は主に PAM が利用されていない環境に影響を与えるものであり、PAM を使用している場合、標準的なハンドリングによりこの特定の攻撃ベクトルを防ぐ可能性があります。この問題に対処しないことは、以前に誤設定されたアカウントに関連した主要なインシデントと同程度の不正アクセスにつながりかねません。

2026/11/06 7:17

Claude Code がメールアドレスをウェブサイトへ送信します

## Japanese Translation: キーポイントリストは、未特定の実事件に対する複数の個人からの一連の反応から構成されています。氏名が記載されている人物には、Klughertz、Jonathan、Netkas、Sebastian Hooker、ryanlsmith、Tyler Coffman、InventorBlack、TacoDevs、Luis Diaz、Dan Avery、wei が含まれており、その他に 27 名の反応もあるとの注記があります。 ## Text to translate The Key Points List consists of a series of reactions from various individuals to an unspecified event. The named figures include Klughertz, Jonathan, Netkas, Sebastian Hooker, ryanlsmith, Tyler Coffman, InventorBlack, TacoDevs, Luis Diaz, Dan Avery, and wei, along with a note that 27 others also reacted.