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
型付きWebフレームワークで遊んでみた
Search
kokuyouwind
July 14, 2014
Programming
1
1.8k
型付きWebフレームワークで遊んでみた
発表時間5分の社内LT大会で使用した資料です(実名・所属など一部改変)。
OCamlのWebフレームワークOcsigenを使ってみたので、その簡単な紹介となっています。
kokuyouwind
July 14, 2014
Tweet
Share
More Decks by kokuyouwind
See All by kokuyouwind
APMをちゃんと使おうとしたら、いつのまにか独自gemを作っていた話
kokuyouwind
0
440
RBS meets LLMs - Type inference using LLM
kokuyouwind
0
610
オンラインボードゲームを作りたい人生だった
kokuyouwind
0
270
1年間本番運用してわかった、スタートアップこそAWS Copilot CLIを使うべきNつの理由
kokuyouwind
2
9.8k
なるべく楽したいAWSセキュリティ
kokuyouwind
1
32
Railsパフォーマンス・チューニング入門
kokuyouwind
0
190
Rubyパターンマッチに闇の力が備わり最強に見える
kokuyouwind
0
48
Slackワークフロー活用術
kokuyouwind
0
55
10分で作る勉強会アプリ
kokuyouwind
0
31
Other Decks in Programming
See All in Programming
Timeline エディター拡張入門
yucchiy
0
440
FoodGram
iseruuuuu
0
230
Goのmultiple errorsについて (2024年4月版)
syumai
4
1.3k
最近コードレビューで指摘したこと
forrep
3
110
GitLab CI/CD で C#/WPFアプリケーションのテストとインストーラーのビルド・デプロイを自動化する
hacarus
0
590
RailsConf 2024: Riffing on Rails: sketch your way to better designed code
kaspth
0
200
Komplexe Oberflächen mit SVG und der Web Animation API
joergneumann
0
690
Runtime Objects in Rust
mitsuhiko
0
190
Save Time (by Creating Custom Rails Generators)
garrettdimon
PRO
0
100
ソースコードを美しくたもつために ~コードレビューの認知限界を突破し、年間400リリースを達成する~
kotauchisunsun
1
150
GitHub Actionsの痒いところを埋めるサードパーティーランナー
dora1998
1
140
Introducing Kotlin Multiplatform in an existing mobile app - Workshop Edition | AndroidMakers Paris
prof18
0
170
Featured
See All Featured
Gamification - CAS2011
davidbonilla
77
4.6k
For a Future-Friendly Web
brad_frost
172
9k
GraphQLの誤解/rethinking-graphql
sonatard
56
9.3k
Easily Structure & Communicate Ideas using Wireframe
afnizarnur
188
16k
ParisWeb 2013: Learning to Love: Crash Course in Emotional UX Design
dotmariusz
104
6.7k
[RailsConf 2023 Opening Keynote] The Magic of Rails
eileencodes
14
8.4k
A designer walks into a library…
pauljervisheath
201
23k
The Invisible Side of Design
smashingmag
294
49k
Docker and Python
trallard
35
2.7k
The Invisible Customer
myddelton
114
12k
How GitHub Uses GitHub to Build GitHub
holman
468
290k
Embracing the Ebb and Flow
colly
80
4.2k
Transcript
型付きWebフレームワークで 遊んでみた @kokuyouwind
$ whoami • Web開発 3年目(PHP Only) • Twitter : @kokuyouwind
• ブログ : blog.kokuyouwind.com • ニコニコミュニティ : co1347624 • ポーカー好き このアイコンの人→
先週のハッカソン
テーマ:出会い
出会い → 協調作業
協調作業 → 一緒にお絵かき
お絵かきアプリだ!
デモ http://draw.kokuyouwind.com/
screenshot
普通じゃね?
面白い所: HTMLもJavaScriptも 書いてない!
Haml? TypeScript?
いえいえ
全てOCamlです!
Code on Github https://github.com/kokuyouwind/ocsigen-tutorial ロジック部分は全てOcamlコード graffiti.eliomは150行弱
謝罪
さっきのデモは チュートリアルの丸写しです 正直すまんかった
Ocsigen http://ocsigen.org/
基本記法 {shared{ type message = string }} {client{ let _
= Eliom_lib.alert "Hello!" }} let main_service = (* ... *) 共通コード クライアントコード サーバーコード
サービス定義 let main_service = Eliom_registration.Html5.register_service ~path:[“hello"] ~get_params:Eliom_parameter.unit (fun () ()
-> Lwt.return (html (head (title (pcdata “hello")) []) (body [h1 [pcdata “hello, world!"]]))) Html型の値を生成
サービス定義 let main_service = Eliom_registration.Html5.register_service ~path:["graff"] ~get_params:Eliom_parameter.unit (fun () ()
-> Lwt.return (html (head (title (pcdata "Page title")) []) (body [ul [pcdata "Graffiti"]]))) ↑コンパイル時に型エラー (ulの子要素がliじゃない)
サーバー変数埋め込み let message = “hello” {client{ let _ = Eliom_lib.alert
“%s” %message }} ↑ %hogeでサーバー側の 変数を参照
サーバー変数埋め込み let message = 0 {client{ let _ = Eliom_lib.alert
“%s” %message }} ↑ Stringじゃないので エラーになる
サーバー変数埋め込み let message = 0 {client{ let _ = Eliom_lib.alert
“%s” (string_of_int %message) }} ↑ これならオーケー
他にも… • Bus, React – イベントをやりとりする – 前者がEvent Driven, 後者がReactive
– 型が合わないとコンパイル時にエラー • Ajaxでのjsonとかの呼び出し – service定義を参照してurlを生成 – 型が合わないとコンパイル時にエラー
まとめ • Ocsigenだと全部Ocamlで書ける • コンパイル時点で型起因のバグは弾く • コードが割と短くなる • 学習コストは結構高い •
名古屋こわい • ことりちゃんかわいい http://tkotori.github.io/
終わり from @mzp
以下予備スライド
Ocsigenプロジェクト • OcsigenServer : Webサーバ • Eliom : Webフレームワーク •
Js_of_ocaml : JSコンパイラ • Lwt : 並列計算ライブラリ • 他色々 – http://ocsigen.org/overview/framework
ページサイズ • HTML : 3.39KB – 通信用の識別子とかが埋め込まれている • JavaScript :
282.39KB – OCamlバイトコード => JavaScriptコード – 直接読むのは多分辛い – 実行はかなり高速らしい • VM実行OCamlよりも速い場合があるとのこと
ことりちゃん? • 高階ことり • モナドの薄い本のイメージキャラクター – @dico_lequeさんの本(予定) – @bleisさんと@mzpさんの差し金 •
ことりちゃん可愛い • http://tkotori.github.io/
参考 • Ocsigenプロジェクトページ – http://ocsigen.org/ • OCamlで構築するモダンWeb – http://proofcafe.org/~keigoi/pplss2012- ocaml.pdf
• OCamlで作ったWebアプリをHerokuで 動かす方法(2) – http://mzp.hatenablog.com/entry/2013/06 /08/003029