Gleamアプリのデプロイ
Dockerを使う
GleamはErlangかJavaScriptに変換されてから実行されるので、マルチステージビルドで予めgleam buildやgleam exportコマンドを使いターゲットにコンパイルすることでコンテナサイズを小さくできる。
Erlangターゲット
gleam export erlang-shipmentコマンドを使うことで./build/erlang-shipment/entrypoint.shというスクリプト及びバイナリ郡が生成される。
entrypoint.sh runと実行するとアプリケーションが実行される。
exportされたアプリケーションは./erlang-shipmentがあれば実行できるので、Dockerのマルチステージングビルド機能を使うことでイメージの容量を抑えられる。
exportしたErlangアプリを実行するimageにErlang公式imageを採用するのは避けた方が良い。HTTP通信機能が含まれていないので不可解なエラーが発生する可能性がある。
JavaScriptターゲット
gleam buildを実行すると./build/dev/javascript/project_name/project_name.mjsというファイルと依存するモジュール郡が生成される。
これをエントリポイントとして実行すれば良い。
もしモジュールを一つにまとめたい場合はesbuildのGleam bindingであるesgleamを使うことで実現できる。 ちなみにGleamのプリミティプな型を定義しているprelude.mjsが欲しい場合はgleam export javascript-preludeコマンドを実行することで文字列を得られる。
また、gleam export typescript-preludeと実行することで型付けされたバージョンも手に入る。
Fly.ioへのデプロイ
/icons/hr.icon