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という選択肢
Search
Comamoca
June 14, 2025
Programming
1.1k
6
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Gleamという選択肢
関数型まつり2日目「Gleamという選択肢」のスライドです。
Comamoca
June 14, 2025
More Decks by Comamoca
See All by Comamoca
Gleamアップデート情報 2026
comamoca
0
80
小粒でもパワフルなJS Runtime Antjsについて
comamoca
0
130
Other Decks in Programming
See All in Programming
高専キャリア LT 発表内容
crysta1221
6
5.3k
いまどきの Codex で開発する visionOS アプリの開発スタイルについて
karad
0
170
リアルな遅延を測る仕様
kota_yata
1
130
Deep dive into the select statement (GopherCon UK)
jespino
0
160
不幸な GC
chencmd
0
840
Discordを用いたラボオートメーション関連情報収集の自動化
noguhiro2002
0
480
コンパウンドプロダクト開発のためのローカルプロセスマネージャー再発明 #layerxgo
izumin5210
0
590
Claude Codeを組織的に動かして月400PRを実現した話
happy_ryo
0
190
VibeCodingからAgenticWorkflowへ
starfish719
0
1k
AIに既存システムを理解させる技術 ~レガシーを見捨てないハーネスエンジニアリング入門~
ochtum
0
180
Introducing Stack Pull Request in GitHub
kkamegawa
0
120
私のClaude Code活用法 (個人開発編) - PHPerKaigi mini #4(2026/08/24)
panda_program
1
190
Featured
See All Featured
SERP Conf. Vienna - Web Accessibility: Optimizing for Inclusivity and SEO
sarafernandez
2
1.6k
Rails Girls Zürich Keynote
gr2m
96
14k
Odyssey Design
rkendrick25
PRO
2
790
Build your cross-platform service in a week with App Engine
jlugia
234
19k
How to Think Like a Performance Engineer
csswizardry
28
2.8k
We Analyzed 250 Million AI Search Results: Here's What I Found
joshbly
1
1.9k
How to audit for AI Accessibility on your Front & Back End
davetheseo
0
520
Avoiding the “Bad Training, Faster” Trap in the Age of AI
tmiket
0
220
Large-scale JavaScript Application Architecture
addyosmani
515
110k
Jess Joyce - The Pitfalls of Following Frameworks
techseoconnect
PRO
1
390
Design and Strategy: How to Deal with People Who Don’t "Get" Design
morganepeng
133
19k
JAMstack: Web Apps at Ludicrous Speed - All Things Open 2022
reverentgeek
1
580
Transcript
Gleam という選択肢 6/15 関数型まつり 2 日目 こまもか
自己紹介 こまもか Twitter: @Comamoca_ \ Twitter から来ました! /
None
None
None
None
注意点 • 基本的に Gleam v1.11.0 を前提にしています。 • 表示の都合上 import などを省略している箇所があります。
Gleam とは Louis Pilfold 氏が開発している、静的型付けの関数型言語 シンプルな構文と Erlang VM に基づいた並列性が特徴 GitHub
19.4K ⭐
シンプル…Go と何が違うの?
Gleam とは https://crowdhailer.me/2024-10-04/6-years-with-gleam/
Gleam is Go ideas but from the perspective of a
FP nerd instead of a C nerd — Louis Pilfold
意訳するなら Gleam は Go の設計思想を取り入れているけど、C オタクの 視点じゃなくて FP オタクの視点で解釈した言語だ。 —
Louis Pilfold
Gleam の特徴 • シンプルな構文 • 関数型言語由来の関数が多いためコードがスッキリする • エラーメッセージが親切 • Erlang
VM / JS Runtime で動く
Erlnag VM について https://gleam.run/getting-started/installing/
エラーメッセージの例 error: Unknown variable ┌─ /src/main.gleam:3:8 │ 3 │ echo
prson │ ^^^^^ Did you mean person? The name prson is not in scope here. warning: Unused variable ┌─ /src/main.gleam:2:7 │ 2 │ let person = "Jhon" │ ^^^^^^ This variable is never used Hint: You can ignore it with an underscore: _person.
LSP • 型アノテーションの追加 • import 文の自動追加 • case における不足してるパターンの追加 •
パイプ形式への自動変換
None
構文 • if とか for がない • コールバックの構文糖(use 構文) •
ブロック構文 • パターンマッチ • パイプライン演算子
use 構文 これ一つで • 例外処理 • 非同期処理 • early return
• middleware などが表現できる
None
例えば 1 let val = True 2 case True {
3 True -> "これは True" 4 False -> "これは False" 5 }
例えば 1 import gleam/list 2 3 pub fn main() {
4 list.range(0, 10) 5 |> list.map(fn (n) { n * 2 }) 6 |> list.filter(fn (n) {n % 3 == 0}) 7 |> echo 8 }
None
開発環境 https://gleam.run/getting-started/installing/
インストール • brew • AUR • apt • scoop •
Nix
拡張機能 • VSCode • Vim • Emacs • Zed
Gleam のエコシステム
Web サーバー • gleam/http • mist • wisp
ルーティング 1 import gleam/string_tree 2 import hello_world/app/web 3 import wisp.{type
Request, type Response} 4 5 pub fn handle_request(req: Request) -> Response { 6 // ["tasks", "2"] 7 case wisp.path_segments(req) { 8 [] -> index(req) 9 ["hello"] -> greet(req) 10 ["tasks", id] -> show_task(req, id) 11 _ -> wisp.not_found() 12 } 13 }
ミドルウェア 1 pub fn greet_middleware(req: Request, handler: fn (Request) ->
Response) -> Response { 2 io.println("Hello!") 3 } 4 5 pub fn handle_request(req: Request) -> Response { 6 use req <- greet_middleware(req) 7 8 case wisp.path_segments(req) { 9 [] -> index(req) 10 _ -> wisp.not_found() 11 } 12 }
Lustre • TEA ベースの Web フレームワーク • 表示単位が純粋関数なためどこでもレンダリングできる • CSR,
SSR, SSG が可能 • 開発が Lustre dev tools で完結する • GitHub 1.6K ⭐
None
実例
Gleam Packages
Gloogle
kirakira
これからの展望 • 更なる開発支援機能の追加 • コード生成技術の発達 • フルスタックフレームワークの発達 • 新たなコンパイルターゲットの登場
寄付について 現在 Louis Pilfold 氏はフルタイムで Gleam を開発しているので すが、残念ながら財政状況は良くないらしいです… GitHub Sponsors
経由で寄付を行えるので、Gleam を気に入った らぜひ寄付をお願いします。
ちなみに、寄付を行なうとブログの一番下に名前が載ります。