Open3
メモ Gleam v1.0.0のリリース

2024年03月04日、静的型付けの関数型言語「Gleam」のv1.0.0がリリースされました。
2024年2月11日にはv1.0.0-rc1がリリースされていたので、もうすぐ出てくるとは思っていましたが、3週間を経て、やっとstable版(安定版)のリリースとなりました。
いやや、めでたいx2。
「Gleam version 1」の記事を簡単にまとめてみましょう
Gleamとは
以下の特徴があります。
- 短い時間で学習しやすい(一貫性がある、覚える範囲が小さい)
- 堅牢な静的分析
- Elm、OCaml、Rust などの言語からインスピレーションを得た型システムを
- ErlangVM上で動作、およびjavaScriptランタイムで実行できます。
Gleam v1に含まれているもの
以下のAPIが含まれています。
- TheGleam language design. : 言語のデザイン
- The Gleam compiler. : コンパイラ
- The Gleam build tool. : ビルドツール
- The Gleam package manager. : パッケージマネージャー
- The Gleam code formatter. :コードフォーマッター
- The Gleam language server. : 言語サーバー
- The Gleam compiler WASM API and JavaScript bindings. : コンパイラWASM APIとJavaScriptバインディング
要は、Gleam本体をインストールするだけで、開発に関係する一通りのことができてしまう、ということですね。
v1とは何を指すか
- v1とは、Gleamが「安定性がある」と「productionシステムとしての準備ができた」ことの声明である。
- セマンティックバージョニングに従い、下位互換性を維持していく。(ただし、セキュリティなどの問題は例外である)
v1以降のGleamはどう進む
「Gleam ユーザーの生産性」と 「Gleam プロジェクトの持続可能性」に重点を置いてバージョンアップをしていく
Gleam ユーザーの生産性
生産性向上のために、以下の点に力を入れていく
- 破壊的変更を導入しない
- 言語の肥大化を避ける(シンプルさを保つために、安易に機能追加はしない)
- Gleam 開発者エクスペリエンスを継続的に改善する
- Webサービス開発も焦点をあて、ライブラリなどの追加に取り込んでいく
- 文書/チュートリアル/ガイドの作成
Gleam プロジェクトの持続可能性
プロジェクトが持続可能になるように力を入れていく(ので、協力をお願いしたい)
- フルコミッターは作者のLouis Pilfold のみ。他はパートタイマーのボランティア。
- だから、より重要なものに注力する。ニッチなもの、重要でないものへ避けるリソースが少ない
- 内部文書化への取り組み
- 資金が必要。サポーター募集。
おまけ:マスコットLucy
なお、マスコットキャラもできた様子。
名前は Lucy(ルーシー) という名前のようです。
gleam.runページの印象もLucyがいることによって、以前とは若干イメージが変わりました。
カーソルが当たると、喜びます。
さらにクリックすると、背景の画像が変わります。

では、実際にGleamのv1.0.0をインストールしてみる。
自分はasdfを利用してGleamの環境を構築していたので、asdfを用いたインストールを行う。
asdf自体のアップデート
$asdf update
remote: Enumerating objects: 584, done.
remote: Counting objects: 100% (584/584), done.
remote: Compressing objects: 100% (330/330), done.
remote: Total 584 (delta 310), reused 457 (delta 238), pack-reused 0
Receiving objects: 100% (584/584), 1.11 MiB | 1.33 MiB/s, done.
Resolving deltas: 100% (310/310), completed with 23 local objects.
From https://github.com/asdf-vm/asdf
* [new branch] dependabot/github_actions/actions/cache-4 -> origin/dependabot/github_actions/actions/cache-4
* [new branch] dependabot/github_actions/dorny/paths-filter-3 -> origin/dependabot/github_actions/dorny/paths-filter-3
* [new branch] dependabot/npm_and_yarn/docs/docs-5e1683a3d5 -> origin/dependabot/npm_and_yarn/docs/docs-5e1683a3d5
* [new branch] dependabot/npm_and_yarn/docs/vite-4.5.2 -> origin/dependabot/npm_and_yarn/docs/vite-4.5.2
+ ed221a8...1d48b94 gh-pages -> origin/gh-pages (forced update)
816195d..ccdd47d master -> origin/master
* [new tag] v0.13.0 -> v0.13.0
* [new tag] v0.13.1 -> v0.13.1
* [new tag] v0.14.0 -> v0.14.0
Previous HEAD position was 816195d chore(master): release 0.12.0 (#1506)
HEAD is now at ccdd47d chore(master): release 0.14.0 (#1641)
Updated asdf to release v0.14.0
$
Gleamプラグインのアップデート
$asdf plugin update gleam
Location of gleam plugin: /Users/kawamuraryuuta/.asdf/plugins/gleam
Updating gleam to master
From https://github.com/vic/asdf-gleam
c7c3a7c..b45a651 master -> master
c7c3a7c..b45a651 master -> origin/master
Already on 'master'
Your branch is up to date with 'origin/master'.
$
Gleamのインストール可能なバージョンの確認
$asdf list all gleam
0.2.0
0.3.0
0.4.0
〜(中略)〜
0.34.1
1.0.0
1.0.0-rc1
1.0.0-rc2
nightly
$
gleam v1.0.0のインストール
$asdf install gleam 1.0.0
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0
100 7038k 100 7038k 0 0 3685k 0 0:00:01 0:00:01 --:--:-- 4824k
asdf: Warn: You have configured asdf to preserve downloaded files (with always_keep_download=yes or --keep-download). But
asdf: Warn: the current plugin (gleam) does not support that. Downloaded files will not be preserved.
$
インストールされているGleamのバージョンの確認。
「1.0.0」がインストールされていることが確認できた。
$asdf list gleam
0.17.0
0.19.0
0.20.1
〜(中略)〜
0.25.3
*0.26.0
0.28.3
0.9.1
1.0.0
Gleamのデフォルトのバージョン切り替え
$asdf current gleam
gleam 0.26.0 /Users/<username>/.tool-versions
$
$asdf global gleam 1.0.0
$
$asdf current gleam
gleam 1.0.0 /Users/<username>/.tool-versions
$
Gleamのバージョン確認
1.0.0であることの確認
$gleam --version
gleam 1.0.0
$

Gleamのプロジェクトを作ってみる。
新規プロジェクト作成(プロジェクト名は「looks_like_this」とする)
gleam new looks_like_this
Your Gleam project looks_like_this has been successfully created.
The project can be compiled and tested by running these commands:
cd looks_like_this
gleam test
$
Gleamプロジェクトのディレクトリ構成
$cd looks_like_this
$
$tree
.
├── README.md
├── gleam.toml
├── src
│ └── looks_like_this.gleam
└── test
└── looks_like_this_test.gleam
Gleamプロジェクトの実行およびテスト実行
$cat src/looks_like_this.gleam
import gleam/io
pub fn main() {
io.println("Hello from looks_like_this!")
}
$
$gleam run
Resolving versions
Downloading packages
Downloaded 2 packages in 0.11s
Compiling gleam_stdlib
Compiling gleeunit
Compiling looks_like_this
Compiled in 11.08s
Running looks_like_this.main
Hello from looks_like_this!
$
$gleam test
Compiled in 0.07s
Running looks_like_this_test.main
.
Finished in 0.049 seconds
1 tests, 0 failures
$