Stellaqua - TOMの技術日記 このページをアンテナに追加 RSSフィード

2008年09月14日

[][]RESTfulWebサービス読書会第5回に行ってきた

今回は(今回も?)、読書会というよりは、おしゃべり会みたいな感じで、AtomPubの話題を中心にREST議論をしてきました。

話の中心は、「はてなダイアリーのAtomPubって何か気持ち悪いよね」という話題でした。

もう既に各所で言われている話とは思いつつも、自分でリソース設計とかする時の参考になるかも、という期待を沿えて、簡単に書いておこうかと思います。

まずは、はてなダイアリーのAtomPub対応の仕様へのリンクを貼っておきます。

はてなダイアリーAtomPubとは - はてなキーワード

話に挙がった"気持ち悪さ"の一番は、下書きエントリーを公開する時のやり方で、こんな感じのリクエストを投げるようになっています。

PUT /はてなID/atom/blog/20080101/XXXXXXXX
X-HATENA-PUBLISH: 1

※話の中で挙がったんですが、"blog"は"draft"の間違いですよね…きっと…。

こういう仕様になったのは、色々と都合もあっての事だとは思うんですが、せっかくAtomPubに対応したのに、AtomPubの仕様として用意されている下書きの機能(app:draft)を使わずに、下書きという別リソースにしたのは何でだろうね?…という辺りがその場でのみんなのツッコミどころでした。

想像するに、はてな"ダイアリー"である以上、日付ベースのデータ管理になっていて、今更、他の形式の管理には変えられないというのが一番のネックになっているんだろうなとは思いますが…。

で、AtomPub的にどうかというのは置いておいたとして、記事リソースと下書きリソースという2つのリソースに分けるというリソース設計なんだという立場で見たとしても、"X-HATENA-PUBLISH"という独自のヘッダを使うのは、REST的に美しくないよね…という話もしました。

あと、リソース設計する時に気を付けないといけないなと思った点として、例に挙げた下書き公開操作は、結局のところ、

  • 下書きリソースの内容を取得
  • その内容で新しく記事リソースを作成
  • 下書きリソースを削除

という3つの動作が内部的に行われる事になるはずなので、最初、「GET→POST→DELETEってクライアント側がリクエストを投げるようにすればいいんじゃないの?」と思ってしまったんですが、いずれかのリクエストが失敗した時の整合性が取れなくなってしまうので、これら3つは一連の操作として行われなければいけないんですね…。

こういった、"下書き"→"公開"みたいに、状態を別リソースとして定義していて、その状態を変化させるリクエストを投げたい場合は、状態変更専用のリソースを別途定義しておいて、パラメータとして元の状態のリソースのURIを渡す…というのがスマートな方法かなという話になりました。

はてなダイアリーの場合だと、

PUT /publication?drafturi=/はてなID/atom/blog/20080101/XXXXXXXX

みたいな感じ?*1

まぁ、今までRESTfulな読書会をずっとやってきていて、「何を今更…」と言われそうですが(^^;、具体例としてこういった事例を見ないと、なかなか感覚的に分からないので、今回、目の前にある具体例として、はてなダイアリーのAtomPub実装をベースに議論できたのは良かったなぁと思います。

という訳で、「やっぱり具体的にやってみなきゃ分かんないところも多いよね…」という事もあるし、ちょっと作りたいサービスもあったので、バックエンドをRESTfulに設計してみようかなと思って、今日はインフラ部分を色々とやっていました。

自分で一から実装するのは面倒臭いし、せっかくの機会だからと思って、まだ右も左も分かっていないRailsに手を出してみた訳ですが、Railsとは直接関係無いところで色々と時間を掛けてしまい、やっとこさ「scaffoldで作ったbookmarkリソースにGETしたら、XMLで結果が返ってきたよ、わ〜い♪」というところに辿り着いた辺りで力尽きてしまいました。(^^;ゞ

Rails(およびRuby)はまだ全然分かってないので、勉強しつつボチボチやっていこうと思います。

*1:でも、「状態を変える」という動詞的な意味合いが強い感じがするから、何となく違和感があるような気がしてしまうなぁ…。(^^;

2008年07月22日

[][]PHPカンファレンス2008に行ってきた

ブログに書くまでが遠足勉強会」メソッドということで、報告エントリです。

という訳で、PHPカンファレンス2008に行って参りました。

それぞれの講演内容なんかは、素晴らしい配信スタッフの方々のおかげで、ニコニコ動画で絶賛公開中、今なら誰でもツッコミし放題!な状態なので、内容のまとめとかはしない方向で…。

で、やっぱりお目当ては、パネルDISカッションの「激論!PHPの次に学ぶ言語はこれだ」だった訳ですが、この企画はホントにGJですね。最初にこのタイトルを見た時は、「何とマゾヒズムな!」とか思ってたんですけど、別に、各界隈の大御所がみんなでよってたかってPHPDISる会って訳でもなく(笑)、それぞれの方の立ち位置からの色々な考え方が聞けて面白かったですね〜。

結局のところ、PHPがどうのこうのという話ではなく、それぞれの言語がそれぞれの文化を持っている訳で、適材適所で必要な言語を使っていけばいいだけだよね…っていうのが、パネルディスカッションを聞き終わったところでの端的な感想です。

ただ、"適材適所に"とは言っても、PHPPerlRubyJavaも…と、全部を全部知っていないといけないのかというと、そういう訳ではなくて、もっと根本的な部分…それこそ、「コンピュータってどうやって動いてるの?」とかを知っているのが重要な気がします。

PHPしか知らないのは問題」というような話も途中で少し出てたと思いますが、プログラミングより下位のレイヤの知識があれば、別にどの言語を使っているかというのは、あまり問題にならないような気もします。必要になった時に必要な言語を習得すればいいだけの話ですよね。

そんな事を考えていくと、次に学ぶ言語は、アセンブラですかね。(笑)


ま、そんな訳で、前日のHackathonも含めて、非常に楽しい2日間でした。さて、次の前日Hackathonに向けて、ネタ集めしなきゃね〜。(笑)

2008年07月20日

[][]PHPCon前日Hackathonの中からレポートしてみる

PHPCon前日Hackathonに来ています。

2008-06-24 - kunitの日記

細かい感想はまた後で書くかもしれないけど…これ、何て社員旅行?(笑)

パッと見、ほとんどの人が浴衣でリラックスモードで、どこから見ても社員旅行ですが、集まってるメンバがスゴくて、そこら中でスゴい話をしてるという…何という異様な光景…。

また終わった後に感想書きたいと思いますが、取り急ぎ速報まで。

(07/21 03:00追記)

社員旅行と言うよりは、修学旅行って言う方が合っている気がしてきました…。この時間になっても、半分以上起きてるなんて…。しかも、次々と色々なところで成果が上がっているみたいだ…。まだ起きている皆さん、廊下で正座にならないように控えめにね。(笑)

(07/21 15:00追記)

前日Hackathonは既に終了しましたが、ブログに書くまでが(ry

結局、自分は全徹組になってしまった訳で…。おまけ本番のPHPカンファレンスは、ずっとラリホーのターンだった訳で…。ふと見渡してみると、Hackathon組は軒並み休憩時間にバタバタと眠りに付いていく訳で…。

そんなこんなで、とっても楽しい修学旅行(?)はあっという間に終わってしまいました。

さて、後のセッションは寝ちゃわないように頑張らないと…。

2008年07月15日

[][]RESTfulWebサービス第4回読書会に行ってきた

ブログに書くまで勉強会です。」とは思いつつも、帰ってきてすぐに書かないと書かないままになりがちな罠…。(^^;ゞ 第3回読書会の分の感想は、エントリ上げてさえなかったよ…。

という事で、ちょっと間が空いてしまいましたが、RESTfulWebサービス第4回読書会に行ってきたので、感想なんかをさくっとだけ。

本書の方の盛り上がりが第4章と第8章にあるのもあって、前回の第8章激論大会からすると、少し落ち着いた感じだったかもしれませんね。第9章は割と細かい技術の話の総まとめみたいなところなので、すいません…あんまり、感想も無いです。(^^;

後半は次回以降の話になっていた訳ですが、自分自身はRESTで泥のように開発した経験がある訳ではないので、経験者の方に話を聞きつつ、擬似的にでもRESTfulなサービスの設計をしてみるっていうのが面白そうかなと思います。

まぁ、そんな事言ってる間に、自分で何かさくっと作ってみて、その上で読書会にフィードバックする…っていうのが真のエンジニアたる姿かもしれないですね…。ちょっと作ってみたいものはあるので、REST的な設計でできないか考えてみるメソッドを発動しよう…。


そして、今回のゲスト講演(?)は、えーじさんのOpenSocialのお話。

OpenSocial自体は、自分自身がちょっと勉強不足なところもあるので、もっと勉強しないといけないんですが…OpenSocial自体というよりは、ネット上でのコミュニティがどうあるべきかっていう事に興味がある今日この頃…。それはまた別の話なので、別途考えてみる…。


それから、もう一コマは、id:kunitさんのURI Templateのお話。

今のところ、自分で使ってごにょごにょな事も無いので、そこまで突っ込んだ話はできないんですが、個人的な感覚では、draft-01ぐらいな簡単なものがあれば十分じゃね?とか思ってしまうんですが、それは素人考えなんでしょうか…。


あと、途中、HTML5の話になっていた時に、id:ZIGOROuさんがLingrでボソっと呟いていた、HTML5だとフォームのinputタグでカレンダーでの日付選択が使えるようになったとの話を受けて、Operaの最新版でさくっと試してみたんですが、こんな選択画面が出てきました。(inputタグでtype="date"ってしただけのものです。)

f:id:stellaqua:20080715201533p:image

まぁ、便利かどうかはともかくとして、「なんかスゲー」と素直に感激しました。(笑) HTML5はこういうのが色々と増えるのはいいんですが、使う場面があるのかしらん…。ちなみに、Firefox3ではまだ対応してないみたいですね。


という事で、読書会に参加して頂いた皆様、どうもありがとうございました&お疲れ様でした。m(_ _)m

2008年06月22日

[][]RubyKaigi++

6/20〜22と3日間に渡って開催された、日本Ruby会議2008に行って参りました。「ブログに記事を書くまでが勉強会」って事で、報告を…。

いや〜エキサイティングな3日間だった…。全体的にレベルが尋常じゃないですね…技術レベルも会場もスタッフも…。

もう、色々と得る物が多過ぎて、インプット過多状態なんですが、少しずつ咀嚼して、アウトプットに変えていこうと思います。

今の時点で一番印象に残っているのは、今日、大ホールの方で発表されていた、id:darashiさんのJpmobileですかね。

携帯関係のノウハウってバッドノウハウの集大成みたいになっちゃいがちなので、ライブラリとかで吸収できると、すごい楽できるんですよね。これだけ機能が揃っているライブラリを作られたid:darashiさんには感服いたします。これも、スープカレーパワーなんでしょうか。(笑)

もう「携帯サイト作る時は、Rails+Jpmobileでいいんじゃね?」とまで思ってしまうような気も…。まぁ、まずはRubyのお勉強からですかね…。

会場で先行販売していた"初めてのRuby"を買ってきたので、まずはここから始めてみたいと思います。

初めてのRuby

初めてのRuby

ということで、RubyKaigi++。

Rubyには"++"は無いらしいのですが、わざとです。(笑)