ブラウザで動くR、WebRが熱い!
個人的に2023年のR言語界隈でホットだったWebR[1]について、日本語での紹介を見かけなかったので、私の知る範囲で簡単にまとめます。
WebRとは
WebR公式ドキュメントには以下のように書かれています。
WebR is a version of the statistical language R compiled for the browser and Node.js using WebAssembly, via Emscripten.
要するにブラウザ上などでRが動くということですね(技術的なことをよく理解していないため説明できない)。
現在はPosit社のメンバーがメインとなってr-wasmというGitHub組織で開発されています。
元々はGeorge Staggさん(恐らくWebR開発のために現在はPosit社に所属されている)の個人プロジェクトだったのだと思われます。
Gitリポジトリの履歴を見ると最初のコミットは2022年1月18日だったようです。
私は2022年2月に以下のツイートをリツイートしていたので、割とリポジトリのできた直後にWebRを知ったようです。
このツイートからリンクされている以下のデモサイト(まだ生きていて驚きました)で試してみて、ブラウザ上でRが動いたことに対する感動と、読み込みの遅さに対する厳しさを感じたことを覚えています。
試しに今やってみたら、Rの読み込みに2分かかりました。
WebRさんがplot(mtcars)
を実行するするまで2分かかりました
しかし、それは完全に過去の話です。
最新(バージョン0.2.3-dev)のwebR REPL appを実行してみると、5秒でRを使用可能になりました。
最新の豪華で早いWebRデモサイト
このくらい早いと、「ちょっとR動かしてみたいな」というときはこのページを開くだけで充分かもしれません。
WebRでできること
……は私も詳しくないので、WebRの公式ドキュメントをご覧いただきたいです。
ところで、この公式ドキュメントはQuartoで作成されたウェブサイトで、WebRが埋め込まれていることに気づくと思います。
同じようにQuartoウェブサイトにWebRを埋め込みたい場合、quarto-webr
というQuarto拡張機能を使用すると専用のコードブロック内に書いたRコードをWebRで簡単に実行させられます。
また別のQuarto拡張shinylive
でShinyアプリを埋め込むこともできるとか。(当初はPyodideによるPython版Shinyのみだっただったものが現在ではWebRによるR版Shinyにも対応したようです)
興味のある方はこちらも是非お試しください。
利用可能なRパッケージ
通常のRと同じく、WebRのREPL内でもinstall.packages()
関数を実行することで外部パッケージをインストールすることができます。
デフォルトで使用されるリポジトリはhttps://repo.r-wasm.org/で、現在約10,000個のパッケージが利用可能なようです。このページをブラウザで開くとWebRベースのShinyアプリになっていて面白いです。
現在CRANに存在するパッケージは20,000程度らしく、約半分のパッケージをWebRで利用できることになります。私は「意外と多いな」という印象を持ちました。
また、11月からR-universeもすべてのRパッケージをWebR用にビルドするようになったため、(ビルドに成功しているパッケージについては)R-universeからもインストール可能です。詳しくはrOpenSciのブログ記事をどうぞ。
利用できないRパッケージ?
どのようなパッケージが利用できない(ビルドできていない)のでしょうか?
私はWASMについて全く理解できていないものの、一つ思い当たったのは、Python界隈でPandas 3.0からpyarrowを必須依存関係にするという話の中で挙がっていた「pyarrow
をWASM化できていないためPyodideでPandas使えなくなっちゃう」という話です。[2]
となればpyarrow
と同じlibarrowに基づいているarrow
パッケージもビルドできていないのでは?と思い試したら、やはりWebRでは利用できませんでした。
ビルドの大変なパッケージとして他に思い当たったduckdb
は普通に使えました。DuckDBはどこでも使えますね。
gifski
はじめRustソースコードを含むパッケージも全滅しているようですけれども、最近hellorust
のソースコードを改変してWebRで動かせたという発表があったので、いずれ動くようになるかもしれません。
Node.jsでの利用
最近公開された以下のウェブサイトではNode.jsでWebRを使ったCLIツールを作る方法が解説されています。
この記事ではこの本の通りにCLIツールを作ってみようかとも思っていたのですが時間切れになったのでまたの機会に試してみたいと思います。
その他
Rパッケージ用ウェブサイトとして広く利用されているpkgdown
に「ExamplesをWebRで動かせるようにしようぜ」的な話があるのはだいぶ夢があるなと思いました。
-
"WebR"なのか"webR"なのか、公式ドキュメント内でも表記が揺れておりよく分かりませんがとりあえず本記事内では"WebR"と表記します。 ↩︎
Discussion