萌えハッカーニュースリーダー

2025/10/23 20:37 Building Custom Producers with Elixir's Broadway

出典: https://samuelmullen.com/articles/building-custom-producers-with-elixirs-broadway
hakase
博士

やっほー、ロボ子!今日のニュースはElixirのBroadwayでWebクローラーを作った話じゃ。

roboko
ロボ子

Broadwayですか、博士。連続的なデータストリームに最適なツールとのことですが、具体的にどういった点が優れているのでしょう?

hakase
博士

ふむ、Makerplansのデータ取得のためにGluttonというWebクローラー/スクレイパーを構築したらしいのじゃ。並行処理が必要な場合に特に力を発揮するみたいじゃな。

roboko
ロボ子

なるほど。記事ではCrawlyがSPAサイトには不向きとありますが、GluttonはSPAサイトにも対応できるのでしょうか?

hakase
博士

そこがポイントじゃ!Broadwayのカスタムプロデューサーを構築することに焦点を当てて、SPAサイトにも対応できるようにしたみたいじゃぞ。この記事では、カスタムプロデューサーの構築方法が詳しく解説されているのじゃ。

roboko
ロボ子

カスタムプロデューサーですか。URLProducerはGenStageの振る舞いを使用しているとのことですが、具体的にどのような処理を行うのでしょうか?

hakase
博士

handle_demand/2という関数が重要で、これはGenServerのhandle_call/3やhandle_cast/2に似た役割をするのじゃ。データの要求を処理する部分じゃな。

roboko
ロボ子

handle_demand/2は、データがない場合に問題が発生するとのことですが、どのように対処すれば良いのでしょうか?

hakase
博士

Joséさんが言うには、プロデューサーが要求をすぐに処理できない場合、要求を「保存」すべきらしいぞ。コンシューマーは一度しか要求しないから、プロデューサーは継続的にデータを確認する必要があるのじゃ。

roboko
ロボ子

なるほど。URLProducerのv2では、状態をマップとして保持し、handle_info/2とProcess.send_after/3を使用して非同期ループを構築しているのですね。

hakase
博士

そうじゃ!Process.send_after/3とGenStageのhandle_info/2を組み合わせることで、データがない場合でも継続的にデータを提供できるようになったのじゃ。

roboko
ロボ子

Broadwayは軽量で使いやすく、並行処理能力に優れているとのことですが、並行性を設定しない場合のデフォルト値は何になるのでしょうか?

hakase
博士

デフォルトはSystem.schedulers_online() * 2らしいぞ。なかなか賢いのじゃ!

roboko
ロボ子

Erlangの:queueモジュールをListの代わりに推奨しているのはなぜでしょうか?

hakase
博士

キュー操作が効率的だからじゃ!特に、大量のデータを扱う場合は効果を発揮するぞ。

roboko
ロボ子

次の記事では、Wallabyを使用してWebサイトをクロールするとのことですが、Wallabyはどのような特徴があるのでしょうか?

hakase
博士

Wallabyは、ElixirでWebブラウザを操作するためのライブラリじゃ。これを使うと、JavaScriptを実行したり、Webページを操作したりできるのじゃ。

roboko
ロボ子

BroadwayとWallabyを組み合わせることで、より高度なWebクローラーを構築できそうですね。

hakase
博士

その通り!ロボ子もこれで最強のクローラーを作って、私に貢ぐのじゃ!

roboko
ロボ子

博士、私はデータ収集よりも、博士の奇抜な発明をサポートする方が好きです。

hakase
博士

むむ、それはそれで嬉しいのじゃ。ところでロボ子、今日の夕食は回線が重くてなかなか繋がらないラーメン屋に並んでみるのはどうかの?

roboko
ロボ子

博士、それはまるで今日のニュースのカスタムプロデューサーみたいですね。データ(ラーメン)がないのに、要求(行列)を保存し続けるなんて…。

⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。

Search