Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Gleamアップデート情報 2026

Avatar for Comamoca Comamoca
August 29, 2026

Gleamアップデート情報 2026

Avatar for Comamoca

Comamoca

August 29, 2026

More Decks by Comamoca

Other Decks in Technology

Transcript

  1. 自己紹介 • 趣味でニッチな言語を触っている ‣ Nim, Lisp, Elixir 等 • Gleam

    という言語をかれこれ 4 年くらい追っている • gleam-jp というコミュニティをやっている こまもか @Comamoca_
  2. Gleam について • Developers Suervy 2025 では 「Admired and Desired」2

    位になった 👉 それだけ気に入っている人が多い
  3. Gleam について • Developers Suervy 2025 では 「Admired and Desired」2

    位になった 👉 それだけ気に入っている人が多い 👉 ちなみに 1 位は Rust
  4. 特徴 import gleam/io pub fn main() { io.println("Hello, world") }

    • 構文が非常にシンプル • コンパイルが非常に速い • エラー文が親切
  5. 特徴 import gleam/io pub fn main() { io.println("Hello, world") }

    • 構文が非常にシンプル • コンパイルが非常に速い • エラー文が親切 👉 Coding Agent との相性が良い
  6. Erlang • コンパイル結果は Erlang コード ‣ ビルド時間のボトルネックは rebar3 になりがち •

    ビルドには rebar3 を使用している • Erlang から Elixir を呼び出す要領で Elixir の関数を呼び出せる ‣ @external(erlang, "Elixir.IO", "puts") • 逆に Elixir からは Erlang の関数として呼び出せる ‣ :gleam_io.println("Hello!")
  7. JavaScript • 公式で Nodejs, Deno, Bun の 3 つに対応している ‣

    JS をターゲットにしている言語で Bun をサポートしているのは珍しい • コンパイル結果は ES6 ベースの JavaScript • JS 側の関数は普通に呼び出せる ‣ @external("javascript", "ffi.mjs", "ffi_func")
  8. JavaScript • 公式で Nodejs, Deno, Bun の 3 つに対応している ‣

    JS をターゲットにしている言語で Bun をサポートしているのは珍しい • コンパイル結果は ES6 ベースの JavaScript • JS 側の関数は普通に呼び出せる ‣ @external("javascript", "ffi.mjs", "ffi_func") 👉 関数がファイルに紐付くため直接 console.log を呼び出せない
  9. JavaScript • 公式で Nodejs, Deno, Bun の 3 つに対応している ‣

    JS をターゲットにしている言語で Bun をサポートしているのは珍しい • コンパイル結果は ES6 ベースの JavaScript • JS 側の関数は普通に呼び出せる ‣ @external("javascript", "ffi.mjs", "ffi_func") 👉 関数がファイルに紐付くため直接 を呼び出せない 👉 Gleam 側で Runtime ごとに分岐する機能はない console.log
  10. FizzBuzz pub fn fizzbuzz(n: Int) -> String { case n

    % 3, n % 5 { 0, 0 -> "FizzBuzz" 0, _ -> "Fizz" _, 0 -> "Buzz" _, _ -> int.to_string(n) } } 整数を FizzBuzz の文字列に変換する関数
  11. FizzBuzz pub fn main() -> Nil { int.range(from: 1, to:

    101, with: Nil, run: fn(_, n) { io.println(fizzbuzz(n)) }) } 実際に整数のリストを与えて実行してみる
  12. HTTP Routing import gleam/http/request pub fn hander(req) { case request.path_segments(req)

    { [] -> echo "index" // /にrouteする ["greet"] -> echo "hello" // greet/にrouteする _ -> echo "404" } } 簡略化した HTTP Routing の例 Gleam では Routing をパターンマッチで行うのが慣例
  13. use 構文 fn wraped(func) { use value <- func() //

    `value`を使った処理を書く io.println(value) } func(fn (value) { // `value`を使った処理を書く io.println(value) })
  14. 関数キャプチャ構文 fn add(a: Int, b: Int) -> Int { a

    + b } pub fn main() { let add_one = fn(x) { add(1, x) } echo add_one(1) // => 2 } 引数に_を渡すことで部分適用ができる
  15. Gleam 本体の動向 • LSP の機能追加 • コンパイラの堅牢性の担保 • エラーメッセージの改善 •

    パフォーマンス改善 👉 全体として言語の質を向上する改善が多い
  16. v1.18 • レコードフィールドの定義へジャンプをサポート • Git 依存で monorepo がサポートされた ‣ Hex.pm

    に上げずとも monorepo で開発したパッケージを Git で公開できるようになった • モジュール名の変更に合わせて import を自動で更新するように なった
  17. v1.17 • 定数で todo キーワードが使えるようになった • gleam dev コマンドに--no-print-progress が追加

    ‣ ビルドの進捗表示を抑制できるようになった • gleam deps outdated でサマリが表示されるようになった
  18. v1.16 • JS Target にて source map がサポートされた • LSP

    Code Action の追加 ‣ 関数参照を無名関数で包むアクション ‣ 自明な無名関数を外すアクション
  19. Gleam 標準ライブラリ • 今年の 4 月に標準ライブラリが v1 になった ‣ ライブラリの保守が気持ち楽になった

    • 2 年くらい前に gleam/dynamic/decode が入った ‣ 動的データの扱い方に一貫性がもたらされた
  20. ベストプラクティスの確立 • 公式がベストプラクティスを公開した ‣ Conventions, patterns, and anti-patterns 👉 •

    コミュニティ内で共有されていたプラクティスが明文化された sans-io pattern と builder pattern が明文化されて嬉しい
  21. ベストプラクティスの確立 • 公式がベストプラクティスを公開した ‣ Conventions, patterns, and anti-patterns 👉 👉

    • コミュニティ内で共有されていたプラクティスが明文化された sans-io pattern と builder pattern が明文化されて嬉しい コミュニティにおけるプラクティスの共有が更に進むと期待
  22. バックエンド • フルスタックフレームワーク Pevensie が出てきた ‣ Gleam でフルスタックパッケージを開発するプロジェクト ‣ パッケージ同士が疎結合なので部分的に使用できる

    ‣ 最近は認証関連のパッケージが開発されている • 新しいサーバーパッケージ ewe が出てきた ‣ 現在も活発に開発されている • ルーティング系のライブラリも出てきた ‣ 型安全に routing 書けるパッケージ wayfinder ‣ 型定義からルーティングを生成するパッケージ roundabout
  23. フロントエンド • Lustre は TEA ベースの Web FW • Lustre

    が v5 に到達した ‣ パフォーマンスが React と張り合えるくらいになった ‣ Lustre アプリを Web Component として export 出来るようになった ‣ Server Component が導入された
  24. フロントエンド • Lustre は TEA ベースの Web FW • Lustre

    が v5 に到達した ‣ パフォーマンスが React と張り合えるくらいになった ‣ Lustre アプリを Web Component として export 出来るようになった ‣ Server Component が導入された 👉 リアルタイムにサーバーで行った処理を表示できるようになった
  25. YAPC::Tokyo • Yet Another Perl Conference の略 ‣ Perl と付いているけど

    Perl の話はほぼない • 今年は 10 年ぶりのビッグサイト開催 • YAPC::Japan としての開催は今年が最後 • プロポーザル応募は 9/1 23:59 まで!