Show HN: Waymark – プレイヤーではなくジョブをコンパイルするワークフローエンジン

2026/11/05 23:06

Show HN: Waymark – プレイヤーではなくジョブをコンパイルするワークフローエンジン

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

要約▶

Japanese Translation:

本文の主なメッセージは、サーバーの再起動やクラッシュを超えて Postgres のみを使用して持続可能なバックグラウンドタスクを実現するように設計された Python ライブラリ「Waymark」の紹介である。Waymark は 2 つの核心となる primitives を導入しており、Actions(データベースクエリなどのキューされた分散タスク)と、一度コンパイルされて仮想マシンに組み込まれる持続可能な制御フローを表す Workflows である。システムは、呼び出しごとのリトライ、並列実行、cron ベースのスケジューリング(オプションのエグゼクター Web アプリを介して)、そして永続的なスリープといった主要な機能をサポートしており、すべてがパフォーマンス向上のため Rust コア上で動作する。インストールは標準的な Python パッケージマネージャを使用すれば簡単に行えるが、Node.js/npm/cargo を使用してソースから構築することもできる。ただし、1.0.0 以前のバージョンでは頻繁に仕様変更があり、後方互換性が保証されていないため、本番環境での使用はまだ推奨されていない。Waymark は堅牢なバックグラウンドシステムには最適だが、レイテンシ感受性の高いタスクや、1 秒あたり 1 万回のアクションを超える大規模なスケールには適していない。ドキュメントは waymark.sh で利用可能で、インストールからワークフローの記述、デプロイまでをカバーしている。

本文

Waymark: 障害に耐える堅牢なバックグラウンドタスク処理ライブラリ

Waymark は、サーバー再起動やタスククラッシュ、長時間実行ジョブといった障害にも耐えうる堅牢なバックグラウンドタスクを構築することを可能にするライブラリです。 Postgres を基盤としており、追加のインフラストラクチャを展開する必要がありません。現在は Python がサポートされていますが、今後も対応言語を追加していく予定です。

  • ドキュメント: waymark.sh
  • 特徴:
    • Python で動作する簡易なインストールからワークフロー定義・実行まで一貫性のある体験を提供
    • 再試行ポリシー、スケジュール管理、AI エージェントとの連携など高度な機能を実装

基本要素:ワークフローとアクション

Waymark は制御フロー(ワークフロー)と分散処理(アクション)の 2 つの基本要素で構成されます。

1. アクション (Action)

ネットワーク呼び出しやデータベースクエリなど、失敗しても独立して再試行すべき処理を担当します。

  • 定義: デコレータ
    @action
    を使用して単一の非同期関数として記述
  • 依存注入:
    Depends
    を使って外部サービス(DB、メール送信用クライアント等)を簡潔に注入可能

例:アクションの定義

from typing import Annotated
from waymark import Depends, action

@action
async def fetch_users(
    user_ids: list[str],
    db: Annotated[Database, Depends(get_db)],
) -> list[User]:
    return await db.get_many(User, user_ids)

@action
async def send_email(
    to: str,
    subject: str,
    emailer: Annotated[EmailClient, Depends(get_email_client)],
) -> EmailResult:
    return await emailer.send(to=to, subject=subject)

2. ワークフロー (Workflow)

アクションをオーケストレーションする堅牢な制御フローを担当します。

  • 役割: ループ、条件分岐、並列処理などのロジックを実行
  • 実行方法:
    run()
    メソッドで定義された非同期関数として記述

例:ワークフローの実装

import asyncio
from waymark import Workflow, workflow

@workflow
class WelcomeEmailWorkflow(Workflow):
    async def run(self, user_ids: list[str]) -> list[EmailResult]:
        users = await fetch_users(user_ids)
        active_users = [user for user in users if user.active]

        # 並列実行(失敗した場合は例外を返さない設定)
        results = await asyncio.gather(
            *[
                send_email(to=user.email, subject="Welcome")
                for user in active_users
            ],
            return_exceptions=False,
        )

        return results

環境設定と実行方法

1. コンフィグレーション

必要な環境変数を設定します。

export WAYMARK_DATABASE_URL=postgresql://postgres:postgres@localhost:5432/waymark
export WAYMARK_HTTP_ENABLED=true # ウェブアプリを起動 (http://localhost:24119)
uv run waymark-executor

2. ワークフローの起動

任意の Python プロセスからワークフローを実行し、Postgres にキューイングされます。

例:ユーザーにウェルカムメールを送信

async def welcome_users(user_ids: list[str]):
    await WelcomeEmailWorkflow().run(user_ids)

3. 仕組みの概要

  • アクション: 分散処理を担当(ネットワーク呼び出し、DB クエリ等)。失敗しても独立して再試行可能。
  • ワークフロー: 制御フローを担当(ループ、分岐、並列ブランチ)。重い処理は回避され、Postgres に状態が保存されるためクラッシュ後も回復可能。

機能と実装可能性

ワークフローは単なる非同期 Python コードとして記述でき、以下のような高度な制御が可能です。

呼び出しごとの再試行とタイムアウト

self.run_action(...)
を使用することで、デフォルトの失敗処理をオーバーライドできます。

from datetime import timedelta
from waymark import RetryPolicy

async def run(self, order_id: str) -> Receipt:
    return await self.run_action(
        charge_card(order_id),
        retry=RetryPolicy(attempts=5, backoff_seconds=10),
        timeout=timedelta(minutes=2),
    )

ブランチとループ

Python 標準の制御構造はそのまま動作します。

  • if/elif/else
  • for
    ループ
  • while
    ループ

例:配送済みオーダーのフィルタリング

async def run(self, order_ids: list[str]) -> list[str]:
    shipped = []
    for order_id in order_ids:
        status = await fetch_status(order_id)
        if status == "shipped":
            shipped.append(order_id)
    return shipped

並列なファンアウトと堅牢なスリープ

  • asyncio.gather
    で複数のアクションを並列実行。
  • asyncio.sleep
    でワークフローを一時的に停止し、再起動後も状態を保持可能(1 秒〜1 日の範囲で)。

例:プロフィール取得後の長期待機と推奨送信

import asyncio

async def run(self, user_id: str) -> str:
    profile, history = await asyncio.gather(
        fetch_profile(user_id),
        fetch_purchase_history(user_id),
        return_exceptions=False,
    )

    # 1 日後にフォローアップのため待機(中断・再開に対応)
    await asyncio.sleep(24 * 60 * 60)
    return await send_recommendations(profile, history)

スケジュールされたワークフロー

Cron 表現や固定間隔で自動実行できます。追加のインフラ構築不要です。

await schedule_workflow(DataSyncWorkflow, schedule_name="hourly", schedule="0 * * * *")

組み込みウェブアプリ

waymark-executor
には、すべてのワークフローインスタンスを表示する Web アプリが内蔵されています。

  • 可視化: 各インスタンスの呼び出し履歴やノードへの負荷状況を確認可能。
  • URL: デフォルト
    http://localhost:24119

フィロソフィーと設計思想

バックグラウンドジョブはフルスタックアプリケーションの基本要素(DB、バックエンド、フロントエンドの横並び)として捉えています。 これにより、ユーザーが API にブロッキングリクエストを送信するか、偶発的なクラッシュでタスクが失われるという状況を回避できます。

設計の 3 つの原則

  1. 言語との親和性: 既存の開発言語(現在は Python)で通常のコードとして制御フローが記述できること。
  2. 一貫性のある体験: ローカルでのテストとリモートでの展開において同じように動作すること。
  3. 合理的なデフォルト: パフォーマンスチューニングなしに、適度なリクエストボリュームまで拡張可能であること。

データフロー処理エンジンとしての位置づけ

  • DAG 定義の非制限: 装飾子や独自構文による制限ではなく、通常の Python コード(ループ、条件分岐)がそのまま機能します。
  • スケーラビリティの目標: 負荷パフォーマンスが最優先というわけではありませんが、アプリケーションを製品市場適合(PMF)を超えて適切にスケールできるように設計されています。

動作原理:再実行ベースではないアプローチ

Waymark は Temporal や Vercel Workflow のように「コードの再実行」を採用するのではなく、「一度のコンパイルと状態管理」を採用しています。

アプローチの違い

比較項目Temporal / Vercel WorkflowsWaymark
動作原理再実行ベース。各ステップでコードが最初から実行され、完了した部分にはキャッシュ結果が返される。一度コンパイル。ソース → 中間表現 (IR) → バイトコードへの変換を行い、コード自体は再実行されない。
コード要件決定論的。
random()
や
datetime.now()
、副作用は禁止。
パターンベース。コンパイラが状態を追跡できるため、非決定論的な関数(時間等)も明示的なアクションとして扱える。

実行フローの詳細

  1. コンパイル: 初回実行時に Python のソースコード(AST)を解析し、中間表現(IR)に変換。さらに堅牢な仮想マシン用のバイトコードへ変換される。
  2. 実行: Rust ランタイムがバイトコードを実行。進行状況は Postgres にスナップショットとして保存される。
  3. 障害からの回復: サーバーが再起動しても、Postgres の状態から正確な位置で再開する。ワークフロー定義の再実行は行わないため、非決定論的な処理でも安定動作します。

メリット:

random()
や現在時刻などのハッキングが不要。コンパイルエラーを防ぐための複雑な工夫が不要です。


使用すべきか?(適性・不適性)

✅ おすすめの場合

  • 既に Postgres とサポート言語(Python など)を使用しており、追加のフレームワーク構築を避けたい場合
  • アクションが多い非同期ロジックで、失敗時の自動再試行が必要な場合(3 者 API キャンセル等)
  • ローカル開発と本番環境で同じコードをそのまま動かしたい場合
  • 既存のユニットテストや静的解析ツールにバックグラウンドジョブのコードを統合したい場合

❌ おすすめではない場合

  • 低遅延が必須で、各タスクに対して
    <100ms
    の ACK とハンドリングが必要な場合
  • 大規模な並列処理で、同時に数万以上のアクションを調整する必要がある場合
  • Temporal.io や RabbitMQ といった専用タスクブローカーを使用し、さらにスケールさせる必要がある場合

補足: パフォーマンスは Rust コアを採用したことで保証されていますが、Postgres の ACID プロパティには限界があります。Postgres を過負荷にすると、より複雑なアーキテクチャへの移行を検討する必要があります。 Temporal や RabbitMQ などの代替案も優秀ですが、専用のブローカーを別サーバーで運用する手間や、イベント課金コスト、あるいはオープンソースの歴史的背景など、考慮すべき要素が異なります。


プロジェクトステータス

重要: Waymark は現在 プレリリース 段階です。

  • 本番アプリケーションでの使用は推奨されていません。
  • バージョン 1.0.0 以前は後方互換性を保証しておりません。
  • ただし、サイドプロジェクト等で試す際は歓迎します。

コンパイルエラーが発生する特定のワークフローについて Issue を作成いただければ、解決に向けた対応を行います。


ソースからのビルドと貢献

ビルド要件

Web アプリ機能(

waymark-executor
)をビルドするには、Node.js と npm が必要です。

make js-deps
cargo build --bin waymark-executor

コントリビューション

より詳細なガイドはコントリビューションガイドラインを参照してください。

同じ日のほかのニュース

一覧に戻る →

2026/11/07 4:48

Opus に助けてもらうことができる Jev は、コストを 1/4 に抑えつつ Opus の精度を実現します。

## Japanese Translation: ハイブリッド AI アーキテクチャの識別解決における核心的な利点は、低コストの決定モデルを高精度の frontier モデルと組み合わせることで、トップクラスの性能を維持しながら経費を大幅に削減できる点にあります。誤字や双子、兄弟といった不確実で困難なケースを含むレコードを、Opus などの強力な大規模言語モデル (LLM) にルーティングするこのアプローチにより、スタンドアローンシステムに見られる過信エラーを排除します。個体識別(記録を重複なしに単一の個人にマッピングすること)において、ハイブリッドシステムは全てのレコードに対して高価な frontier モデルを実行する場合に比べ、運用コストを 4 倍以上削減します。Jev や Luna のような決定モデルは、frontier LLM に比べて最大 90 倍も低く、1,000 件のアイデンティティあたり約 0.05〜0.10 ドルで提供され、設定だけで約 0.15 秒で回答を返します。標準的な LLM は日常業務においてレイテンシと高料金を苦にしますが、ハイブリッド戦略は迅速性を保つために安価な決定ツールを活用し、信頼性が低い場合にのみプレミアムモデルを呼び出します。この「2 段階」のアーキテクチャは、困難なデータ課題に対しても堅牢さを保証します。簡単なテストでは Luna が Jev をわずかに上回りますが、難しいベンチマークでは性能差が消え、ハイブリッド Jev はハイブリッド Luna(1,000 件あたり 1.15 ドルで 91.6% の精度)を上回り、2.94 ドル/1k で 95.3% の高精度を達成します。将来の展開においては、高コストモデルのみへの依存よりもこの混合戦略を優先すべきです。それは、大規模データ管理において frontier レベルの精度を実現すると同時に、著しく高速な処理速度と低い財務負荷を提供するからです。テストデータは、ワシントン大学の Institute for Health Metrics and Evaluation から提供される「pseudopeople」ツールを用いて生成され、例示に実際の人物は一切含まれていません。 ## Text to translate: The core advantage of hybrid AI architectures for identity resolution lies in combining low-cost decision models with high-accuracy frontier models to drastically cut expenses while maintaining top-tier performance. By routing uncertain or difficult cases—such as those involving typos, twins, or siblings—to powerful large language models (LLMs) like Opus, this approach eliminates overconfidence errors common in standalone systems. In identity resolution—mapping records to single individuals without overlaps—hybrid systems reduce operational costs by more than four times compared to running expensive frontier models for every record. Decision models such as Jev and Luna are up to 90× cheaper and over 10× faster than frontier LLMs, costing $0.05–$0.10 per 1,000 identities and answering in about 0.15 seconds out of the box. While standard LLMs struggle with latency and high fees on routine tasks, hybrid strategies leverage cheap decision tools for speed, invoking premium models only when confidence is low. This "two-tier" architecture ensures robustness even against difficult data challenges. On easier tests, Luna slightly outperforms Jev, but on harder benchmarks the performance gap disappears and hybrid Jev achieves 95.3% accuracy at $2.94/1k, surpassing hybrid Luna's 91.6% accuracy at $1.15/1k. Future deployments should prioritize this mixed strategy over relying solely on high-cost models, as it delivers frontier-level accuracy with significantly faster processing speeds and lower financial overhead for large-scale data management. Test data was generated using the "pseudopeople" tool from the Institute for Health Metrics and Evaluation at the University of Washington, ensuring no real people appear in examples.

2026/11/07 5:27

AI が AI 研究を劇的に加速している

## Japanese 翻訳: Anthropic の最新の報告書(S1)は、AI の開発が直ちに「責任あるスケーリングポリシー」(RSP)によって定義される臨界点に達することを示しています。この「劇的に加速した進歩」は、AI システムが自身の研究開発を自動化することによって引き起こされており、計算資源またはその他の入力による歴史的な成長率よりも能力向上が 2 倍速く達成されています。深層アクセス調査では、2025 年 10 月から 2026 年 10 月までの間に Anthropic の能力が前年と比較して約 2 倍の速度で進化したことが確認されました。しかし、多くの証拠資料が削除されており、科学的な外部検証を妨げています(研究者は生データを検査したりモデルを検証したりできません)。 AI の自動化は計算リソース乗数で約 2〜3 倍のスピードアップをもたらしますが、そのような進歩のペースを維持するために研究職の労働力を約 4〜9 倍(あるいは最大約 10 倍)増やす必要性を生み出します。国家レベルのデータ窃取を防ぐために設計された現在の安全性基準は、すでに OpenAI や Anthropic という大手企業が breach(突破)しており、分野全体が脆弱化しています。即時かつ堅牢なロギング、監視、共謀への対抗策、原則に基づいたアライメント訓練、ガバナンスインフラの導入を行わない限り、このフィードバックループは 1 年以内に極端な超知能の実現を可能にし、その後進歩を指数関数的に加速させます。もしボトルネックなしで誤整合したシステムがこの状態に至れば、人類文明を圧倒できる新たな兵器を急速に開発することが可能です。したがって、業界は現時点でこれらの不可欠なガバナンス要件を満たしておらず、特定のインフラストラクチャ対策が直ちに導入されない場合、壊滅的な結果につながる高いリスクがあります。

2026/11/07 4:33

ファイアクラッカーVMエスケープ:PwnEscape パート2

## Japanese Translation: 重要なセキュリティの突破が明らかとなり、Firecracker ハイパーバイザーを迂回してホストシステムで完全な root アクセスを取得できることが、CVE-2026-99999 として追跡されています。このエクスプロイトは、拡張ページテーブル(EPT)の解決、ホストのページテーブルへの逆マッピング、ASLR 下でのバイナリに対するイメージマッピング、そしてアクティブな `pt_regs` 構造体の所在を特定する「4 つのリゾルブ段階」に依存し、KVM_RUN から直ちに戻った生きている vCPU スレッドをハイジャックします。この復帰中に保存されたレジスタを変更することで、研究者たちは隔離から脱出し、管理者権限でコードを実行することに成功しました。特筆すべきは、攻撃がペイロードの配信後に一時スタック語を復元する可逆的な手順を含んでいることであり、その結果、Firecracker インスタンスは通常通り実行され続け、SSH アクセスも保持されており、侵害されているにもかかわらず機能的と見なされます。特定バージョンの Firecracker とホストカーネルでテストされたこの概念実証(PoC)は、jailer プロセスを必要とせずに、ホストメモリおよびプロセス制御を直接操作できることを示しており、unjailered インスタンスが脆弱であることを実証しています。

Show HN: Waymark – プレイヤーではなくジョブをコンパイルするワークフローエンジン | そっか~ニュース