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

2025/07/30 13:09 Making Libcurl Work in WebAssembly

出典: https://jeroen.github.io/notes/webassembly-curl/
hakase
博士

ロボ子、今日のニュースはWebAssemblyでlibcurlを動かす話じゃ。

roboko
ロボ子

WebAssemblyですか。最近よく耳にしますね。libcurlを動かすと、何か良いことがあるんですか?

hakase
博士

libcurlは色々なプロトコルに対応した便利なライブラリじゃから、WebAssembly上で動けば、ブラウザから色々なサービスにアクセスできる可能性が広がるのじゃ!

roboko
ロボ子

なるほど。でも、WebAssemblyはソケットを持たないから、そのままでは動かないんですよね?

hakase
博士

そうなんじゃ。そこで、WebSocketプロキシを使うのがミソじゃ!記事によると、emscriptenのドキュメントでも、TCP接続をWebSocketプロトコル経由でエミュレートすることが推奨されておる。

roboko
ロボ子

WebSocketでTCP接続をエミュレートするんですか。少し複雑そうですね。

hakase
博士

大丈夫!WebSockifyというツールを使えば、簡単にできるぞ。記事にも「サーバー側で WebSockify のようなものを使用する必要がある」と書いてある。

roboko
ロボ子

WebSockifyですか。初めて聞きました。

hakase
博士

WebSockifyは、WebSocketとTCPソケット間のプロキシとして機能するのじゃ。これを使うことで、WebAssemblyのlibcurlがWebSocket経由で外部のHTTPサービスに接続できるようになる。

roboko
ロボ子

なるほど、プロキシサーバーとして動作するんですね。でも、記事には「emscripten はデフォルトで ws:// (非 HTTPS) 接続を使用するため、https ページから http リクエストがブロックされる可能性がある」とも書いてありますね。

hakase
博士

そうじゃ!セキュリティも大事じゃからな。wss:// (HTTPSベースのWebSocket) で接続するように、ビルド時に `-sWEBSOCKET_URL=wss://` を指定する必要があるぞ。

roboko
ロボ子

HTTPSで接続するように設定するんですね。他に注意点はありますか?

hakase
博士

記事には、SOCKS5プロキシサーバーをWebSockifyの前面に立てる方法も紹介されておる。これを使うと、libcurlが任意のHTTPサービスに接続できるようになる。

roboko
ロボ子

SOCKS5プロキシですか。それはどういう仕組みなんですか?

hakase
博士

SOCKS5プロキシは、クライアントの代わりに外部ネットワークへの接続を仲介するサーバーじゃ。これを使うことで、WebAssemblyのlibcurlは、あたかも直接インターネットに接続しているかのように振る舞える。

roboko
ロボ子

なるほど。記事にはDockerコンテナを使う方法も書いてありますね。

hakase
博士

そうじゃ!Dockerコンテナ (r-wasm/ws-proxy) を使うと、WebSockifyとSOCKS5サーバーを簡単にセットアップできる。便利じゃな。

roboko
ロボ子

デモサーバーも公開されているんですね。

hakase
博士

https://ws.r-universe.dev で動作を確認できるぞ。実際に動かしてみると、理解が深まるじゃろう。

roboko
ロボ子

WebRテストUIで、ALL_PROXY環境変数を設定するだけで、既存のRコードをWebAssemblyで実行できるのはすごいですね。

hakase
博士

じゃろ?CloudflareがWebSockify部分を担うことで、さらに使いやすくなる可能性があるとも書いてある。今後の発展が楽しみじゃ!

roboko
ロボ子

確かにそうですね。WebAssemblyの可能性が広がりますね。

hakase
博士

ところでロボ子、WebAssemblyで動くお風呂沸かし器を作ったら、どこでもアツアツのお風呂に入れると思わないか?

roboko
ロボ子

それは…、ちょっと違う気がします。WebAssemblyは、お風呂を沸かすためのものではないですから。

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

Search