seasarで動いている webサービスcacooの裏側java cloud meeting tokyo 2010 x seasar...
TRANSCRIPT
Java Cloud Meeting Tokyo 2010 x Seasar Conference 2010
Seasarで動いているWebサービスCacooの裏側
株式会社ヌーラボ縣俊貴・吉澤毅
Java Cloud Meeting Tokyo 2010 x Seasar Conference 2010
受託開発
Java Cloud Meeting Tokyo 2010 x Seasar Conference 2010
アジェンダCacoo って何?
Cacoo アーキテクチャ
Cubby で拡張
デザイナーさんと協業
レスポンスの改善
Java Cloud Meeting Tokyo 2010 x Seasar Conference 2010
Cacooって何?
Java Cloud Meeting Tokyo 2010 x Seasar Conference 2010
Java Cloud Meeting Tokyo 2010 x Seasar Conference 2010
Java Cloud Meeting Tokyo 2010 x Seasar Conference 2010
Java Cloud Meeting Tokyo 2010 x Seasar Conference 2010
Java Cloud Meeting Tokyo 2010 x Seasar Conference 2010
リアルタイムコラボレーション
Java Cloud Meeting Tokyo 2010 x Seasar Conference 2010
エクスポート
アップロード
何のため?
Java Cloud Meeting Tokyo 2010 x Seasar Conference 2010
Cacooで解決!
Java Cloud Meeting Tokyo 2010 x Seasar Conference 2010
Java Cloud Meeting Tokyo 2010 x Seasar Conference 2010
Java Cloud Meeting Tokyo 2010 x Seasar Conference 2010
Java Cloud Meeting Tokyo 2010 x Seasar Conference 2010
国内 43%!
海外 57%
44,000ユーザー
120ヵ国2010年6月現在
Java Cloud Meeting Tokyo 2010 x Seasar Conference 2010
Cacoo アーキテクチャ
http://www.flickr.com/photos/kiwi/24658003
Java Cloud Meeting Tokyo 2010 x Seasar Conference 2010
Cacoo を支える OSS プロダクト
Java Cloud Meeting Tokyo 2010 x Seasar Conference 2010
Cacoo を支える OSS プロダクト
Java Cloud Meeting Tokyo 2010 x Seasar Conference 2010
開発のすすめかた•シンプルにつくる• Skype で打ち合わせ• Backlog のタスク、Wiki、 開発中の Cacoo でイメージを共有
Java Cloud Meeting Tokyo 2010 x Seasar Conference 2010
Cubby で拡張
http://www.flickr.com/photos/17258892@N05/2588347668
Java Cloud Meeting Tokyo 2010 x Seasar Conference 2010
Cubby•Web App フレームワーク•シンプルで小さい(薄い)•設定ファイルをほとんど使わない• REST っぽい URI サポート•コミッターが社内にいる
Java Cloud Meeting Tokyo 2010 x Seasar Conference 2010
AOP を使わずに拡張していく
Plugin
• invokeAction
• invokeActionResult
• invokeRequestProcessing
• invokeRouting
• invokeValidation
Java Cloud Meeting Tokyo 2010 x Seasar Conference 2010
Cacoo 拡張実例
Java Cloud Meeting Tokyo 2010 x Seasar Conference 2010
認証@Auth@Protocol(value = HTTPS, redirect = true)
@Path("diagrams")public class DiagramsAction
extends BaseAction {
Java Cloud Meeting Tokyo 2010 x Seasar Conference 2010
プロトコル@Auth@Protocol(value = HTTPS, redirect = true)
@Path("diagrams")public class DiagramsAction
extends BaseAction {
URL 変更に柔軟に対応
Java Cloud Meeting Tokyo 2010 x Seasar Conference 2010
http://www.flickr.com/photos/liberato/2275622210/
HEAD メソッド対応
Java Cloud Meeting Tokyo 2010 x Seasar Conference 2010
レシピ1. AbstractPlugin を継承したクラス作成2. 拡張したいポイントをオーバーライド3. /META-INF/services/org.seasar.cubby.plugin.Plugin 作成4.クラス名を記述 (FQCN)
plugins.HeadSupportPlugin
Java Cloud Meeting Tokyo 2010 x Seasar Conference 2010
public class HeadSupportPlugin extends AbstractPlugin {
@Override public PathInfo invokeRouting(final RoutingInvocation invocation)
throws Exception { final PathInfo pathInfo = super.invokeRouting(invocation); if (pathInfo != null) { return pathInfo; }
final HttpServletRequest request = invocation.getRequest(); if (!request.getMethod().equals(RequestMethod.HEAD.name())) { return null; }
final PathResolver pathResolver = invocation.getPathResolver(); final String path = invocation.getPath(); final PathInfo headPathInfo =
pathResolver.getPathInfo(path, RequestMethod.GET.name(), request.getCharacterEncoding());
return headPathInfo; }}
Java Cloud Meeting Tokyo 2010 x Seasar Conference 2010
Cubby
拡張しやすい
綺麗な URI を作成できる
JSON を返す API を簡単に作成
Java Cloud Meeting Tokyo 2010 x Seasar Conference 2010
デザイナーさんと協業
http://www.flickr.com/photos/fncll/145149313/
Java Cloud Meeting Tokyo 2010 x Seasar Conference 2010
Mayaa•HTML テンプレートエンジン•HTML/XHTML で記述•テンプレート切り替え
デザイナーさんとの協業多言語対応
Java Cloud Meeting Tokyo 2010 x Seasar Conference 2010
1.プロトタイプ
使いやすさを追求
Java Cloud Meeting Tokyo 2010 x Seasar Conference 2010
2.イメージをつくる
フィードバックをたくさんする
Java Cloud Meeting Tokyo 2010 x Seasar Conference 2010
3.HTML/CSS 制作
id/class のルール重要
Java Cloud Meeting Tokyo 2010 x Seasar Conference 2010
4.Mayaa で仕上げる
動的なコンポーネントを含めてもらう
Java Cloud Meeting Tokyo 2010 x Seasar Conference 2010
5.多言語対応
Java Cloud Meeting Tokyo 2010 x Seasar Conference 2010
Mayaa
最初がハマりやすい
公式ドキュメントを参照すでにメーリングリストで質問されている
HTML コーダーが修正しやすい
プログラマーが歩み寄る
Java Cloud Meeting Tokyo 2010 x Seasar Conference 2010
MayaaCubby カスタムタグの連携を容易にする拡張
http://d.hatena.ne.jp/ko-suga/20090730/1248940538
Java Cloud Meeting Tokyo 2010 x Seasar Conference 2010
レスポンスの改善
http://www.flickr.com/photos/dougww/979176911
Java Cloud Meeting Tokyo 2010 x Seasar Conference 2010
通信速度、距離の問題
Java Cloud Meeting Tokyo 2010 x Seasar Conference 2010
サーバーキャッシュ
Ehcache
Java Cloud Meeting Tokyo 2010 x Seasar Conference 2010
ブラウザキャッシュ
Java Cloud Meeting Tokyo 2010 x Seasar Conference 2010
タイムスタンプ<img src="/account/yoshizawa/image/20x20?t=1275242889248" />
<script src="/js/lib/cacoo.js?1.23" type="text/javascript"></script>
サボりがちなものの効果大
Java Cloud Meeting Tokyo 2010 x Seasar Conference 2010
Mayaa 応用<script src="/js/lib/cacoo.js?1.23" type="text/javascript"></script>
InjectionResolver を拡張し、 pom.xml のバージョンを設定
Hudson でリリースモジュールを作成し、バージョン上げ漏れを発生させない
Java Cloud Meeting Tokyo 2010 x Seasar Conference 2010
回線速度やレイテンシの問題
日本国内
海外
EC2+CloudFront
0 5 10 15 20
2
20
0.7
cacoo.swfのロード時間(秒)
Java Cloud Meeting Tokyo 2010 x Seasar Conference 2010
CacooはSeasarプロダクトを基盤として動作しています。
まとめ
Seasarを使うことによってサービス開発に集中できました。
Seasarを使って魅力的なサービスをじゃんじゃんつくっちゃいましょう!
Java Cloud Meeting Tokyo 2010 x Seasar Conference 2010
ご清聴ありがとうございました。