devcontainerでGleamを動かす
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です。
asdf global erlang 27.0
設定できたら、gleam run
で実行できるようになります。
JavaScriptをターゲットに実行
gleam.toml
を編集し、Denoがターゲットになるよう指定する必要があります。
以下を書き加えてください。
[javascript]
runtime = "deno"
設定が完了すると、gleam run --target javascript
で実行できるようになります。
まとめ
devcontainerはすんなりと環境構築できるので便利ですね。ここまでの手順をうまくDockerfileにまとめて共有できるとさらに便利だと思います。誰かお願いします(他力本願)。
参考
Discussion