Cubby で RESTful な Web アプリを 株式会社ヌーラボ 縣俊貴 Seasar Conference 2008 Autumn
自己紹介 <ul><li>縣俊貴 (id:agt) </li></ul><ul><li>株式会社ヌーラボ </li></ul><ul><ul><li>SI -  アジャイル開発のヌーラボ </li></ul></ul><ul><ul><li>W...
アジェンダ <ul><li>私が Cubby を作った理由 </li></ul><ul><li>Cubby の RESTful サポート </li></ul><ul><li>アプリ作成のデモ </li></ul><ul><li>今後のロードマッ...
私が Cubby を 作った理由 Seasar Conference 2008 Autumn
2006 年 7 月 Seasar Conference 2008 Autumn
Web フレームワーク 戦国時代 <ul><li>Struts </li></ul><ul><li>WebWork2 </li></ul><ul><li>S2JSF </li></ul><ul><li>Teeda </li></ul><ul><...
自分にとってぴったりの フレームワークがない! Seasar Conference 2008 Autumn
ぴったりな ものって? Seasar Conference 2008 Autumn
ぴったりなもの <ul><li>JSP </li></ul><ul><ul><li>嫌われ者だけど、そんなにみんな嫌いなの? </li></ul></ul><ul><ul><li>HTML テンプレートって、意外とつらくない? </li></u...
では、 ぴったりなものを 作ろう! Seasar Conference 2008 Autumn
2006年8月 Cubby 開発開始 Seasar Conference 2008 Autumn
Seasar Conference 2008 Autumn 当初は社内の SI 案件をさくさくこなすために作成
Seasar Conference 2008 Autumn 今ではいろいろと おもしろいサービスに 使われはじめています。 http://tophatenar.com/ http://www.choistudy.jp/ http://haten...
閑話休題 <ul><li>フレームワークやライブラリ作りは経験しておいて損はないと思います。 </li></ul><ul><ul><li>抽象化 </li></ul></ul><ul><ul><li>パターン </li></ul></ul><u...
Cubby の RESTful サポート Seasar Conference 2008 Autumn
2 種類の REST <ul><li>API としての REST </li></ul><ul><ul><li>システム外部公開用の API </li></ul></ul><ul><ul><li>GET/POST/PUT/DELETE による操作...
<ul><li>http://twitter.com/ kis /statuses/ 471755892 </li></ul>Seasar Conference 2008 Autumn
RESTful な Web アプリケーションの嬉しさ <ul><li>将来的にバックエンドのシステムが変わっても、 URI が変更されない </li></ul><ul><ul><li>拡張子なし </li></ul></ul><ul><li>U...
Cubby 以前 <ul><li>#httpd.conf </li></ul><ul><li>RewriteRule ^/users/([0-9]+)? /user.do?userId=$1 </li></ul><ul><li>mod_rewr...
Cubby 以前 URLRewriteFilter Struts など http://example.com/users/agt ・設定ファイルが2つの FW に分散 ・論理的な URI が2つあると、大変 Seasar Conference ...
Cubby では? Cubby http://example.com/users/agt ・設定はアクションクラスに一元化 ・処理の近くに設定があるのでわかりやすい @Path(“/users/{userId}”) Seasar Confere...
@Path <ul><li>@Path(“todo”)  // TodoAction の場合省略可 </li></ul><ul><li>public class TodoAction extends Action { </li></ul><ul...
@Path (パステンプレート) <ul><li>@Path(“todo”)  // TodoAction の場合省略可 </li></ul><ul><li>public class TodoAction extends Action { </...
Cubby でエコ URI <ul><li>貴重な URI をエコに利用する仕組み </li></ul><ul><ul><li>正規表現 </li></ul></ul><ul><ul><li>優先度 </li></ul></ul><ul><ul...
正規表現を使った 柔軟な URI 指定 <ul><li>@Path(”/todo/ {id} ”) -> [a-z][A-Z][0-9]+ </li></ul><ul><li>「 /todo/0fabd3f 」にマッチ </li></ul><u...
優先度 <ul><li>@Path(”/todo/ {id} ”) </li></ul><ul><li>( デフォルト値:     </li></ul><ul><li>   priority=Integer.MAX_VALUE) </li></...
リクエストメソッド <ul><li>import static org.seasar.cubby.action.RequestMethod.*; </li></ul><ul><li>@Accept(GET) </li></ul><ul><li>...
URI マッピングの確認 <ul><li>コンソールログ </li></ul><ul><li>管理サーブレット </li></ul>アクションメソッドを登録します  [regex=^/todo/$,method=public org.seasa...
Path to Entity <ul><li>RESTful の場合、パステンプレートの変数とエンティティの変換だらけ </li></ul><ul><li>/agata/entries/123 </li></ul><ul><ul><li>nam...
Converter の作成 Seasar Conference 2008 Autumn public AccountConverter extends AbstractConverter { public AccountDao accountD...
Converter を使用した Action <ul><li>/agata/entries/123 </li></ul>Seasar Conference 2008 Autumn public EntryAction extends Actio...
その他 Cubby の特徴 <ul><li>設定ファイルレス </li></ul><ul><li>Maven2 による雛形作成 </li></ul><ul><li>直感的なカスタムタグ </li></ul><ul><li>プログラムで書く Va...
デモ Seasar Conference 2008 Autumn
簡単な Wiki を つくってみます。 Seasar Conference 2008 Autumn
ページの構成 Seasar Conference 2008 Autumn ページ 表示 編集 保存処理 GET /pages/{page} POST /pages/{page} GET /pages/{page}/edit
1. プロジェクトの作成 Seasar Conference 2008 Autumn mvn archetype:generate  -DarchetypeCatalog=http://cubby.seasar.org  cd wiki mvn...
2. 各種設定 Seasar Conference 2008 Autumn ・ WTP Server 登録 ・ jdbc.dicon ・ s2jdbc.dicon
3. 作成するファイル Seasar Conference 2008 Autumn 作成済み デモで作成
今後のロードマップ <ul><li>2008 年 2 月  Ver1.0 </li></ul><ul><ul><li>基本機能提供 </li></ul></ul><ul><li>2008 年 8 月  Ver1.1 </li></ul><ul>...
まとめ <ul><li>Cubby は RESTful な Web アプリケーション開発を助けるシンプルなフレームワークです。 </li></ul><ul><ul><li>クールな Web サービスから業務アプリまで。 </li></ul></...
ご清聴ありがとう ございました。 ご質問があればどうぞ。 CM : ヌーラボでは現在東京メンバーを募集中です。 詳しくは Web で! ヌーラボ Seasar Conference 2008 Autumn
Upcoming SlideShare
Loading in …5
×

Cubby 2008-09-06

1,937 views

Published on

Published in: Technology, Business
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
1,937
On SlideShare
0
From Embeds
0
Number of Embeds
61
Actions
Shares
0
Downloads
3
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide
  • Cubby 2008-09-06

    1. 1. Cubby で RESTful な Web アプリを 株式会社ヌーラボ 縣俊貴 Seasar Conference 2008 Autumn
    2. 2. 自己紹介 <ul><li>縣俊貴 (id:agt) </li></ul><ul><li>株式会社ヌーラボ </li></ul><ul><ul><li>SI - アジャイル開発のヌーラボ </li></ul></ul><ul><ul><li>Web サービス </li></ul></ul><ul><ul><ul><li>プロジェクト管理ツール Backlog </li></ul></ul></ul><ul><li>Seasar </li></ul><ul><ul><li>S2Pager/S2XML-RPC/ Cubby </li></ul></ul><ul><li>WEB+DB PRESS </li></ul><ul><ul><li>連載:良いコードへの道 </li></ul></ul>Seasar Conference 2008 Autumn
    3. 3. アジェンダ <ul><li>私が Cubby を作った理由 </li></ul><ul><li>Cubby の RESTful サポート </li></ul><ul><li>アプリ作成のデモ </li></ul><ul><li>今後のロードマップ </li></ul>Seasar Conference 2008 Autumn
    4. 4. 私が Cubby を 作った理由 Seasar Conference 2008 Autumn
    5. 5. 2006 年 7 月 Seasar Conference 2008 Autumn
    6. 6. Web フレームワーク 戦国時代 <ul><li>Struts </li></ul><ul><li>WebWork2 </li></ul><ul><li>S2JSF </li></ul><ul><li>Teeda </li></ul><ul><li>Ruby on Rails </li></ul><ul><li>etc… </li></ul>Seasar Conference 2008 Autumn
    7. 7. 自分にとってぴったりの フレームワークがない! Seasar Conference 2008 Autumn
    8. 8. ぴったりな ものって? Seasar Conference 2008 Autumn
    9. 9. ぴったりなもの <ul><li>JSP </li></ul><ul><ul><li>嫌われ者だけど、そんなにみんな嫌いなの? </li></ul></ul><ul><ul><li>HTML テンプレートって、意外とつらくない? </li></ul></ul><ul><ul><li>JSP2.0 JSTL/ ファンクション / シンプルタグ / タグファイル / </li></ul></ul><ul><li>クール URI </li></ul><ul><ul><li>直感的に楽に使いたい </li></ul></ul><ul><ul><li>自由度は最大限に </li></ul></ul><ul><li>設定ファイルレス </li></ul><ul><ul><li>ただし、わかりにくくなってはだめ </li></ul></ul>Seasar Conference 2008 Autumn
    10. 10. では、 ぴったりなものを 作ろう! Seasar Conference 2008 Autumn
    11. 11. 2006年8月 Cubby 開発開始 Seasar Conference 2008 Autumn
    12. 12. Seasar Conference 2008 Autumn 当初は社内の SI 案件をさくさくこなすために作成
    13. 13. Seasar Conference 2008 Autumn 今ではいろいろと おもしろいサービスに 使われはじめています。 http://tophatenar.com/ http://www.choistudy.jp/ http://hatenarmaps.com/
    14. 14. 閑話休題 <ul><li>フレームワークやライブラリ作りは経験しておいて損はないと思います。 </li></ul><ul><ul><li>抽象化 </li></ul></ul><ul><ul><li>パターン </li></ul></ul><ul><li>みんな俺フレームワークを作ればいいと思います。 </li></ul><ul><ul><li>1人1フレームワーク </li></ul></ul><ul><ul><li>似たフレームワークが乱立しても別にいいじゃない </li></ul></ul><ul><ul><li>失敗してもいいじゃない、人間だもの。 </li></ul></ul>Seasar Conference 2008 Autumn
    15. 15. Cubby の RESTful サポート Seasar Conference 2008 Autumn
    16. 16. 2 種類の REST <ul><li>API としての REST </li></ul><ul><ul><li>システム外部公開用の API </li></ul></ul><ul><ul><li>GET/POST/PUT/DELETE による操作 </li></ul></ul><ul><ul><li>AtomPP/XML/Json/XHTML などによるデータ構造 </li></ul></ul><ul><li>RESTful な Web アプリケーション </li></ul><ul><ul><li>Cool URI </li></ul></ul><ul><ul><li>GET/POST </li></ul></ul><ul><ul><li>HTML/XHTML によるデータ構造 </li></ul></ul>Seasar Conference 2008 Autumn
    17. 17. <ul><li>http://twitter.com/ kis /statuses/ 471755892 </li></ul>Seasar Conference 2008 Autumn
    18. 18. RESTful な Web アプリケーションの嬉しさ <ul><li>将来的にバックエンドのシステムが変わっても、 URI が変更されない </li></ul><ul><ul><li>拡張子なし </li></ul></ul><ul><li>URI がリソースごとに階層化されていて整理されているので、気持ちいい。 </li></ul><ul><ul><li>/{ ユーザ名 }/{ タグ } </li></ul></ul><ul><ul><li>パッケージ名などと同じ </li></ul></ul>Seasar Conference 2008 Autumn
    19. 19. Cubby 以前 <ul><li>#httpd.conf </li></ul><ul><li>RewriteRule ^/users/([0-9]+)? /user.do?userId=$1 </li></ul><ul><li>mod_rewrite </li></ul><ul><li>URLRewriteFilter </li></ul><rule> <from>users/(.*)$</from> <to type=&quot;forward&quot;>user.do?useId=$1</to> </rule> Seasar Conference 2008 Autumn
    20. 20. Cubby 以前 URLRewriteFilter Struts など http://example.com/users/agt ・設定ファイルが2つの FW に分散 ・論理的な URI が2つあると、大変 Seasar Conference 2008 Autumn /user.do?userId=agt
    21. 21. Cubby では? Cubby http://example.com/users/agt ・設定はアクションクラスに一元化 ・処理の近くに設定があるのでわかりやすい @Path(“/users/{userId}”) Seasar Conference 2008 Autumn
    22. 22. @Path <ul><li>@Path(“todo”) // TodoAction の場合省略可 </li></ul><ul><li>public class TodoAction extends Action { </li></ul><ul><li>// /todo/new </li></ul><ul><li>public ActionResult new() { … } </li></ul><ul><li>// /todo/save </li></ul><ul><li>@Path(”save&quot;) </li></ul><ul><li>public ActionResult post() { … } </li></ul><ul><li>} </li></ul>Seasar Conference 2008 Autumn
    23. 23. @Path (パステンプレート) <ul><li>@Path(“todo”) // TodoAction の場合省略可 </li></ul><ul><li>public class TodoAction extends Action { </li></ul><ul><li>public String id ; </li></ul><ul><li>// /todo/{id} </li></ul><ul><li>@Path(”{id}&quot;) </li></ul><ul><li>public ActionResult index() { </li></ul><ul><li>System.out.println(id); </li></ul><ul><li>} </li></ul><ul><li>} </li></ul>Seasar Conference 2008 Autumn
    24. 24. Cubby でエコ URI <ul><li>貴重な URI をエコに利用する仕組み </li></ul><ul><ul><li>正規表現 </li></ul></ul><ul><ul><li>優先度 </li></ul></ul><ul><ul><li>リクエストメソッド </li></ul></ul><ul><ul><li>Submit されたボタンによる振り分け </li></ul></ul>Seasar Conference 2008 Autumn
    25. 25. 正規表現を使った 柔軟な URI 指定 <ul><li>@Path(”/todo/ {id} ”) -> [a-z][A-Z][0-9]+ </li></ul><ul><li>「 /todo/0fabd3f 」にマッチ </li></ul><ul><li>@Path(”/todo/ {id,[0-9]+} ”) </li></ul><ul><li>「 /todo/10001 」にマッチ </li></ul><ul><li>Path(”/icon/ {width,[0-9]+} x {height, [0-9]+} . {ext,png|jpg} ”) </li></ul><ul><li>「 /icon/100x200.png 」にマッチ </li></ul>Seasar Conference 2008 Autumn JSR-311 の仕様も だいたい同じ!
    26. 26. 優先度 <ul><li>@Path(”/todo/ {id} ”) </li></ul><ul><li>( デフォルト値:    </li></ul><ul><li>   priority=Integer.MAX_VALUE) </li></ul><ul><li>@Path(value=”/todo/ list ”, priority=0) </li></ul><ul><li>/todo/ list のほうが優先される </li></ul>Seasar Conference 2008 Autumn
    27. 27. リクエストメソッド <ul><li>import static org.seasar.cubby.action.RequestMethod.*; </li></ul><ul><li>@Accept(GET) </li></ul><ul><li>public ActionResult index() { … } </li></ul><ul><li>@Accept(POST) </li></ul><ul><li>public ActionResult add() { … } </li></ul><ul><li>@Accept(PUT) </li></ul><ul><li>public ActionResult update() { … } </li></ul><ul><li>@Accept(DELETE) </li></ul><ul><li>public ActionResult delete() { … } </li></ul>Seasar Conference 2008 Autumn
    28. 28. URI マッピングの確認 <ul><li>コンソールログ </li></ul><ul><li>管理サーブレット </li></ul>アクションメソッドを登録します [regex=^/todo/$,method=public org.seasar.cubby.action.ActionResult org.seasar.cubby.examples.todo.action.TodoListAction.index(),uriParameterNames=[],requestMethod=GET,onSubmit=null,priority=2147483647,auto=true] … Seasar Conference 2008 Autumn
    29. 29. Path to Entity <ul><li>RESTful の場合、パステンプレートの変数とエンティティの変換だらけ </li></ul><ul><li>/agata/entries/123 </li></ul><ul><ul><li>name=‘agata’ の Account </li></ul></ul><ul><ul><li>id=123 の Entry </li></ul></ul><ul><li>Conveter </li></ul><ul><ul><li>リクエストパラメータの変換機構 </li></ul></ul>Seasar Conference 2008 Autumn
    30. 30. Converter の作成 Seasar Conference 2008 Autumn public AccountConverter extends AbstractConverter { public AccountDao accountDao; public Class<?> getObjectType() { return Account.class; } public Object convertToObject(Object value, Class<?> objectType, ConvertionHelper helper) { if (value == null) { return null; } String name = String.class.cast(value); return accountDao.findByName(name); } public String convertToString(Object value, ConvertionHelper helper) { Account account = Account.class.cast(value); return account.getName(); } } 文字列 (agata) ↓ 変換処理 Entiy(Account) Entiy(Account) ↓ 変換処理 文字列 (agata)
    31. 31. Converter を使用した Action <ul><li>/agata/entries/123 </li></ul>Seasar Conference 2008 Autumn public EntryAction extends Action { @RequestParameter public Entry entry ; @RequestParameter public Account account ; @Path(“/ {account} /entries/ {entry} ”) public ActionResult index(){ … } } Converter で 自動変換!
    32. 32. その他 Cubby の特徴 <ul><li>設定ファイルレス </li></ul><ul><li>Maven2 による雛形作成 </li></ul><ul><li>直感的なカスタムタグ </li></ul><ul><li>プログラムで書く Validation </li></ul><ul><li>続きはドキュメントで! </li></ul>Seasar Conference 2008 Autumn
    33. 33. デモ Seasar Conference 2008 Autumn
    34. 34. 簡単な Wiki を つくってみます。 Seasar Conference 2008 Autumn
    35. 35. ページの構成 Seasar Conference 2008 Autumn ページ 表示 編集 保存処理 GET /pages/{page} POST /pages/{page} GET /pages/{page}/edit
    36. 36. 1. プロジェクトの作成 Seasar Conference 2008 Autumn mvn archetype:generate -DarchetypeCatalog=http://cubby.seasar.org cd wiki mvn eclipse:eclipse
    37. 37. 2. 各種設定 Seasar Conference 2008 Autumn ・ WTP Server 登録 ・ jdbc.dicon ・ s2jdbc.dicon
    38. 38. 3. 作成するファイル Seasar Conference 2008 Autumn 作成済み デモで作成
    39. 39. 今後のロードマップ <ul><li>2008 年 2 月 Ver1.0 </li></ul><ul><ul><li>基本機能提供 </li></ul></ul><ul><li>2008 年 8 月 Ver1.1 </li></ul><ul><ul><li>実践的機能の充実 </li></ul></ul><ul><li>2009 年 Ver2.0 </li></ul><ul><ul><li>他のコンテナ (Spring, Guice) 対応 </li></ul></ul><ul><ul><li>Archetype の機能追加 </li></ul></ul><ul><ul><ul><li>プロジェクトの立ち上げをもっと便利に </li></ul></ul></ul><ul><ul><ul><li>Scaffold </li></ul></ul></ul><ul><ul><li>Extenstion </li></ul></ul><ul><ul><ul><li>今風アプリ作成のサポート </li></ul></ul></ul><ul><ul><ul><li>Flash による進捗バー付きのファイルアップロードダイアログなど </li></ul></ul></ul>Seasar Conference 2008 Autumn
    40. 40. まとめ <ul><li>Cubby は RESTful な Web アプリケーション開発を助けるシンプルなフレームワークです。 </li></ul><ul><ul><li>クールな Web サービスから業務アプリまで。 </li></ul></ul><ul><li>まずは触ってみてください。 </li></ul><ul><ul><li>チュートリアルやサンプルから。 </li></ul></ul><ul><li>要望・フィードバックは ML まで。 </li></ul>Seasar Conference 2008 Autumn
    41. 41. ご清聴ありがとう ございました。 ご質問があればどうぞ。 CM : ヌーラボでは現在東京メンバーを募集中です。 詳しくは Web で! ヌーラボ Seasar Conference 2008 Autumn

    ×