耐久性のあるキュー、ストリーミング機能、パブリッシュ/サブスクライブ(Pub/Sub)、および Cron スケジューラーを、あなたの SQLite ファイルの内部に実装します。

2026/04/30 23:43

耐久性のあるキュー、ストリーミング機能、パブリッシュ/サブスクライブ(Pub/Sub)、および Cron スケジューラーを、あなたの SQLite ファイルの内部に実装します。

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

要約

Japanese Translation:

Honker は、外部メッセージブローカーを必要としないよう、耐久タスクキュー、ストリーム、パブ/サブおよび cron スケジューラを SQLite ファイル内にネイティブ統合する軽量な SQLite 拡張機能です。内部バージョンカウンター(読み取り ~3µs)をポーリングすることで高価なファイルウォッチャーやリスナーごとのクエリに依存せず、サブミリ秒のレイテンシを実現し、アイドル時のコストはデータベースごとに約 1ms あたり軽量化された SELECT 1 回程度です。アーキテクチャにより、キューロジックをビジネスデータと緊密に結合するため、

INSERT INTO orders
queue.enqueue()
が同一トランザクション内で原子コミットされ、ロールバックが発生した場合はキューイングタスクおよび関連するデータ行の双方が自動的にクリーンアップされます。高い同時処理能力に対応するために、単一のポーラースレッドがサブスクライバーにウェイクシグナルを扇形(ファン)で送信し、リスナー数の拡張が可能であり、データベース負荷を増やさず、ライターロック競合を引き起こしません。Python、Node、Rust、Go、Ruby、Bun、Elixir の 7 つの主要言語に加え、C++ および SQL をサポートするため、異なるスタック間で統一されたオンディスクフォーマットを共有でき、デュアル書き込みシステムの複雑性とコストを回避できます。Postgres 風の NOTIFY/LISTEN セマンティクスを実装し、M シリーズ搭載ラップトップでのクロスプロセスウェイクレイテンシは p50 で ~0.7ms です。
q.claim
による非同期反復または Huey スタイルのデコレーター(
@q.task
)など、柔軟な消費パターンを提供します。実用採用が拡大しており、Bluesky の PDS、Fly の LiteFS、Turso などの主要プロジェクトで生产環境に統合されています。既存の PostgreSQL ユーザーには
pg-boss
Oban
などのネイティブ代替案への移行を推奨しますが、Honker は Redis + Celery スタックを追加する強力な代替手段であり、運用オーバーヘッドおよびデュアル書き込みの問題を効果的に排除します。

本文

Honker: SQLite に基づく耐障害性の高いキューと Pub/Sub

概要

耐障害性の高いメッセージキュー、ストリーム、Pub/Sub、そして Cron スケジューラー——これらすべてが、たった一つの SQLite ファイルの中に実装されています。詳細については ドキュメント をご覧くださいか、または GitHub リポジトリ をご参照ください。

Honker は、SQLite への PostgreSQL 様式の

NOTIFY
/
LISTEN
セマンティクスを追加することで、クライアントによるポーリングやデーモン/ブローカーが不要な耐障害性の高い Pub/Sub、タスクキュー、およびイベントストリームを実現します。M シリーズを搭載したノートパソコン上で実施されたテストでは、クロスプロセスの目覚め(起動)遅延は約 0.7 ms(p50)でした。

基本的なアーキテクチャ

基本的には、Honker は単なる SQLite 読み込み拡張モジュールです。

SELECT load_extension('honker_ext')
を実行可能なあらゆる言語が、同じファイルにおける同じキュー、ストリーム、通知にアクセスできます。Python、Node、Rust、Go、Ruby、Bun、Elixir のバインディングには、すべて共通のオンディスク形式を採用しており、これにより同一ストレージ上の共有が可能となります。

現在、本格的な生産環境で動作している SQLite ベースのアプリケーションには、以下のシステムが含まれています:

  • Bluesky の PDS(Personal Data Server)
  • Fly 社の LiteFS
  • Turso
  • 数週間や数日間の週末プロジェクトとして始まり、最終的に本番環境に導入されたさまざまなアプリケーション

一度、ビジネスロジックが SQLite を背後としたアプリケーションを通じて実稼働した段階では、メッセージキューが必要になります。一般的には「Redis に Celery を追加する」という回答が与えられます。確かにそれは機能しますが、これにより以下のような課題が生じます:

  • バックアップ戦略を別個に持つセカンダリなデータストアの導入
  • ビジネステーブルとキュー間でのデュアルライト(同時書き込み)の問題
  • ブローカーを運用するためのオーバーヘッド

Honker は、「SQLite が主たるデータストアである場合、キューも同じファイル内に配置されるべきだ」というアプローチをとっています。これは、

INSERT INTO orders
queue.enqueue(...)
を同一のトランザクション内でコミットすることを意味します。ロールバックが発生した場合、両者はともに破棄されます。つまり、キューは単なるテーブルの行であり、部分インデックスによって管理されています。

使用例

アトミックなエンキュー

ビジネスロジックとの書込みを原子操作として実装し、その直後にコンシューム(消費)を行います。すべては同一の

.db
ファイル内で動作しており、オンディスク形式も Python、Node、Rust、Go、Ruby、Bun、Elixir の 7 つの言語、さらに C++ および純粋な SQL エクステンションで共通しています。

Python(ホーンカー)例

import honkerdb
db = honker.open("app.db")
q = db.queue("emails")

# ビジネス書込みと同じトランザクション内でエンキュー
with db.transaction() as tx:
    tx.execute("INSERT INTO orders (id, total) VALUES (?, ?)", [42, 99])
    q.enqueue({"to": "[email protected]", "order_id": 42}, tx=tx)

# データベースへのコミットが発生した瞬間にワーカーが目覚めるため、ポーリング不要
async for job in q.claim("worker-1"):
    await send_email(job.payload)
    job.ack()

Huey 風のデコレーター(Python)

@q.task(retries=3, timeout_s=30)
def send_email(to, subject):
    ...
    return {"sent_at": time.time()}

r = send_email("[email protected]", "Hi")  # エンキューされ、TaskResult が返される
print(r.get(timeout=10))  # ワーカーが処理完了するまでブロックする

実装の詳細

目覚メカニズム(Wake Mechanism)

Honker は、毎ミリ秒ごとに SQLite の

PRAGMA data_version
をポーリングします。これは、あらゆる接続、ジャーナルモード、あるいはプロセスからコミットが発生するたびに SQLite がインクリメントする単調増加カウンタです。正確な目覚めシグナルを実現するためには、読取コストが約 3 ユーロ秒(μs)で済みます。バックグラウンドスレッドがこのティックを各購読者にブロードキャストし、
SELECT ... WHERE id > last_seen
を実行して新しい行を出力します。

データベース1 つあたり、購読者数に関係なく、必ず 1 つのポーリングスレッドが存在します。アイドル状態のコストは、データベースあたり毎ミリ秒に1回の軽量な SELECT に過ぎません:

  • ページキャッシュへの圧力なし
  • ワイターロックによる競合なし
  • カーネルレベルのファイルウォッチャーの介入なし

リスナーの数は無料拡張でスケーリングします。なぜなら、目覚めシグナルは「リスナーごとのクエリ」ではなく、「共有された1回のポーリング」であるためです。

ACID ガランティ

キュー、ストリーム、および Pub/Sub のプリミティブはすべて、拡張モジュールが管理するテーブルへの

INSERT
操作です。ビジネストランザクション内で
queue.enqueue(payload, tx=tx)
を呼び出すと、そのジョブ行もまた、それ以前に実行された
INSERT INTO orders
と同じ ACID プロパティを有します。ロールバックが発生すると、ジョブは他のすべての変更とともに破棄されます。

比較と代替手段

  • pg_notify: クロスプロセストリガの高速化を提供しますが、再試行機能や可視化(Visibility)はありません。
  • Huey: Honker の最も大きな影響を受けた対象であり、SQLite をバックエンドとする Python タスクキューです。
  • pg-boss および Oban: PostgreSQL 側における業界標準ソリューションです。すでに PostgreSQL を運用環境として利用している場合は、これらを使用することをお勧めします。

Honker は、インフラストラクチャの簡素化を最優先とする環境をターゲットにしており、既存のデータベーススタックの内部で堅牢なメッセージングを提供します。

同じ日のほかのニュース

一覧に戻る →

2026/05/01 4:40

リンクedin は、拡張機能を 6,278 つスキャンし、その結果を全てのリクエストに暗号化して含めています。

## Japanese Translation: LinkedIn は、同意なく特定の Chrome 拡張機能を検出し処罰するために、ユーザーのブラウザを秘密裏にスキャンしており、基本的なプライバシー原則違反となっています。2026 年 4 月現在、そのスキャンカタログには 6,278 の拡張機能エントリが含まれており、少なくとも 2017 年から(当初は 38 から)積極的に維持されています。各拡張機能について、LinkedIn は chrome-extension:// URL に対して fetch() リクエストを發行し、失敗した場合はエラーがログに記録され、成功した場合は無視されて解決し、1 回の訪問あたり最大 6,278 のデータポイントが発生します。~1.6 MB の minified(圧縮された)かつ部分的に暗号化された JavaScript ファイルには、ハードコードされた拡張機能 ID と特定の web_accessible_resources パスが埋め込まれています。スキャンは 2 つのモードで実行されます:Promise.allSettled() を使用した同時並列リクエストと、設定可能な遅延( 때로는 requestIdleCallback に委譲される場合もあり)を持つ順次リクエストであり、パフォーマンスへの影響を隠蔽するためです。二次的なシステム「Spectroscopy」は、ハードコードされたリストに含まれていなくても chrome-extension:// URL を参照するアクティブなインタラクションを検出するために、独立して DOM ツリーを行進します。 拡張機能のみならず、LinkedIn の APFC/DNA ファフィンガープリントでは、キャンバスフィンガープリント、WebGL レンダラー、音声処理、インストール済みフォント、画面解像度、ピクセル比率、ハードウェア並列性、デバイスメモリ、バッテリーレベル、WebRTC によるローカル IP、タイムゾーン、言語など 48 の特性を収集し、これらを開示なしに収穫します。検出された拡張機能 ID は AedEvent および SpectroscopyEvent オブジェクトにパッケージ化され、RSA 公開鍵で暗号化され、LinkedIn の li/track エンドポイントに送信され、セッション中の後続のすべての API リクエストにおいて HTTP ヘッダーとして注入されます。 これらの実践により、求職ツール、政治コンテンツ拡張機能、宗教活動ツール、障害者支援ソフトウェア、神経多様性関連アプリケーションへの執行措置が可能となり、また LinkedIn は個人の詳細(例:アクティブな求職活動)を推測し、従業員間の組織ツールおよびワークフローをマッピングすることが可能です。この暗黙的なスキャンは LinkedIn のプライバシーポリシーに開示されておらず、EU デジタル市場法に違反しており、ゲートキーパーであるマイクロソフト(2024 年に指定)に対し、サードパーティツールを許可し、差別的な執行を禁止することを求めています。browsergate.eu によって公開準備が整っている完全な裁判所文書を通じて、法律当局——バイエルン州中央サイバー犯罪捜査庁(バーミング)など——は刑事調査を開始しました。ユーザーおよび企業は今後、プライバシー侵害とセキュリティ構成の暴露に対するリスクが高まっています。

2026/05/01 1:09

PyTorch Lightning の AI トレーニングライブラリに、神話上の風化獣「シャイ・フールード」をテーマにしたマルウェアが検出された

## Japanese Translation: 人気の PyPI パッケージ「lightning」の脆弱なバージョン 2(2.6.2 および 2.6.3)が、2026 年 4 月 30 日に公開されたことが、"Shai-Hulud"というテーマのオブフスクエードされた JavaScript 負荷を含むサプライチェーン攻撃で利用されました。マルウェアはモジュールをインポートするだけで自動的に実行され、認証情報、認証トークン、環境変数、クラウドシークレット(AWS、Azure Key Vault、GCP Secret Manager)、およびローカルファイルシステムの認証情報ファイルを盗みます。また、「EveryBoiWeBuildIsaWormBoi」という特定の命名規則と、"EveryBoiWeBuildIsAWormyBoi"で始まるコミットメッセージを用いて、公開の GitHub リポジトリを毒付けようとし、さらに C2 サーバーへの HTTPS POST、二重 base64 符号化されたトークンを伴う GitHub コミット検索デッドドロップ、攻撃者による公開リポジトリの利用、および `ghs_` トークンを用いて被害者のリポジトリに直接プッシュする、4 つの並列データ流出チャネルを利用しています。 この攻撃は、悪用された npm 認証情報を使用して公開されるあらゆるパッケージに対して、14.8 MB の `setup.mjs` ドロッパー(Bun ランタイム v1.3.13 をブートストアップする)と `router_runtime.js` ファイルを注入することで、PyPI から npm へと感染を広げます。永続性を確保するために、マルウェアは人気のある開発ツール設定ファイルにフックを注入します:Claude Code の `.claude/settings.json` への "SessionStart"フックと、VS Code の `.vscode/tasks.json` への `runOn: folderOpen` タスクです。攻撃者が書込みアクセス権を持っている場合、「Formatter」という名前の悪意のある GitHub Actions ワークフローがプッシュされ、「format-results」というダウンロード可能なアーティファクトとしてシークレットがダンプされます。さらに、`_runtime/`ディレクトリや `start.py`のようなファイルに隠れたフックも注入されます。 セキュリティ企業 Semgrep は、特定の検出規則を含む緊急のアドバースを発表しており、詳細は https://semgrep.dev/orgs/-/advisories で入手できます。影響を受けたユーザーは、直ちにすべての盗まれた認証情報(GitHub トークン、クラウドキー、API キー)の再発行を行い、`.claude/`、`.vscode/`、`_runtime/`ディレクトリなどに注入された悪意のあるスクリプトを含むプロジェクトを監査し、将来のサプライチェーン侵害を防ぐために厳格な依存関係フィルタを実装する必要があります。

2026/05/01 5:33

アップル、第四半期業績を発表

## Japanese Translation: アップルは、2026 年 3 月 28 日に終了した fiscal second quarter(第 2 四半期)で史上最高益を記録し、売上高は 1,112 億ドル(前年同期比 17% 増)、一株当たり利益は 2.01 ドル(同 22% 増)となりました。この業績は、iPhone 17 シリーズ(新 iPhone 17e を含む)への特異な需要から生じた iPhone 売上高の歴代最高記録、サービスの歴史的な成長、そして M4チップ搭載 iPad Air と MacBook Neo の成功した発売によって牽引されました。稼働キャッシュフローは四半期史上最高の 280 億ドルを超え、アップルの既存基盤はすべての主要製品カテゴリーおよび地域で史上最高に達しました。このモメンタムを報いるため、アップルは一株当たり 0.27 ドルの配当(4% 増)を宣告し、2026 年 5 月 14 日に記録日(レコードデー)として 2026 年 5 月 11 日の株主に対して支払い可能にするほか、追加の 1,000 億ドル規模の自社株式買回プログラムを承認しました。アップルの利益発表会合は、2026 年 4 月 30 日午後 2 時(太平洋標準時間)にライブストリーミング開始され、約 2 週間後のリプレイも利用可能です。詳細は apple.com/investor/earnings-call で確認できます。同社は堅調な財務体質とすべての主要セグメントにおける消費者の積極的な関与を強調しました。

耐久性のあるキュー、ストリーミング機能、パブリッシュ/サブスクライブ(Pub/Sub)、および Cron スケジューラーを、あなたの SQLite ファイルの内部に実装します。 | そっか~ニュース