Crystalラッパーを用いたElixirとGoバックエンドの接続

2025-06-19
Crystalラッパーを用いたElixirとGoバックエンドの接続

Moziチームは、新しいElixir Phoenix LiveViewアプリケーションを既存のGoバックエンドに接続する必要がありました。NIFとPortsを検討しましたが、最終的にErlangのCノードアプローチを選択し、保守性の向上のためCrystalでCラッパーを作成しました。これにより、コンパイル時と実行時の両方のコードベースが分離され、Elixir側の`Node.list`を使用してCノードの接続を検出し、S6を使用してコンテナ内の再起動を行います。C/Go境界を越える際の性能低下はありますが、彼らのユースケースでは許容範囲内です。結果として、保守性を向上させるElixir、Crystal、Goの3言語による洗練された組み合わせが実現しました。

開発