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
6
910
Gleamという選択肢
関数型まつり2日目「Gleamという選択肢」のスライドです。
Comamoca
June 14, 2025
Tweet
Share
Other Decks in Programming
See All in Programming
AIエージェント時代における TypeScriptスキーマ駆動開発の新たな役割
bicstone
4
1.4k
PostgreSQLで手軽にDuckDBを使う!DuckDB&pg_duckdb入門/osk2025-duckdb
takahashiikki
1
230
プログラミングどうやる? ~テスト駆動開発から学ぶ達人の型~
a_okui
0
190
複雑化したリポジトリをなんとかした話 pipenvからuvによるモノレポ構成への移行
satoshi256kbyte
1
720
いま中途半端なSwift 6対応をするより、Default ActorやApproachable Concurrencyを有効にしてからでいいんじゃない?
yimajo
2
310
Local Peer-to-Peer APIはどのように使われていくのか?
hal_spidernight
2
440
iOSDC.pdf
chronos2500
2
650
AccessorySetupKitで実現するシームレスなペアリング体験 / Seamless pairing with AccessorySetupKit
nekowen
0
210
クラシルを支える技術と組織
rakutek
0
190
ИИ-Агенты в каждый дом – Алексей Порядин, PythoNN
sobolevn
0
150
GitHub Actions × AWS OIDC連携の仕組みと経緯を理解する
ota1022
0
230
私達はmodernize packageに夢を見るか feat. go/analysis, go/ast / Go Conference 2025
kaorumuta
2
450
Featured
See All Featured
Performance Is Good for Brains [We Love Speed 2024]
tammyeverts
12
1.1k
RailsConf & Balkan Ruby 2019: The Past, Present, and Future of Rails at GitHub
eileencodes
140
34k
GraphQLとの向き合い方2022年版
quramy
49
14k
Typedesign – Prime Four
hannesfritz
42
2.8k
"I'm Feeling Lucky" - Building Great Search Experiences for Today's Users (#IAC19)
danielanewman
229
22k
The Illustrated Children's Guide to Kubernetes
chrisshort
48
51k
Why You Should Never Use an ORM
jnunemaker
PRO
59
9.5k
How to train your dragon (web standard)
notwaldorf
96
6.3k
How STYLIGHT went responsive
nonsquared
100
5.8k
A better future with KSS
kneath
239
17k
What's in a price? How to price your products and services
michaelherold
246
12k
Sharpening the Axe: The Primacy of Toolmaking
bcantrill
45
2.5k
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 を気に入った らぜひ寄付をお願いします。
ちなみに、寄付を行なうとブログの一番下に名前が載ります。