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
Walk around functional web frontend programming
Search
Akihiro Okuno
October 01, 2021
Programming
1.1k
2
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Walk around functional web frontend programming
https://opt.connpass.com/event/222709/
Akihiro Okuno
October 01, 2021
More Decks by Akihiro Okuno
See All by Akihiro Okuno
My 4 months with Nix
choplin
0
78
An introduction to Claude Code SDK
choplin
3
4.7k
Hack Claude Code with Claude Code
choplin
8
3.8k
Introduction to ScalarDB and ScalarDB Analytics
choplin
0
450
Pre ScalaMatsuri 2020
choplin
2
200
Other Decks in Programming
See All in Programming
才能?センス?知らん、 続けたもん勝ちだ。-- 結婚・出産・癌を越えてなお、私がプロダクトを創り続ける理由
16bitidol
2
900
【やさしく解説 設計編 #1】「ドメイン駆動」と「実装駆動」ってなに? 〜設計の考え方を、たとえ話で学ぼう〜
panda728
PRO
1
120
Terraform標準の組織で AWS CDKをどう使うか
mu7889yoon
1
340
AI がコードを書く時代における新卒エンジニアの仕事風景 (2026) / New Graduate Engineers in the Era of AI Coding (2026)
sushichan044
0
230
信頼性について考えてみる(SRE NEXT 2026 miniLT)
hayama17
0
200
AI 輔助遺留系統現代化的經驗分享
jame2408
1
1.2k
使用 Meilisearch 建立新聞搜尋工具
johnroyer
0
160
act1-costs.pdf
sumedhbala
0
240
5分で問診!Composer セキュリティ健康診断
codmoninc
0
510
言語を使う側から、作る側へ。 自作 Lisp で得た新たな気づき。
andpad
0
130
分散システム、なんですぐ死んでしまうん?耐障害性を高めたいあなたのためのレジリエンスパターン入門
mshibuya
7
6.7k
Built Our Own Background Agent at LayerX #aidevex_findy
layerx
PRO
8
3k
Featured
See All Featured
Skip the Path - Find Your Career Trail
mkilby
1
170
How to Think Like a Performance Engineer
csswizardry
28
2.7k
End of SEO as We Know It (SMX Advanced Version)
ipullrank
3
4.3k
Designing for Timeless Needs
cassininazir
1
390
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
37
6.5k
Navigating the moral maze — ethical principles for Al-driven product design
skipperchong
2
420
[RailsConf 2023 Opening Keynote] The Magic of Rails
eileencodes
31
10k
Thoughts on Productivity
jonyablonski
76
5.3k
Building a Scalable Design System with Sketch
lauravandoore
463
34k
Mobile First: as difficult as doing things right
swwweet
225
10k
The Organizational Zoo: Understanding Human Behavior Agility Through Metaphoric Constructive Conversations (based on the works of Arthur Shelley, Ph.D)
kimpetersen
PRO
0
390
Rebuilding a faster, lazier Slack
samanthasiow
85
9.6k
Transcript
「関数型Webフロントエンド プログラミング」 ひとめぐり @choplin 奥野 晃裕 1 2021/10/01 第一回関数型プログラミング(仮)の会
自己紹介 • 奥野 晃裕 @choplin • CTO @ Splink Inc,
• 専門はデータベース工学 • よく使う関数型言語はScala 2 2021/10/01 第一回関数型プログラミング(仮)の会 - We’re hiring!
はじめに 目的 スコープ 「関数型プログラミング」によって、Webフロントエンドシステムを 記述可能な言語にどんな選択肢があるのかを紹介する • 発表者が恣意的に選択した言語を紹介する • 使ったことのある言語、気になっている言語 •
紹介する言語の数を目的としない • 言語の体系的な整理を目的としない • 発表者による主観的な「よさ」を中心に紹介する • 言語の正確な説明を目的としない • 言語の正しい?評価を目的としない • 言語間の比較を目的としない 3 2021/10/01 第一回関数型プログラミング(仮)の会
ご紹介する言語 • ReasonML, ReScript • Elm • F# + Fable
• Scala.js • PureScript • Rust + wasm • Mint • Gleam • TypeScript + fp-ts 4 2021/10/01 第一回関数型プログラミング(仮)の会 それなりの規模のプロダクト ( > 10K LOC)で使ったことがある ちょっとしたプロダクトで使ったことがある 趣味で少しさわったことがある 最近twitterで見て気になってる 言語としては最も普及してる
ReasonML, ReScript 2021/10/01 第一回関数型プログラミング(仮)の会 5 • ReasonMLとReScriptの関係が分かりにくい • 抽象化はそこそこ。特にMonadicな記述はandThenで 繋げないといけないので見づらい。
気になるところ • JSとの連携がめちゃくちゃやりやすい • Interopが充実している • JSとファイルが1:1でコンパイルされる • Transpile 後のJSが読める! • OCamlの言語機能を大体そのまま使える • React, JSXを強力にサポートしている • JS/TSからの文法などの差が比較的小さい https://rescript-lang.org/ • OCamlのAlt Syntax • JSへtranspileするのはBuckleScript • 見た目も書き味もOCamlっぽい • ReasonMLはFacebookのReact作者の方が 作った • 少し前にBuckleScriptがAlt Syntaxも取り込 んでReScriptになった 気に入ってるところ 概要
Elm 2021/10/01 第一回関数型プログラミング(仮)の会 6 • 抽象化機能は意図的に低くされているため、冗長な記 述をせざるを得ないことが多い • 逆に言うとアプリケーションのコアに集中できるという面もある •
JSとの連携が結構めんどう 気になるところ • 開発体験がすごくいい • 速いコンパイル、分かりやすいエラー、etc. • コンパイルが通った後の安心感がすごい • ランタイムでのエラーはほぼ0 • The Elm Architectureによって よいプラクティスを自然に実践できる • 言語がコンパクトで学習コストがかなり低い • TEAと強力に連携するTime Travelling Debugger • Webアプリケーション記述のために スクラッチから設計された言語 • 初期はFRPをベースにしていたが、大きく方 針転換してかなりシンプルな言語に • https://elm-lang.org/news/farewell-to-frp • 見た目はHaskellっぽいが、↑の方針の一環 で抽象化機能は低くデザインされている • The Elm Architectureというフロントエンド でのデータフローのモデルが優秀で、 他の言語にも広く影響を与えている https://guide.elm-lang.org/ 気に入ってるところ 概要
F# + Fable 2021/10/01 第一回関数型プログラミング(仮)の会 7 • .Net周りの知識は結局ある程度必要になる • コンパイルはちょっと時間がかかる
気になるところ • F#の言語基盤が強力 • 特にCompute Expressionによる抽象化 • ライブラリが充実してる。ReactのDSL(Feliz)や、 TEAっぽいことをするやつ(Elmish)が活発に開発さ れており、UIの記述についてこれらと概ね同じ書き味 で書ける • BabelのASTを経由するので、Babel周りのエコシステ ムに乗っかりやすい • 吐かれたJSがまぁまぁ読める • F#をJSに変換する(Fable) • F#の言語機能はほぼ全て(多分)、標準ラ イブラリも結構使える • コンパイルのインターフェースとして、 dotnet-cliとwebpackの両方から選択できる https://fable.io/ 気に入ってるところ 概要
Scala.js 2021/10/01 第一回関数型プログラミング(仮)の会 8 • UI構築のフレームワークが色々あってスタンダードな ものがない • Scalaっぽく書けるようにしているものが多く、JSerには馴染み にくそう
• JSとの連携はちょっとめんどう • コンパイルはちょっと時間がかかる 気になるところ • Scalaの言語基盤が強力 • コミュニティがScala.jsサポートに協力的な雰囲気が あり、jvm/jsの両対応してるライブラリがおおい • Scalaの一般的なワークフロー(sbt)でそのままフロ ントエンドを書ける • バックエンドとの協調した開発もサポートしている • UI構築のライブラリはSlinkyが好き 気に入ってるところ • ScalaからJSへ変換する • Scalaの言語機能はほぼ全て(多分)、標準 ライブラリも結構使える • Scalaの標準的なビルドツールsbtのプラグイ ンとして提供されている 概要 https://slinky.dev/docs/writing-components/
PureScript 2021/10/01 第一回関数型プログラミング(仮)の会 9 • 抽象化に頭が追いつかない… 気になるところ • とにかく高い抽象化能力 •
一通りの環境の構築がnpmからできて簡単 • コンパイラ、ビルドツール、エディタ連携 etc. • 関数型の設計が自然に身につく(感じがする) • UI構築のフレームワークであるHalogenが優秀 • TEAっぽいAPIで書ける 気に入ってるところ • “A strongly-typed functional programming language that compiles to JavaScript” • Haskell-inspiredで、文法だけでなく、 Haskellで培われた純粋関数型の抽象化手法 を惜しみなく取り入れている • Haskellのセマンティクスでなく、JSのセマン ティクスをもとにして上手く行くかに興味が あり、PureScriptを作ったとのこと • https://leanpub.com/purescript/read#leanpub-auto- about-the-author 概要 https://book.purescript.org/index.html
Rust + wasm 2021/10/01 第一回関数型プログラミング(仮)の会 10 • WebAssemblyの開発環境へのキャッチアップが必要 • WebAssemblyの使いどころが今一分かってない
気になるところ • Rustの言語基盤が強力 • 実用的にWebAssemblyを使うための数少ない選択肢 • UI構築フレームワークのYewはよくできている • TEA風 気に入ってるところ • RustからWebAssemblyへコンパイル • wasm-packがビルドツールとして提供され ている • wasm-bindgenによって、JSとのiteropが実 現されている 概要 https://yew.rs/getting- started/build-a-sample-app
Mint 2021/10/01 第一回関数型プログラミング(仮)の会 11 • まだコミュニティの規模は大きくない(ように見える) • レールが広範囲に用意されているのでそれに乗っかる覚 悟は必要 •
JSとのinteropはあまり用意されてない? 気になるところ • Webアプリケーションの構築に必要なほとんどの要素 が言語として提供されている • 迷うことが少ない。特にStyleの辺り。 • ReactやElmの経験者だと、ほぼすぐに書き始め られるくらい学習コストが低い • 開発体験がすごくいい • 開発サーバー、エディタ連携、 気に入ってるところ • “Mint is a language specifically created for writing single-page applications” • ロジックやデータフローだけでなく、スタイ ルやルーティング、非同期処理までSPAに必 要な全てのものを言語レベルでサポートする • Elm-inspired • シンタックスは独特 概要 https://www.mint-lang.com/
Gleam 2021/10/01 第一回関数型プログラミング(仮)の会 12 • JSのサポートは少し前に入ったばかりなので、UIライ ブラリなどはこれから 気になるところ • 一つの言語でErlan
VMのバックエンドと、Webフロ ントエンドを書けるのは夢がある • ゴリゴリの抽象化機能はないが、ADT、パターンマッ チなどひとまず欲しい機能は揃っている 気に入ってるところ • Erlang VM(BEAM)用のコードにコンパイル する性的型付き言語 • 少し前にJSへのコンパイルをサポートした • シンタックスはRustっぽい 概要 https://gleam.run/news/v0.16-gleam-compiles-to-javascript/
TypeScript + fp-ts 2021/10/01 第一回関数型プログラミング(仮)の会 13 • まとまった量を書いたことがないので、どこまで痒い ところに手が届くか知らない 気になるところ
• 既にTypeScriptで書かれているところでも使い始めら れる • Optionなどの簡単なデータ型だけでなく、型クラスや HKT、Effectなどかなり突っ込んだところまでサポー トしている • fp-tsを中心にしたライブラリが複数あるなど エコシステムがある 気に入ってるところ • TypeScriptで純粋関数型の設計でアプリケー ションを書けるようにするライブラリ 概要 https://dev.to/gcanti/getting-started-with-fp-ts-io-36p6
おわりに • 「関数型プログラミング」でWebフロントエンドシステムを書く選択肢は豊富にある • それぞれの言語で目指しているところ、いいところは様々 • Webフロントエンドシステムを書く機会があったら是非自分にあった言語を探して みてください 14 2021/10/01
第一回関数型プログラミング(仮)の会