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
80
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
130
Gleamという選択肢
comamoca
6
1.1k
Other Decks in Technology
See All in Technology
ClaudeCodeでセキュリティ監視業務を半自動化_1年の運用でわかったAIに任せる設計の5つのポイント
kintotechdev
4
1k
AI時代のデータ基盤を考える問い
pacocat
0
790
『自分で判断できるか』を基準に、プロダクトのハンズオン研修でAI利用の線を引いてみた / Where We Drew the Line on AI in Hands-on Training
honyanya
1
550
「ミスを許さない手順書」を作ってみた 〜 個人的にはこれ以上できることはあまりなさそう/20260827-ssmjp-operation-procedure-update
opelab
17
17k
1.5時間を無駄にして学んだwsl2におけるaptとsnapの選択と仕組み
yosaka0123
0
480
[RSJ26] Building a VLA Model Based on Self-Distilled Classification
keio_smilab
PRO
0
110
ブラウザで変わるID連携(OAuth/OIDC Numa (Immersion) Workshop 2026)
oidfj
PRO
0
430
Microsoft MVP プログラムを紹介するから目指す人増えてくれ
tsubakimoto_s
0
160
【5分でわかる】セーフィー エンジニア向け会社紹介
safie_recruit
0
54k
Contract One Engineering Unit 紹介資料
sansan33
PRO
0
20k
会計事務所と顧問先の契約関係をOIDC・OAuthで表現する
terara
0
560
AI駆動開発を組織で促すために
lycorptech_jp
PRO
7
9k
Featured
See All Featured
Lightning talk: Run Django tests with GitHub Actions
sabderemane
0
240
Kristin Tynski - Automating Marketing Tasks With AI
techseoconnect
PRO
0
490
Discover your Explorer Soul
emna__ayadi
2
1.3k
GraphQLの誤解/rethinking-graphql
sonatard
75
12k
Why Your Marketing Sucks and What You Can Do About It - Sophie Logan
marketingsoph
0
400
Designing Powerful Visuals for Engaging Learning
tmiket
1
520
Producing Creativity
orderedlist
PRO
348
41k
Sharpening the Axe: The Primacy of Toolmaking
bcantrill
46
3k
The B2B funnel & how to create a winning content strategy
katarinadahlin
PRO
1
490
HU Berlin: Industrial-Strength Natural Language Processing with spaCy and Prodigy
inesmontani
PRO
0
680
Java REST API Framework Comparison - PWX 2021
mraible
34
9.7k
AI Search: Where Are We & What Can We Do About It?
aleyda
0
7.9k
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 まで!