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

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

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

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

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