発表時間5分の社内LT大会で使用した資料です(実名・所属など一部改変)。 OCamlのWebフレームワークOcsigenを使ってみたので、その簡単な紹介となっています。
型付きWebフレームワークで遊んでみた@kokuyouwind
View Slide
$ whoami• Web開発 3年目(PHP Only)• Twitter : @kokuyouwind• ブログ : blog.kokuyouwind.com• ニコニコミュニティ : co1347624• ポーカー好きこのアイコンの人→
先週のハッカソン
テーマ:出会い
出会い → 協調作業
協調作業 → 一緒にお絵かき
お絵かきアプリだ!
デモhttp://draw.kokuyouwind.com/
screenshot
普通じゃね?
面白い所:HTMLもJavaScriptも書いてない!
Haml? TypeScript?
いえいえ
全てOCamlです!
Code on Githubhttps://github.com/kokuyouwind/ocsigen-tutorialロジック部分は全てOcamlコードgraffiti.eliomは150行弱
謝罪
さっきのデモはチュートリアルの丸写しです正直すまんかった
Ocsigenhttp://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