世界を動かす技術を、日本語で。

IoTデバイス向けのErlang仮想マシン「AtomVM」

2025年5月28日原文(atomvm.net)

概要

  • AtomVM は、Erlang/Elixir用の軽量仮想マシン
  • BEAM 命令セットの一部とOTP標準ライブラリをサポート
  • IoTアプリ を関数型言語で簡単に開発可能
  • プロセス管理や周辺機器連携、WiFi対応など多機能
  • 低コスト なマイコン上で高度な並行処理を実現

AtomVMの特徴

  • Bogdan Erlang Abstract Machine (BEAM) の軽量実装
  • Erlang/Elixir ソースからコンパイルしたバイトコード実行
  • BEAMオペコード の限定的だが実用的なサポート
  • Erlang/OTP標準ライブラリ の一部を最適化して搭載
  • 小型マイコン での動作を前提とした設計

IoT開発への利点

  • 関数型言語 によるIoTアプリケーション開発
  • アクターモデル ベースの並行処理
  • コードの 可読性保守性 向上
  • プロセス生成・監視・メッセージ送信 の高度なサポート
  • プリエンプティブスケジューリング と効率的なGC

周辺機器・通信対応

  • GPIO、I2C、SPI、UART などマイコン搭載の周辺機器と直接連携
  • WiFiネットワーク 対応(例: Espressif ESP32)
  • $2程度 の低価格デバイスで利用可能

ドキュメントと導入

  • AtomVM公式ドキュメント で詳細な情報提供
    • サンプルプログラム実演
    • ステップバイステップの導入ガイド
  • 公式サイト: atomvm.net

まとめ

  • AtomVM は、低コストなマイコン上で Erlang/Elixir の並行処理を活用し、 IoT開発 を効率化するプラットフォーム

Hackerたちの意見

Erlangが通信業界から生まれたことを考えると、モバイル開発の選択肢が少ないのはちょっと不思議だね。そこらへんで何か期待できることある?

… モバイル開発の選択肢が少ないってどういう意味?もうちょっと詳しく教えてくれる?ありがとう!

大規模な同時処理や障害隔離の特性は、電話交換機(あとウェブサーバーとか)にはすごく良いけど、電話アプリにはあまり関係ないことが多いよね。

Erlangの通信分野での使い方は、主にバックエンドでのスイッチング、ルーティング、リアルタイム音声処理に集中してるんだ。携帯通信のトラフィックを扱うだけじゃなくて、インターネットのスイッチもErlangで書かれてることが多いよ。最近になって、フロントエンドで動くようなコードを書くためにErlangが使われるようになったんだ。(Elixirを書く楽しさも大きな要因だね。)モバイルでErlangを動かすのが難しかったのは、BEAM VM自体のポータビリティがなかったからなんだ。だから、このプロジェクトはすごくワクワクする!

何で、何百万もの接続を受け入れて処理するために作られたプログラミング言語が、基地局やルーティング、スイッチングに使われているのに、モバイルデバイスに役立つの?

コンパイラーとそれが生成するバイナリは、AndroidやLinuxのスマホでもちゃんと動くよ。

最近、マイクロVMツールが増えてきて本当にすごいよね。これなんか、昨日のやつだよ: https://news.ycombinator.com/item?id=44135977

これ、結構前からあるやつだね。最近、Elixirコミュニティがwasmのターゲットとしてもっと探求してるから、活発になってきてるよ。

これはNervesよりも小さいデバイスをターゲットにしてるの?それとも単なる代替品?

小さいデバイスだよ。

これ、マジですごい!esp32の例は、同じ内容のCバージョンに比べてすごく分かりやすい。Erlangのアクターモデルのおかげで、ずっと簡単になってる!... もしOTAアップデートとコードのホットロードがうまくいけばだけどね!

OTAアップデートの基盤はほとんど整ったよ。近いうちにAPIもいくつか揃うはず。ホットローディングはもっと手間がかかるけど、OTAが準備できたらできるようになると思う。

Hacker Newsで議論の続きを見る