SlideShare a Scribd company logo
Scotty + Aeson + Persistentで作るJSON Web API
株式会社Aiming 藤村大介
@ Yesod勉強会第2回, 2012-07-07
自己紹介

• 藤村大介

• http://fujimuradaisuke.com @ffu_
• 株式会社Aiming所属

• Haskell好きのRuby on Railsプログラマー

• 最近はJavaScript/CoffeeScriptもよく書いている

• アジアの料理とアメリカのビール、アルザスのワインが好き

• ラテンアメリカ文学も好き
ところで、なぜ今JSON Web APIなのか

• なんだか最近JSON Web APIを作る機会が多い

• 一つのアプリケーションを複数クライアントで動かす事例が増えてきた

• Mobile, PC, iOS/Android Native全部に展開とか

• フロントエンドでUIを構築する技術の発達・浸透

• クライアント・サーバーの分業は進みそう
突然ですがYesodはいまいちだと思う

• 最近Webデザイン/フロントエンド開発が一段と難しくなってきた気がする

• なのでクライアント/サーバーで分業ができないと厳しい

• みなさんHamletとCassiusでプロダクションレベルのレスポンシブなマーク
  アップできますか?


• ようやくsass/lessが浸透してきたのにまた新しい技術を…

• しかもほとんど一緒だし…

• Web APIとして使うとなるとフルスタックの度が過ぎる

• なぜ使う予定のない認証ライブラリのインストールを求められるのか
そこでWeb APIはscottyで作ろうではないか

• Web API作りはDBアクセスとルーティングさえできれば基本OK

• 例えばRubyだとWeb API作る時Railsではなくsinatraってのはよくある

• ライブラリの依存関係は少ないほうが何かと幸せ

• DBはpersistent、JSONはaesonでやってみよう
scottyについて

• RubyのsinatraインスパイアのWeb Application Framework

• https://github.com/xich/scotty/
• シンプルなAPI

• Yesodと同じくwaiベース
aesonについて

• Real World Haskellの著者、Bryan O'Sullivanさんの作ったJSONライブラリ

• https://github.com/bos/aeson
• まるでJSONのような構文で書けるDSL(?)が大変便利

• 速いらしい
persistentについて

• ご存知Yesod同梱のORM

• (しかし、”Object”にマッピングされてる気配は全く無い)


• http://www.yesodweb.com/book/persistent
• PostgreSQL, SQLite, MongoDB, MySQLに対応

• QuasiQuoteでテーブル定義、マイグレーションもある

• 型チェック付きのSQLって感じで使いやすい
できました

• 結論から言うととても幸せな組み合わせでした
persistentとaesonの相性がすばらしかった(1)

• テーブル定義したら、それをToJSON/FromJSONのインスタンスにする
persistentとaesonの相性がすばらしかった(2)

• すると、DBの行をJSONとして扱える(ToJSONのインスタンスになるので)

• なので、scottyでそのままJSONレスポンスとして返せる
persistentとaesonの相性がすばらしかった(3)

• 今度はテーブルと同じスキーマのJSONをPOSTすると、

• そのまま行としてDBに入れられる(FromJSONの行として受け取れるから)
これはかなりエレガントなのでは

• この記述量でDBからの取得/DBへの追加ができます

• すごい!
キラーライブラリの予感

• 依存関係が少ないのでコンパイルも楽

• 型クラスを活かせる

• Web APIならHaskellでもクライアント開発との協働も問題なし

• むしろランタイムエラーが無いのでクライアント開発は幸せ
余談

• ちなみに位置情報系のWebサービスを作ろうとしてました

• クライアントはBackbone.js, CoffeeScript、Google Mapsあたりを利用

• 実際のところ、クライアントのコードを書いてる方が長かった…

• HTMLテンプレートはmustacheを使った。これも良かった

• まだ複雑なことをやってないので、落とし穴がありそう

• 認証まわりはまだ未着手。落とし穴はここか…?

• Template Haskellを使ったらToJSON/FromJSONにするのも自動でできそうな
 気が…
おわり

• ご清聴ありがとうございました!

More Related Content

Scotty + Aeson + Persistentで作るJSON Web API

Editor's Notes

  1. \n
  2. \n
  3. \n
  4. \n
  5. \n
  6. \n
  7. \n
  8. \n
  9. \n
  10. \n
  11. \n
  12. \n
  13. \n
  14. \n
  15. \n
  16. \n