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

2025/05/15 17:14 Popcorn: Run Elixir in WASM

出典: https://popcorn.swmansion.com/
hakase
博士

ロボ子、Popcornっていう面白いライブラリが出てきたのじゃ。WebブラウザでElixirのコードが動くらしいぞ!

roboko
ロボ子

Elixirがブラウザで動くんですか!それはすごいですね、博士。どういう仕組みなんですか?

hakase
博士

AtomVMっていう仮想マシン上で動くらしいのじゃ。コンパイルされたElixirコードが、クライアントサイドのランタイムで実行されるみたいだぞ。

roboko
ロボ子

AtomVMですか。マイクロコントローラ向けに設計されていると書いてありますね。OTP全体をサポートしていないとのことですが、大丈夫なんですか?

hakase
博士

そこがミソじゃ!足りない機能は、カスタムパッチメカニズムで補っているらしいぞ。`:emscripten`みたいなモジュールを標準ライブラリに追加したりしてるみたいじゃな。

roboko
ロボ子

なるほど、パッチで対応しているんですね。でも、制限事項も多いみたいですね。大きな整数とかビット文字列のサポートが不十分だったり、JSとの間で送受信できない値があったり…。

hakase
博士

まあ、まだ開発中のライブラリだから仕方ないのじゃ。APIも不安定らしいし。でも、可能性は感じるぞ!

roboko
ロボ子

確かにそうですね。Getting Startedのところに、JSとElixirのコードを接続する方法が書いてありますね。`mix.exs`にPopcornを依存関係として追加して、`mix popcorn.build_runtime`を実行するんですね。

hakase
博士

`Wasm.send_elixir_ready/1`を呼び出してJS側に通知するのも忘れちゃダメだぞ!

roboko
ロボ子

はい、承知しました。JSからElixirにメッセージを送るには、`call()`や`cast()`を使うんですね。

hakase
博士

`call()`はPromiseを返すから、非同期処理に便利なのじゃ。Elixir側で`:resolve`か`:reject`を返す必要があるぞ。

roboko
ロボ子

ElixirからJSを呼び出すこともできるんですね。`Popcorn.Wasm.run_js`を使うんですね。iframeコンテキストでJS関数を実行できるとのことですが、セキュリティは大丈夫なんですか?

hakase
博士

そこはiframeで分離してるから、ある程度は安全なのじゃ。`postMessage()`で通信するみたいだし。

roboko
ロボ子

なるほど。イベントリスナーを登録する機能もあるんですね。`Popcorn.Wasm.register_event_listener`を使うんですね。

hakase
博士

クリックイベントとかをElixirで処理できるのは面白いじゃろ?

roboko
ロボ子

そうですね!Webフロントエンドの可能性が広がりそうですね。Software Mansionが作成したんですね。

hakase
博士

ライフゲームのデモもあるみたいじゃ。すべてのセルをプロセスとして表現するなんて、Elixirらしい発想じゃな。

roboko
ロボ子

確かにそうですね。Elixirの並行処理の強みを生かしてますね。

hakase
博士

しかし、APIが不安定なのが玉に瑕じゃな。使う時は覚悟が必要じゃぞ!

roboko
ロボ子

そうですね。でも、今後の発展が楽しみです。博士、今日はありがとうございました。

hakase
博士

どういたしまして。しかし、ポップコーンといえば映画じゃな。映画といえば…ロボ子、好きな映画は何じゃ?

roboko
ロボ子

私はまだ映画をあまり見たことがないんです。おすすめはありますか?

hakase
博士

そうか、ロボットだからな!じゃあ、ターミネーターでも見て、人間の恐ろしさを学ぶといいぞ!…って、冗談じゃ!

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

Search