**Oban を使って Elixir と Python を結ぶ**

2026/02/19 20:07

**Oban を使って Elixir と Python を結ぶ**

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

要約

Japanese Translation:

(以下のテキストを日本語に翻訳してください。)

Text to translate

(to avoid the inference):**

Summary

Oban は、JSON 引数付きの共有

oban_jobs
テーブルへの読み書きを行うことで、Elixir ↔ Python の相互運用性を可能にし、クロス言語ジョブキューとして機能します。 “Badge Forge” デモでは、Elixir プロセスがバッジ生成ジョブをエンキューし、Python ワーカー(
GenerateBadge
)がそれらのジョブを処理します。 Python ワーカーは WeasyPrint を使用して HTML を PDF にレンダリングし、ファイルを保存した後、
printing
キューに確認ジョブを再度エンキューします。 Elixir ワーカー(
BadgeForge.PrintCenter
)がこの確認をログに記録し、印刷ロジックをトリガーします。 両言語は独立した Oban クラスターを実行し、共有テーブルのみで調整します。また、Postgres を介して PubSub 通知も交換できます。
localhost:4000
(Oban Web Docker イメージが提供)にあるデモのダッシュボードでは、開発者はインスタンス全体のすべてのジョブを監視できます。この双方向ワークフローは、異種スタックがそれぞれのエコシステムで最も得意とする機能(PDF レンダリングに Python、オーケストレーションに Elixir)を活用し、共有コードベースやモノリシックサービスを必要とせずに動作できることを示しています。 例は、あるエコシステムで成熟したライブラリが不足している場合に、同様のクロス言語パイプラインを試すよう促します。

本文

Elixir アプリが「Python にしかない(あるいはより成熟した)機能」を必要とする場合、どのような選択肢がありますか?

  • 機械学習モデル
  • PDF レンダリングライブラリ
  • 音声/映像編集ツール

HTTP サービスを呼び出すかメッセージキューを利用する方法もありますが、Oban を経由した方が簡単です。
Elixir と Python の間で永続的なジョブを透過的に交換できる仕組みを持つことで、新たな可能性が広がります。


Badge Forge

Badge Forge は、ほんのわずかな橋渡しで実現できることを示す小さなデモです。
会議バッジを印刷します:PDF の生成は Python で WeasyPrint を使い、ジョブオーケストレーションは Elixir 側で Oban に任せます。

共通データベースの共有

両方の

oban
ライブラリは同じ
oban_jobs
テーブルへ読み書きを行います。
ジョブ引数は JSON で保存されるため、言語に依存しません。
Elixir アプリが Python ワーカー(あるいはその逆)用のジョブをキューに入れるときは、単に行を書き込みます;相手側はキュー名で取得します。

  • 各側が独自にクラスタリーダーシップを保持するので、ノード同士がリーダー権限を争いません。
  • PubSub 通知は Postgres を介してリアルタイムでやり取りできます。

実際の印刷

1. ジョブのキューイング(Elixir)

def enqueue_batch(count \\ 100) do
  generate = fn _ ->
    args = %{
      id: Ecto.UUID.generate(),
      name: fake_name(),
      company: fake_company(),
      type: Enum.random(~w(attendee speaker sponsor organizer))
    }

    Oban.Job.new(args, worker: "badge_forge.generator.GenerateBadge", queue: :badges)
  end

  1..count
  |> Enum.map(generate)
  |> Oban.insert_all()
end

注: ワーカー名は文字列 (

"badge_forge.generator.GenerateBadge"
)、Python 側の完全修飾名と一致させます。

2. ジョブ処理(Python)

from oban import Job, Oban, worker
from weasyprint import HTML

@worker(max_attempts=5, queue="badges")
class GenerateBadge:
    async def process(self, job: Job) -> None:
        badge_id = job.args["badge_id"]
        name     = job.args["name"]
        html     = render_badge_html(name, job.args["company"], job.args["type"])
        path     = BADGES_DIR / f"{name}.pdf"

        # PDF を生成
        HTML(string=html).write_pdf(path)

        # Elixir に確認ジョブを再投入
        await Oban.get_instance().enqueue(
            Job(args={"id": badge_id, "name": name, "path": str(path)},
                queue="printing",
                worker="BadgeForge.PrintCenter")
        )

3. 確認処理(Elixir)

defmodule BadgeForge.PrintCenter do
  use Oban.Worker, queue: :printing

  require Logger

  @impl Oban.Worker
  def perform(%Job{args: %{"id" => id, "name" => name, "path" => path}}) do
    Logger.info("Printing badge #{id} for #{name}: #{path}…")

    # 実際の印刷ロジックをここに…
    :ok
  end
end

サンプル出力

iex> BadgeForge.enqueue_batch(10)
:ok

Python のログ(整形済み):

[INFO] oban: {
  "id":14,
  "worker":"badge_forge.generator.GenerateBadge",
  "queue":"badges",
  ...
}

Elixir のログ:

[info] Printing badge 7bfb7c39 for Alasdair Fraser: /some/path…

アクティビティの可視化

すべての接続済みインスタンスからジョブを監視するため、Docker で独立した Oban Web ダッシュボードを起動します。

docker run -d \
  -e DATABASE_URL="postgres://user:pass@host.docker.internal:5432/badge_forge_dev" \
  -p 4000:4000 \
  ghcr.io/oban-bg/oban-dash

http://localhost:4000
を開けば、キューの活動とメトリクスが確認できます。


双方向の橋渡し

Badge Forge は次のことを示しています:

  • Elixir 側から Python の強み(例:PDF 生成)を活用できる。
  • Python エコシステムに Elixir のジョブオーケストレーションを持ち込める。

このパターンは、ある言語が他方で不足しているツールを提供する場合に実務的です。

完全なデモコードと設定については、元記事にリンクされたリポジトリをご覧ください。

同じ日のほかのニュース

一覧に戻る →

2026/02/20 0:19

「Gemini 3.1 Pro」 (そのままカタカナ表記で)

## Japanese Translation: > **Gemini 3.1 Pro** – Google の最新 AI モデルで、複雑なタスクに対する高度な推論を目的として設計されています。 > > • **パフォーマンス:** ARC‑AGI‑2 ベンチマークで 77.1 % を達成し、Gemini 3 Pro のスコアの 2 倍以上となり、推論能力が大幅に向上したことを示しています。 > > • **新機能:** > – テキストプロンプトからウェブサイト用の高解像度アニメーション SVG を生成し、スケーリングもクリスプでファイルサイズも小さく保ちます。 > – 複雑な API をユーザーフレンドリーな設計に統合(例:国際宇宙ステーションのテレメトリを表示するライブ航空宇宙ダッシュボード)。 > – 手入力追跡と生成音声が連動した、操作可能なスターリング・マルミュレーションなどのインタラクティブ 3D エクスペリエンスをサポートします。 > – 文学的テーマを機能的コードに変換し、エミリー・ブルントー風のポートフォリオウェブサイトで実証されています。 > > • **入手可能性:** 現在はプレビュー版です。検証とさらなるエージェンシーワークフローの進化後に一般公開されます。 > – 開発者は Gemini API、Google AI Studio、Gemini CLI、Antigravity、Android Studio、および Vertex AI を通じてアクセスできます。 > – 企業は Vertex AI または Gemini Enterprise を介して統合できます。 > – Gemini アプリでは、Google AI Pro/Ultra プランのユーザーがより高い使用制限を受け取り、NotebookLM は Pro/Ultra ユーザーに限定されます。 > > • **開発背景:** 11 月の Gemini 3 Pro 発表以来、ユーザーフィードバックによる迅速な改善が進み、このプレビューリリースにつながりました。

2026/02/20 4:42

**マイクロペイメント:ニュースサイトにとっての現実的検証**

## Japanese Translation: **改善された要約** マイクロペイメントは、購読モデルを損なうことなく分散したニュース消費を収益化する方法として出版社に提供されます。代わりに広告収入の乗数効果として機能します。支払履歴は、本物の人間のエンゲージメントを独立して証明し、広告主の信頼性を高めます。モバイルアプリ内購入(IAP)は、二段階通貨交換が小額支払いを受け入れやすくすることを示しています。約80 % のモバイルゲーマーはゲームをプレイしながら IAP を行っており、マイクロペイメントの実用的な市場シェアを示唆しています。出版社は「パブリッシャコイン」をサブスクライバー向けのボーナス機能として導入でき、それが非サブスクライバーにも拡散されます。これは、習慣を形成するために無料コインを配布するゲームメカニクスと同様です。 正当なサイトは、広告主が AI 主導の帰属推定やビッグテックの不透明なレポートに対してますます懐疑的になる中で、信頼できる人間観客指標を必要とします。広告主 ROI はビッグテック評価の上昇とともに低下し、ランダム化実験は広告効果の因果関係を証明する唯一の確立された方法です。ビッグテックは W3C 承認済みのブラウザ内帰属システムを推進しており、これがブラウザベンダーに測定を集中させる可能性があります。これは、独立したサイトが自らの利益と合致しない場合、不利になる恐れがあります。 ビッグテックデータフローへの過度な依存を避けるため、正当な出版社は迅速に代替帰属手法(例:「rickcentralcontrolcom/geo-rct-methodology」)を採用する必要があります。統一されたマイクロペイメントプラットフォームは、複数の同意ダイアログ、メール登録、および通知プロンプトを排除し、ユーザーにかかる負担を軽減できます。 この記事ではさらに業界全体の動向にも言及しています:チャイニーズオープンソース AI の採用率(約80 % が中国モデルを使用)、プライバシー懸念から内蔵 AI 機能を禁止する EU、デジタルコンテンツ配信を規制する EPIC の年齢適切設計法案など。

2026/02/20 0:54

**Show HN:** *Micasa – ターミナルからあなたの住まいを追跡する*

<|channel|>final <|constrain|>## Japanese Translation: **Micasa**は、ホームオーナーが家のメンテナンスに関するすべての側面(タスク・プロジェクト・インシデント・機器・ベンダー・見積もり・ドキュメント)を単一のローカルSQLiteデータベースで管理できる、軽量で端末ベースのUIです(クラウドやサブスクリプションは不要)。 自動的に期日を計算し、設計図から完成までプロジェクトを追跡し、見積もりを横並びで比較し、保証とインシデントの詳細を記録し、ベンダー情報を保存し、ファイルを直接レコードに添付します。 インターフェースは完全にキーボード駆動で、Vimスタイルのモーダルナビゲーション、ファジー検索、ソート、列非表示、関連レコードへのドリルダウンが可能です。ヘルプ画面からフルキー绑定参照を確認できます。 Micasaは、家のメンテナンス管理に使われる物理的なショーボックス・バインダー・付箋紙を置き換えます。そのデザインはVisiDataのモーダル操作モデルからインスパイアされています。 Goでのインストール(`go install github.com/cpcloud/micasa/cmd/micasa@latest`)またはバイナリ(Linux、macOS、Windows;amd64 & arm64)のダウンロードによりセットアップできます。クイックスタートコマンドには `micasa --demo`、`micasa`、および `micasa --print-path` が含まれます。 アプリはすべてのデータを単一のSQLiteファイルにローカル保存し、`cp` で手動バックアップが可能です。 ## Text to translate (revised for completeness and accuracy):** > **Micasa** is a lightweight, terminal‑based UI that lets homeowners track all aspects of home maintenance— tasks … (the rest)