appengineをscalaで
しばくぜ!#ajn6ライトニングトーク
@marblejenka
自己紹介
@marblejenka
•普段のお仕事
• java/c++な金融系業務システム開発
• appengineとの関わり
• balmysundaycandyというlower level apiなライブラリ群を作り中(scalaからappengineを呼ぶ、サービス呼び出しを捕捉してロギングする、非同期サービス呼び出しをサポートする、など)
• appengine ja hack-a-thonもやってます!
• お仕事で使えたらいろいろ面白いとは思ってます。
Why scala?(today’s goal)
その前に!
lower level apiとは!
lower level api• appengineにおけるサービス呼び出しは他ノード(?)とprotocol
bufferでrequest/responseをやりとりして実現されている
• 呼び出しは、ApiProxy.makeSyncCall(String serviceName, String methodName, byte[] request)を経由する
• この周辺のAPIをlower level apiと読んでいる
• APIの内部構造はそれなりに整理/公開されつつあり、見る価値はむしろ減ってきている(lower level apiが最下層ではなく、appengine上でのstub実装とdatastore/bigtableが連携して機能している)
• とはいえ、サービス呼び出しの最小粒度のインターフェイス
scala!
scala
• オブジェクト指向の特性と関数型の特性を兼ね備えている
• 静的型付け&型推論やtraitなど、様々な仕組みで記述性を高めている
• クラスファイルをアウトプットとすることができるため、JVM上で動作する
• インタプリタ的に対話的な実行を行うことも可能(REPL)
• javaのライブラリを呼び出すこともできる
balmysundaycandy-scalaとは!
• appengineのリモートAPIを実現するscala interpreterの拡張
• インタプリター上の対話的なコードにおいて実行されるサービス呼び出しをappengineに処理させる
• 関数全体をappengine上で動作させることもできる、様にしたい(サービス呼び出しの単位でover httpしたくないケース)
• 実行しているappengineでのサービス呼び出しの内容を見ることもできる
• 意外と使いでがありそうなので、ちゃんと実装する予定
balmysundaycandy-scala
balmysundaycandy-scala
対話的に!(demo!)
サービス呼び出しの捕捉!(demo!)
Wrap Up!
why scala?• 対話的に実行することができる
• デプロイ不要、簡単、appengine/javaでも使えるようになると思います
• low level apiの構造が自然と見える
• keyの内部構造はgoogle/ioなどで表現されている記法と同じ
• queryも内部的にはGQLライクなものを生成している
• さらに!lower level apiの構造も見ることができる!!
• entity groupなどの概念がどう実装されているか見ることができる
• 一部のマニア層からは大絶賛の嵐
Thank You!
Recommended