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
Sponsored
·
SiteGround - Reliable hosting with speed, security, and support you can count on.
→
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
Other Decks in Programming
See All in Programming
SLOをサービス品質の共通言語にするために 取り組んできたこと
wakana0222
0
510
なぜ型を書くのか? TSKaigi2026で改めて考える #tskaigi_smarthr
kajitack
0
380
Welcome to the "Parametricity" 🏙️ − Generic だけど Specific な世界 −
guvalif
PRO
1
170
壊れたパーサから始める関数型設計と構成的なパーサ #fp_matsuri
raiga0310
2
330
Hatena Engineer Seminar #37「言語モデルの活用に関する研究」
slashnephy
0
530
Apache Hive: そしてCloud Native Lakehouseへ
okumin
1
140
【やさしく解説 設計編・中級 #1】一つの車に、運転手は一人 ~ある倉庫システムの事例から~
panda728
PRO
0
180
PHP Application における Kubernetes 内 gRPC 通信
ganchiku
0
500
なぜ関数型プログラミングで「型」と「証明」が語られるのか #fp_matsuri
kajitack
3
960
使用 Meilisearch 建立新聞搜尋工具
johnroyer
0
150
5分で問診!Composer セキュリティ健康診断
codmoninc
0
370
エンジニア向け会社紹介/Findy Company Profile
findyinc
6
360k
Featured
See All Featured
Distributed Sagas: A Protocol for Coordinating Microservices
caitiem20
333
23k
Making the Leap to Tech Lead
cromwellryan
135
10k
Amusing Abliteration
ianozsvald
1
230
How to Create Impact in a Changing Tech Landscape [PerfNow 2023]
tammyeverts
55
3.4k
Why Our Code Smells
bkeepers
PRO
340
58k
Agile Leadership in an Agile Organization
kimpetersen
PRO
0
190
brightonSEO & MeasureFest 2025 - Christian Goodrich - Winning strategies for Black Friday CRO & PPC
cargoodrich
3
750
Save Time (by Creating Custom Rails Generators)
garrettdimon
PRO
32
3.9k
From π to Pie charts
rasagy
0
240
Practical Tips for Bootstrapping Information Extraction Pipelines
honnibal
25
2k
Claude Code どこまでも/ Claude Code Everywhere
nwiizo
65
56k
Ecommerce SEO: The Keys for Success Now & Beyond - #SERPConf2024
aleyda
1
2.1k
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 を気に入った らぜひ寄付をお願いします。
ちなみに、寄付を行なうとブログの一番下に名前が載ります。