Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Gleamアップデート情報 2026
Search
Comamoca
August 29, 2026
Technology
41
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Gleamアップデート情報 2026
Comamoca
August 29, 2026
More Decks by Comamoca
See All by Comamoca
小粒でもパワフルなJS Runtime Antjsについて
comamoca
0
120
Gleamという選択肢
comamoca
6
1.1k
Other Decks in Technology
See All in Technology
研究開発部の紹介 / Sansan R&D Profile
sansan33
PRO
4
24k
EUDIWの枠組みを出発点に民間エコシステムの在り方を考える(OAuth/OIDC Numa (Immersion) Workshop 2026)
oidfj
PRO
0
310
Kiro WebとCloud Sessions
nagisa53
2
210
顧客の要望は2次情報である 〜アンテナを張るFDEの構造論〜
noriakioji
3
950
AI時代のアウトプット――変わったこと、変わらないこと / Devsumi 2026 Kansai #devsumi
jnchito
0
590
EMの役割で 変わったこと・変わらなかったこと
sansantech
PRO
0
160
Eight Engineering Unit 紹介資料
sansan33
PRO
3
8.3k
医療の現場を変革に挑戦した半年間の軌跡 - PythonとAIで現場を変える / From Code to Care
soudai
PRO
1
630
Dylib Hijacking on macOS: Dead or Alive?
patrickwardle
0
120
markdown-poster Introduction
kazamori
0
280
みてねにおけるAI-DLC導入活動とAIドリブン開発の現在地/JAWS-UG AI-DLC #2
isaoshimizu
2
260
【5分でわかる】セーフィー エンジニア向け会社紹介
safie_recruit
0
54k
Featured
See All Featured
Dealing with People You Can't Stand - Big Design 2015
cassininazir
367
27k
Thoughts on Productivity
jonyablonski
76
5.3k
Bridging the Design Gap: How Collaborative Modelling removes blockers to flow between stakeholders and teams @FastFlow conf
baasie
0
670
Rebuilding a faster, lazier Slack
samanthasiow
85
9.6k
Mind Mapping
helmedeiros
PRO
1
330
Six Lessons from altMBA
skipperchong
29
4.5k
Git: the NoSQL Database
bkeepers
PRO
432
67k
The Web Performance Landscape in 2024 [PerfNow 2024]
tammyeverts
12
1.3k
A Modern Web Designer's Workflow
chriscoyier
698
190k
Imperfection Machines: The Place of Print at Facebook
scottboms
270
14k
How to Create Impact in a Changing Tech Landscape [PerfNow 2023]
tammyeverts
56
3.4k
AI Search: Implications for SEO and How to Move Forward - #ShenzhenSEOConference
aleyda
1
1.3k
Transcript
Gleam アップデート情報 2026 ODC 2026 Language Updates こまもか
自己紹介 • 趣味でニッチな言語を触っている ‣ Nim, Lisp, Elixir 等 • Gleam
という言語をかれこれ 4 年くらい追っている • gleam-jp というコミュニティをやっている こまもか @Comamoca_
Gleam
Gleam について Gleam の概要と特徴
Gleam について • 静的型付けの関数型言語 • Erlang/JavaScript で動作する • ユーザーフレンドリーを重視している •
一昨年 v1 に到達し現在は v1.18 • 今年初めてカンファレンスが行われた
Gleam について Gleam の概要と特徴
Gleam について • Developers Suervy 2025 では 「Admired and Desired」2
位になった
Gleam について • Developers Suervy 2025 では 「Admired and Desired」2
位になった 👉 それだけ気に入っている人が多い
Gleam について • Developers Suervy 2025 では 「Admired and Desired」2
位になった 👉 それだけ気に入っている人が多い 👉 ちなみに 1 位は Rust
特徴 import gleam/io pub fn main() { io.println("Hello, world") }
• 構文が非常にシンプル • コンパイルが非常に速い • エラー文が親切
特徴 import gleam/io pub fn main() { io.println("Hello, world") }
• 構文が非常にシンプル • コンパイルが非常に速い • エラー文が親切 👉 Coding Agent との相性が良い
各ターゲットについて コンパイルターゲットごとの機能について
Erlang • コンパイル結果は Erlang コード ‣ ビルド時間のボトルネックは rebar3 になりがち •
ビルドには rebar3 を使用している • Erlang から Elixir を呼び出す要領で Elixir の関数を呼び出せる ‣ @external(erlang, "Elixir.IO", "puts") • 逆に Elixir からは Erlang の関数として呼び出せる ‣ :gleam_io.println("Hello!")
JavaScript • 公式で Nodejs, Deno, Bun の 3 つに対応している ‣
JS をターゲットにしている言語で Bun をサポートしているのは珍しい • コンパイル結果は ES6 ベースの JavaScript • JS 側の関数は普通に呼び出せる ‣ @external("javascript", "ffi.mjs", "ffi_func")
JavaScript • 公式で Nodejs, Deno, Bun の 3 つに対応している ‣
JS をターゲットにしている言語で Bun をサポートしているのは珍しい • コンパイル結果は ES6 ベースの JavaScript • JS 側の関数は普通に呼び出せる ‣ @external("javascript", "ffi.mjs", "ffi_func") 👉 関数がファイルに紐付くため直接 console.log を呼び出せない
JavaScript • 公式で Nodejs, Deno, Bun の 3 つに対応している ‣
JS をターゲットにしている言語で Bun をサポートしているのは珍しい • コンパイル結果は ES6 ベースの JavaScript • JS 側の関数は普通に呼び出せる ‣ @external("javascript", "ffi.mjs", "ffi_func") 👉 関数がファイルに紐付くため直接 を呼び出せない 👉 Gleam 側で Runtime ごとに分岐する機能はない console.log
構文 FizzBuzz の例
FizzBuzz pub fn fizzbuzz(n: Int) -> String { case n
% 3, n % 5 { 0, 0 -> "FizzBuzz" 0, _ -> "Fizz" _, 0 -> "Buzz" _, _ -> int.to_string(n) } } 整数を FizzBuzz の文字列に変換する関数
FizzBuzz pub fn main() -> Nil { int.range(from: 1, to:
101, with: Nil, run: fn(_, n) { io.println(fizzbuzz(n)) }) } 実際に整数のリストを与えて実行してみる
FizzBuzz Playground の QR コード
構文 HTTP Routing の例
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 をパターンマッチで行うのが慣例
構文 use, function capture
use 構文 fn wraped(func) { use value <- func() //
`value`を使った処理を書く io.println(value) } func(fn (value) { // `value`を使った処理を書く io.println(value) })
use 構文 • 高階関数を展開して記述できる • コールバック地獄を回避できて便利
use 構文 • 高階関数を展開して記述できる • コールバック地獄を回避できて便利 • 例外処理
use 構文 • 高階関数を展開して記述できる • コールバック地獄を回避できて便利 • 例外処理 • Async/Await
use 構文 • 高階関数を展開して記述できる • コールバック地獄を回避できて便利 • 例外処理 • Async/Await
• middleware
use 構文 • 高階関数を展開して記述できる • コールバック地獄を回避できて便利 • 例外処理 • Async/Await
• middleware • エンコーダー/デコーダ
use 構文 • 高階関数を展開して記述できる • コールバック地獄を回避できて便利 • 例外処理 • Async/Await
• middleware • エンコーダー/デコーダ 👉 応用範囲が広い
関数キャプチャ構文 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 } 引数に_を渡すことで部分適用ができる
Gleam 本体の動向 Gleam の最近のリリースについて
Gleam 本体の動向 • LSP の機能追加 • コンパイラの堅牢性の担保 • エラーメッセージの改善 •
パフォーマンス改善
Gleam 本体の動向 • LSP の機能追加 • コンパイラの堅牢性の担保 • エラーメッセージの改善 •
パフォーマンス改善 👉 全体として言語の質を向上する改善が多い
Gleam v1.18
v1.18 • レコードフィールドの定義へジャンプをサポート • Git 依存で monorepo がサポートされた ‣ Hex.pm
に上げずとも monorepo で開発したパッケージを Git で公開できるようになった • モジュール名の変更に合わせて import を自動で更新するように なった
Gleam v1.17
v1.17 • 定数で todo キーワードが使えるようになった • gleam dev コマンドに--no-print-progress が追加
‣ ビルドの進捗表示を抑制できるようになった • gleam deps outdated でサマリが表示されるようになった
Gleam v1.16
v1.16 • JS Target にて source map がサポートされた • LSP
Code Action の追加 ‣ 関数参照を無名関数で包むアクション ‣ 自明な無名関数を外すアクション
エコシステムの動向 最近の Gleam のエコシステムの動き
Gleam 標準ライブラリ • 今年の 4 月に標準ライブラリが v1 になった ‣ ライブラリの保守が気持ち楽になった
• 2 年くらい前に gleam/dynamic/decode が入った ‣ 動的データの扱い方に一貫性がもたらされた
ベストプラクティスの確立 • 公式がベストプラクティスを公開した ‣ Conventions, patterns, and anti-patterns • コミュニティ内で共有されていたプラクティスが明文化された
ベストプラクティスの確立 • 公式がベストプラクティスを公開した ‣ Conventions, patterns, and anti-patterns 👉 •
コミュニティ内で共有されていたプラクティスが明文化された sans-io pattern と builder pattern が明文化されて嬉しい
ベストプラクティスの確立 • 公式がベストプラクティスを公開した ‣ Conventions, patterns, and anti-patterns 👉 👉
• コミュニティ内で共有されていたプラクティスが明文化された sans-io pattern と builder pattern が明文化されて嬉しい コミュニティにおけるプラクティスの共有が更に進むと期待
バックエンド • フルスタックフレームワーク Pevensie が出てきた ‣ Gleam でフルスタックパッケージを開発するプロジェクト ‣ パッケージ同士が疎結合なので部分的に使用できる
‣ 最近は認証関連のパッケージが開発されている • 新しいサーバーパッケージ ewe が出てきた ‣ 現在も活発に開発されている • ルーティング系のライブラリも出てきた ‣ 型安全に routing 書けるパッケージ wayfinder ‣ 型定義からルーティングを生成するパッケージ roundabout
フロントエンド • Lustre は TEA ベースの Web FW • Lustre
が v5 に到達した ‣ パフォーマンスが React と張り合えるくらいになった ‣ Lustre アプリを Web Component として export 出来るようになった ‣ Server Component が導入された
フロントエンド • Lustre は TEA ベースの Web FW • Lustre
が v5 に到達した ‣ パフォーマンスが React と張り合えるくらいになった ‣ Lustre アプリを Web Component として export 出来るようになった ‣ Server Component が導入された 👉 リアルタイムにサーバーで行った処理を表示できるようになった
まとめ • Gleam という Erlang/JavaScript で動く言語がある • シンプルな構文もあって海外ではそれなりに広まりつつある • バックエンド/フロントエンド共にエコシステムも拡大している
• Gleam は今後も成長が期待できそう
宣伝 YAPC::Tokyo について
YAPC::Tokyo • Yet Another Perl Conference の略 ‣ Perl と付いているけど
Perl の話はほぼない • 今年は 10 年ぶりのビッグサイト開催 • YAPC::Japan としての開催は今年が最後 • プロポーザル応募は 9/1 23:59 まで!