Upgrade to Pro — share decks privately, control downloads, hide ads and more …

型付きWebフレームワークで遊んでみた

Sponsored · SiteGround - Reliable hosting with speed, security, and support you can count on.

 型付きWebフレームワークで遊んでみた

発表時間5分の社内LT大会で使用した資料です(実名・所属など一部改変)。
OCamlのWebフレームワークOcsigenを使ってみたので、その簡単な紹介となっています。

Avatar for kokuyouwind

kokuyouwind

July 14, 2014
Tweet

More Decks by kokuyouwind

Other Decks in Programming

Transcript

  1. $ whoami • Web開発 3年目(PHP Only) • Twitter : @kokuyouwind

    • ブログ : blog.kokuyouwind.com • ニコニコミュニティ : co1347624 • ポーカー好き このアイコンの人→
  2. 基本記法 {shared{ type message = string }} {client{ let _

    = Eliom_lib.alert "Hello!" }} let main_service = (* ... *) 共通コード クライアントコード サーバーコード
  3. サービス定義 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型の値を生成
  4. サービス定義 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じゃない)
  5. サーバー変数埋め込み let message = “hello” {client{ let _ = Eliom_lib.alert

    “%s” %message }} ↑ %hogeでサーバー側の 変数を参照
  6. サーバー変数埋め込み let message = 0 {client{ let _ = Eliom_lib.alert

    “%s” %message }} ↑ Stringじゃないので エラーになる
  7. サーバー変数埋め込み let message = 0 {client{ let _ = Eliom_lib.alert

    “%s” (string_of_int %message) }} ↑ これならオーケー
  8. 他にも… • Bus, React – イベントをやりとりする – 前者がEvent Driven, 後者がReactive

    – 型が合わないとコンパイル時にエラー • Ajaxでのjsonとかの呼び出し – service定義を参照してurlを生成 – 型が合わないとコンパイル時にエラー
  9. Ocsigenプロジェクト • OcsigenServer : Webサーバ • Eliom : Webフレームワーク •

    Js_of_ocaml : JSコンパイラ • Lwt : 並列計算ライブラリ • 他色々 – http://ocsigen.org/overview/framework
  10. ページサイズ • HTML : 3.39KB – 通信用の識別子とかが埋め込まれている • JavaScript :

    282.39KB – OCamlバイトコード => JavaScriptコード – 直接読むのは多分辛い – 実行はかなり高速らしい • VM実行OCamlよりも速い場合があるとのこと
  11. 参考 • 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