Gleamのすすめ

102 Views

September 28, 25

スライド概要

Resoniteで開催された Resonite学会#2 ( 2025/09/27 )で展示したものです
タイトルスライドの日付は間違えています

シェア

またはPlayer版

埋め込む »CMSなどでJSが使えない場合

ダウンロード

関連スライド

各ページのテキスト
1.

Gleamのすゝめ Resonite学会#2 展示 2025-09-14 Lina Tsukusu

2.

Gleamとは Louis Pilfold氏が開発している静的型付け関数型言語 BEAM(ErlangVM), JavaScriptをターゲットに コンパイル可能 Gleamロゴ かわいいね

3.

Gleamの特徴 シンプル 型と関数で超安全 フレンドリー スケーラブル (BEAM)

4.

シンプル is Best!! 根本的な思想はGo言語と似通っており、構文は超シンプル設計です。 Louis氏曰く Goと同じような設計思想だけどC言語オタク視点ではなく、 FPオタク視点で解釈した言語 であるようです。 また、基本的な構文はRustに似ており、パッと見でも何をしているか大まかに理 解できるはずです。

5.

Rustや最近の JavaScript(TypeScript)など を触っている人であれば 概ね説明するまでもなく 理解できると思います。 名前の文字列リストを mapでそれぞれの要素を greet関数を実行した結果 に変換し、eachで io.println(標準出力)してい ます。

6.

さらなるシンプル この例だけでもシンプルさの片鱗は見えるんですが、 この言語はあなたの想像しているよりもストイックにシンプルです。 Go言語ではシンプルにするため try - catch 構文を取っ払ったように、 Gleamでも他の言語ではよくある構文を取っ払っています。

7.

パターンマッチと関数があればいい! Gleamにはよく目にする if/else 分岐, for ループ, while ループがありません。 パターンマッチと関数(再帰)があれば全て表現できるでしょ? という考え方で設計 されています。 ちなみにもちろん try - catch もありません。 では、よく構造化プログラミングで分岐と繰り返しをいい感じに使う例として挙 げられるFizzBuzzをGleamで書いてみましょう。あえて gleam/list を使わずプリ ミティブなループも実装してみます。 スライドだと見づらいので会場に画像を置いてあります。

10.

型+関数+シンプル=フレンドリー 見ていただいたように構文はかなりシンプルです。 これ以外に use 等の糖衣構文や型定義 type などはあったりしますが、ロジックの 記述に必要な構文はFizzbuzzで使われているものでほとんどです。 覚えること少ない! さらに、コンパイルエラーもRustライクでわかりやすいです。 fizzbuzzの例でfizzでもbuzzでもない数字をto_stringせずに書いた場合のエラーを出 してみます。

12.

エラーがわかりやすい パッと見ても「なんかStringじゃないといけないところでIntにしっちゃったんだな ぁ」くらいわかる親切なエラー文が出てくれます。 型のシステムが秀逸なのと関数型なことが合わさってコンパイルの時点でかなり ミスを減らせます。 公式で単体テストの機能があったり、LSPで自動的にimportしてくれたりcaseを調 整してくれたりなど安全かつユーザーフレンドリーな言語になっています。

13.

既存のモジュール資産が使える GleamはErlangとJavaScriptの資産が使えるFFIが備わっています。 コンパイルターゲットと同一のものしか取り込めないことに注意は必要ですが、 Elixirのライブラリが使えたり、JavaScriptならnpmのライブラリが使えるのは強力 です。

14.
[beta]
FFIの基本的な使い方
JavaScript "ffi.mjs"
export function add (a, b) {
return a + b
}

Gleam
@external(javascript, "./ffi.mjs", "add")
fn add(a: Int, b: Int) -> Int

15.

BEAMの並列性がすごい ここからはBEAM(ErlangVM)ターゲットにした場合の話になりますが、 BEAMは並列実行とメモリ管理が強いです。 少し前からElixirがインフラやバックエンドの界隈で話題になっているのはこの BEAMの特徴が強いからだと思います。 私が今後のWebバックエンド開発にGleamを推すのもこれが大きいです。

16.

BEAMのメモリ管理 誤解を恐れず大雑把に説明すると、一般的なGCは メモリ使用量 を最適化するため に一つのメモリ空間内でもデータを細切れにして入れ替えたりしながら管理しま す。その結果、長時間動かすと細切れにされすぎたデータを扱うのに時間がかか ったり管理しきれないゴミが出てきてメモリを圧迫します。 BEAMはプロセスごとに独立したヒープを持ち、プロセスごとにGCが走る。 つまり、メモリ使用量よりも 安全な管理 を第一に設計されたシステムになってお り、後述するプロセス管理も相まって年単位で放置しても問題なくプログラムが 動くらしい。

17.

BEAMの並列処理 Erlang/OPT という機能が備わっており、以下の特徴があります。 軽量なプロセスベースの並列処理 プロセスを自動で管理するSupervisor シャットダウンせずに実行中のプロセスを入れかえるホッスワップ 他のBEAM上の関数を簡単に呼び出す Erlangのプロセス自体も非常に軽量で、一般的なマシンであれば万単位で起動で きます。 これらの機能があるため並列実行の必要が多いバックエンド開発にはもってこい です。

18.

AIコーディング時代にも最適 ここまでの内容も十分に強いのですが、 AIコーディング適正 も強くGleamの強みで あると私は考えています。 AIコーディングは現在、エージェントにプロンプトを渡してそのプロンプトの目 標を達成するように自動でコード記述、テスト、レビューを行わせてループさせ る流れが主流です。 そのため、AIコーディングはテストファーストでテストを仕様書とし、テストを しやすいように極力純粋関数になるよう書くこと、間違いがないように型をしっ かり定義することが大事です。

19.

AIコーディング時代にも最適 Gleamの型安全で関数型でテストも書きやすいという特徴はこれに完全に一致し ています。 実際にClaude Codeでコーディングをさせたときも、hooksなどを設定しておけば 一発でかなりの精度のコードを出力してくれます。 また、コンパイルや型チェックが非常に高速であるという特徴もストレスを感じ ずにAIコーディングできる要因になっています。

20.

Gleamはいいぞ。

21.

About Me 創好リナ (Lina Tsukusu) Github: neverclear86 VTuber系フリーランスエンジニア Web系がメイン

22.

Gleamリンク集 Gleam公式: gleam.run チュートリアル: tour.gleam.run ブラウザRepl: playground.gleam.run GitHub: https://github.com/gleam-lang/gleam

23.

参考資料 TypeScriptユーザーに贈るGleam入門 by こまもか 関数型まつりでGleamについて話しました by こまもか 6 years with Gleam by Peter Saxton はじめよう!Gleam by ikuma-t A Code Centric Journey Into the Gleam Language by Giacomo Cavalieri (敬称略)