1 ポイント 投稿者 GN⁺ 2025-10-21 | 1件のコメント | WhatsAppで共有
  • Gleam OTPアクターモデル を活用し、耐障害性とマルチコア性能を備えたプログラム開発を支援
  • 完全な型安全性Erlang OTP との互換性 を目指しているのが特徴
  • スーパーバイザー による障害復旧と自己修復機能を提供
  • Erlang/OTP の一部機能のみを提供しており、追加の管理戦略 は現在開発中
  • 一般的なプロセス、アクター、スーパーバイザー など、さまざまなアクタータイプをサポート

Gleam OTP 概要

  • Gleam OTP は Erlang の OTP アーキテクチャを参考にした強力な アクターフレームワーク で、耐障害性マルチコアプログラムの実装に適している
  • オープンソースプロジェクトとして Apache-2.0 ライセンス が適用されている

主な特徴と利点

  • アクターとメッセージ完全な型安全性 を保証
  • Erlang OTP との 互換性 を提供し、既存の Erlang 環境と統合しやすいという利点がある
  • スーパーバイザー(supervisor) による障害検知、自動復旧、終了管理などの耐障害性をサポート
  • Erlang OTP に準じた 同等の性能 を目指す
  • ドキュメント とサンプルが提供されており、実運用への適用や学習がしやすい

アクタータイプ別の説明

  • プロセス(process)

    • OTP における最も基本的なビルディングブロックの役割
    • 他のアクタータイプの基盤となるが、Gleam アプリケーションでは直接使われることはあまりない
  • アクター(actor)

    • 代表的に使われるプロセスタイプで、Erlang の gen_server に似た機能を提供
    • OTP システムメッセージの自動処理、デバッグおよびトレーシング機能を有効化
  • スーパーバイザー(supervisor)

    • 他のプロセスを起動し、監視と復旧 を担当
    • 子プロセスはクラッシュや例外発生時に自動で再起動される
    • スーパーバイザーの入れ子構成(supervision tree) によって、アプリケーションの耐障害性構造を形成
    • gleam/otp/static_supervisor, gleam/otp/factory_supervisor のドキュメントで詳細実装を確認可能

制限事項と課題

  • 現在のアクターはすべての OTP システムメッセージをサポートしておらず、未対応メッセージは無視される
  • 一部の OTP デバッグ API 機能には制限がある
  • 必要に応じて issue 登録 により未実装メッセージのサポートを要望できる

結論とプロジェクトの重要性

  • Gleam OTP は Erlang エコシステムの強みを Gleam 言語へ拡張し、型安全性とマルチコア耐障害性 を実現できる点で大きな意義がある
  • 本番サービスで 安定性性能 が重要なアプリケーションに適している
  • スタートアップ、IT 専門開発者、一般開発者のいずれにとっても、学習および実運用への適用価値が高いオープンソースプロジェクト

1件のコメント

 
GN⁺ 2025-10-21
Hacker News の意見
  • gleam/lustre で小さなプロジェクトを始めたが、今のところ本当に満足している
    静的型付け、null のない環境、関数型、ML 系言語に関心があるなら gleam を試してみることを勧めたい
    しかも BEAM 上で動く
    • 自分も同感
      gleam をインストールしたらシステムに 50 個ほどパッケージが入ったが、たぶん Erlang/Elixir 関連のパッケージだと思う
      もし JS にだけトランスパイルしたい場合はどうなるのか気になる。たぶん自分のシステムのパッケージングの問題かもしれない
      Lua をトランスパイル先としてサポートしてくれるとさらに良さそう。自分の感覚では、DSL を別のプログラムに埋め込むなら Lua は JS ランタイムより 3 倍は簡単
      何より今までで一番良かったのはコミュニティだ。gleam コミュニティのライブラリや資料の品質は非常に高い
      Rust コミュニティを思い出す。難しい問題はすでに賢い人が扱っていて、良い解決策がよく出てくる(lustresquirrel など)
      実験的で創造的な試みが多く見られるのも特徴だ。大きな言語エコシステムではあまり見かけないものが、ここでは目立っている。コミュニティの成長とともに、とても歓迎的な雰囲気がある
    • 自分は挙げられていたもの全部に興味がある。けれど、まだ BEAM や OTP をきちんと理解できていない
      どこから学び始めるのがよいか勧めてほしい
    • 前に挙がっていたものをどれも経験していない立場から、gleam/lustreelixir/phoenix のどちらを先に学ぶのがよいか気になる
  • Gleam を使っている人たちは、Phoenix のような Web フレームワークも一緒に使っているのだろうか
    Phoenix のようなフレームワークと Gleam を一緒に使えるなら本当に良さそうなので調べている
    今は Python で新しいプロジェクトを準備しているが、Gleam でも実用的な選択肢があるなら試してみたい
    • Lustre の開発者が Gleam/Lustre で LiveView に近い機能を実装した発表動画がある
      フロントエンド/バックエンドのどの部分に入れるかを非常に簡単に選べる点が利点だ
      YouTube リンク
    • Phoenix、Django、Rails のような完全なフレームワークはまだない
      その代わり、Web アプリを作るときによく使うツールはある
      Lustre は基本的なビュー用ツールで、Wisp はサーバーの役割を担う
      SQL には squirrel と POG(新しいが人気がある)がある
  • PureScript は Erlang バックエンドをサポートする成熟した関数型プログラミング言語だ
    BEAM 向けに別の静的型付きの選択肢が必要なら良い選択だ
    Haskell の方言のようなもので、正格評価と row polymorphism をサポートしている
    • PureScript の JS バックエンドは成熟しているが、Erlang バックエンドとそのエコシステムは Gleam と比べてかなり小さい
    • 公式サイトと GitHub リポジトリには PureScript は JS にコンパイルされるとしか書かれていないが、Erlang バックエンドの話はどこで聞いたのか気になる
  • Erlang/BEAM にとても関心があるが、実際に試す時間はまだ取れていない
    実務でどう使われているのか気になる。サービスロジックをすべて構築するのか、それとも特定の部分にだけ使うのか知りたい
    • 自分はチームを率いながら Gleam への段階的な移行を進めている
      「functional core, imperative shell」パターンを極限まで適用し、既存の Ruby on Rails コードベースから重い計算処理を切り離して Gleam に担当させている
      OTP の機能はほとんど使っておらず、Rails には Web UI/HTTP API といった本来の強みに集中させている
      Rails がジョブの入力値設定を担当し、ジョブデータは Redis を通じて Gleam に 1 つの原子的な値の集合として渡される
      Elixir で薄いラッパーを作ってネットワークやファイル I/O だけを処理し、ビジネスロジックは Gleam モジュールが担う
      この方法については技術的にもっと詳しく整理して、近いうちに記事として書くつもりだ。HN でよく関心を集める話題でもある
    • 私たちは TV Labs で Elixir を使って Web サービス、リアルタイムマッチングエンジン、Lua コードのサンドボックス化、バイナリプロトコルでのマイクロコントローラとの通信、機械学習など、さまざまなことをやっている
      Elixir は汎用用途に優れた言語で、さまざまな分野で強みを持っている
      さらに詳しい話は私の Developer Voices 動画を参照してほしい
      YouTube リンク
    • elixirforum.com に来て話してみることを勧める
      多くの人が Erlang/Elixir と BEAM だけで本格的にシステムを構築しているので、疑問を聞けばよく答えてくれるはずだ
    • どちらのやり方も見たことがある
      OTP を十分に理解すると、すべてのシステムをその上に構築するのが自然になる
      自分も 7 年間そうしてきたが、新人開発者がこのエコシステムに慣れるまでには長い時間がかかることを経験している
  • Gleam がもっと真剣に受け止められるようになるには、プロジェクトページに強い政治的メッセージを書かないほうがよいと思う
    技術プロジェクトのページにわざわざ政治の話を入れる必要性がわからない
    これは賛成か反対かの問題ではなく、専門的な場ではこうした議論を外すほうが望ましいと思う
    そうしないと会話が不必要に本題から外れてしまう
    • "Black lives matter. Trans rights are human rights. No nazi bullsh*t."
      この 1 行がページの下のほうに 1 回だけ出てくることを言っているのか?
      もしその 1 文のせいで使わないと決めるなら、もともとの意図どおりに機能しているのだと思う
    • 「会話が不必要に本題から外れる」と言っていたが
      むしろ自分でその脱線を起こしているのではないかと思う
  • 自分には、アクターモデルはプロセス間で情報を共有する必要があるときに分散コンピューティングの問題が生じるように見える
    自分の基準では、耐障害性とマルチコアのためなら Scala/ZIO のようなソフトウェアトランザクショナルメモリと関数型エフェクトシステムを使うほうがよいと思う
    それでもアクターモデルが必要な場面では使える
    そのうえ JVM エコシステムは成熟度や可観測性、実運用性の面で BEAM より優れている
    • かなり独特な見方だと思う
      BEAM の欠点を批判するのは理解できるが、強みである部分を批判するのはあまりしっくりこない
      BEAM は不変なメッセージを、軽量で安価なグリーンスレッドの間でやり取りする構造だ
      堅牢な監視体制(supervisor trees)があるので、データレースやスレッド停止を心配する必要がない
      こうしたものがすべて標準で組み込まれているため、ボイラープレートもない
      不変性のおかげで性能も意外によい
      結局のところ BEAM は、耐障害性や分散・並行システムに最も最適化されたプラットフォームだ
    • 言及されていなかった点があるが、Erlang(gleam の土台)は 99.9999999% のアップタイムを実現してきた言語だ
      この耐久性を支える大きな要素の 1 つが、堅牢な supervision とマシン間インフラだ
      アクターシステムの登場に大きな影響を与えた言語でもある
      文字どおり Erlang はこの 1 つのことのために存在しており、実際にとても優れている
    • 「アクターモデルはプロセス間共有に難しさがある」と言っていたが、実際にはアクターモデルはデータをコピーするか、メッセージ送信で所有権を移す方式だ
      本当に共有が必要なデータであれば、それは必ず不変データでなければならない
    • mutable なデータを immutable なデータ構造として渡せない状況の具体例を挙げてもらえるだろうか
      自分に思いつくのは極端に重い数値計算くらいだが、その場合でも Elixir や Erlang で直接書くのではなく NIF で実装すればよい
    • Elixir/Gleam/OTP ではプログラムはすべて独立したプロセスの集合として構成される
      アクターパターンを明示的に使わなくても、状態の受け渡しや調整はすでに解決済みの問題だ
      Task、Agent、GenServer、Supervisor などの基本プリミティブがそろっている