devcontainerでGleamを動かす

2024/06/20に公開

Gleamという言語を見かけて気になったので触ってみました。
とりあえずWriting Gleamの一番初めのコードがdevcontainerで動いたので、備忘録もかねて手順を投稿します。

import gleam/io

pub fn main() {
  io.println("Hello from vars!")
}

シンタックスハイライトは未対応なんですね…

環境

以下がインストール済み

  • VSCode
    • Remote Development拡張機能
  • Docker
    • 自分はWSL上にインストールしたDocker CLIを使いましたが、Docker Desktopのほうが便利だと思います。

devcontainerのOS選択

gleamのdevcontainerは今のところ直接入れられないので、OSのコンテナの上に必要なものをインストールしていきます。

自分はUbuntuを選択しました。

Denoをインストール

GleamはJavaScriptとErlangの双方をターゲットにできるので、それぞれインストールします。

自分はJavaScript実行環境としてDenoを選択しました。試していませんが、NodeはもちろんBunも使えるようです。インストールしたいものにチェックを入れます。

Erlangをインストール

Erlangで検索するとGleamもサジェストされます。

チェックボックスにチェックを入れます。

チェックを入れ終わったらOKで進みます。

Gleamのプロジェクトを作成

プロジェクトを作成し、ディレクトリを移動します。

gleam new vars
cd vars

すると、以下のようなファイルやディレクトリが作成されます。

.
├── build
│   ├── dev
│   ├── lsp
│   ├── packages
│   └── prod
├── gleam.toml
├── manifest.toml
├── README.md
├── src
│   └── vars.gleam
└── test
    └── vars_test.gleam

Erlangをターゲットに実行

ErlangのインストールでErlang via asdfを選択したので、asdfを使用してバージョンを指定しておきます。最新は現在バージョン27.0です。
https://www.erlang.org/downloads

asdf global erlang 27.0

設定できたら、gleam runで実行できるようになります。

JavaScriptをターゲットに実行

gleam.tomlを編集し、Denoがターゲットになるよう指定する必要があります。

以下を書き加えてください。

[javascript]
runtime = "deno"

設定が完了すると、gleam run --target javascriptで実行できるようになります。

まとめ

devcontainerはすんなりと環境構築できるので便利ですね。ここまでの手順をうまくDockerfileにまとめて共有できるとさらに便利だと思います。誰かお願いします(他力本願)。

参考

https://zenn.dev/comamoca/articles/gleam-tour-for-typescript-user

https://gleam.run/writing-gleam/

Discussion