2008-01-28

RFC 5023 翻訳公開の裏話

はてなブックマーク   livedoor clip

はじめまして、ソフトウェア研究開発本部の日野原寛です。普段は Web アプリの開発やサーバ環境の構築などをしています。この blog のサーバも私が設定しましたが、最近のOSはデフォルトが厳しい方向に振ってあるので設定が楽ですね。

本当はそういった方面の話題を書きたいのですが、今やっている作業がひと段落して公開されてからでないと書きにくいことも多いというのと、周りの「早く何か書け」というプレッシャーがだんだん強まってきたという理由から、まずは以前公開した RFC の日本語訳のことについて書きたいと思います。

Atom Publishing Protocolは2007年10月9日に RFC になりRFC 5023の番号が付きましたが、私たちはその3日後の12日に日本語訳を公開することができました。

もちろんたった3日で全部を訳したわけではなく、事前に Draft-17 の日本語訳を準備していたのですが、実際に翻訳を開始したのは6月末の Draft-15 からでした。そのときにはこのままRFCになるだろうと思っていたのですが、7月に入ってから Draft-16、17と立て続けに出てしまったのにはびっくりしました…

翻訳を開始するにあたっては社内の Web 技術者向け blog で協力者を募集したのですが、あっという間に8人も集まってくれました。内訳は研究所から5人、事業部から2人、グループ会社から1人です。

翻訳自体は Wiki 上で早い者勝ちで行いました。
まずはまとめページを作って基本的な訳語などを共有しつつ、手のあいている人や現実逃避したい人が順次章毎に訳したページを作っていくという形式です。その結果やたらと yohei の担当分が多くなったのですが、当時よっぽど現実逃避したかったのでしょうか… いえ、きっとAtomPubにかける情熱がほかのメンバーよりもはるかに強かったんですね(・∀・)

7月の前半にはほぼ全ての翻訳作業が終わり、各自 Draft-17 に追従したところで RFC になるのをじりじりと待っていたのですが、その間に概要や謝辞を訳したり、html に整形しなおしたりもしました。

そして 10/9 に RFC が公開されると、まずはリコーのルールに従って社外公開のための申請書を作成し、Draft-17 と RFC の差分の翻訳への適用の作業も始めました。このときは主にIRCで情報を交換していました。
修正は午後一から始めて 15:00 頃には終わったのですが、申請が通るまでにはまだ時間があったので、この間に html のスタイルなどの微調整やコードのシンタックスハイライティングもしました(Text::Hatena を使わせていただきました)。
その作業も 18:00 頃には終わり、後は申請の承認待ちです。「他の誰かが翻訳を公開してしまうのではないか」とハラハラしながら待ち…待ちで 10/12 です。
大企業のつらいところです。
代わりに、本来ならば Web ページの公開は夜間のバッチ処理なので一晩かかるのですが、担当者にかなりの無理を言ってその日のうちに公開してもらいました。

当時この blog があればもっと迅速に公開できたのに、惜しいところです。(従来の情報公開の申請ルールは論文などを対象として作られたものなので、Web のようなメディアのスピード感には対応できていませんでした。それに対してこの blog の記事のチェック体制は従来に比べてスピーディに公開できるようにしてもらっています。)

最後はちょっと愚痴っぽくなってしまいましたが、以上が翻訳公開の裏話です。

ちなみにはてなブックマークではありがたいことに原文の 6 件(プレーンテキスト版html版をあわせて)を大きく引き離して 147 件ものブックマークをしていただいています(件数はともに本記事の公開時点)。ありがとうございます。今後はこういった情報公開もこの blog 上で行っていきますので、これからもよろしくお願いしますm(_ _)m

2008-01-18

Web Tech Blog スタート記念「RESTful Web サービス」Tシャツ・オライリーカレンダープレゼント

はてなブックマーク   livedoor clip

オライリー・ジャパン様のご厚意により、「RESTful Web サービス」 Tシャツと2008年カレンダーををご提供いただきました。Web Tech Blog のスタート記念として2点セットで5名様にプレゼントします。

gifts_t.jpg

ThinkPad X60 とクッシュボールは大きさの比較用サンプルです。プレゼントには含まれません。

応募条件

下記の条件に該当する方。

  • RESTful Web サービス」の感想をブログ(ミニブログOK)で書かれた方
  • プレゼントを日本国内で宅配便で受け取れる方

応募手順

  1. 自分のブログ(ミニブログOK)に 「RESTful Web サービス」の感想を書く
  2. この記事へのトラックバック、コメント、はてなブックマークあるいは livedoor clip で感想記事の URI を連絡する

応募締切は2008年1月31日17時(JST)です。

抽選

当選者は応募いただいた方の中からランダムに抽出します。ブログの内容は特に関係ありません。

プレゼントの発送

当選者はこのブログで2月1日に発表します。抽選結果の発表記事より、暗号化フォームで住所を登録していただきます。プレゼントは確認が取れ次第発送します。

たくさんのご応募、お待ちしております。

2008-01-10

リソースの考え方

はてなブックマーク   livedoor clip

Web アプリケーションや Web サービスを RESTful に設計するときに、まず大切になるのはリソース設計(リソースモデリング)だと考えています。私が自分でサービスを開発するときは、そのサービスでどんなリソースを提供するのか、をまず考えるようにしています。

リソースの設計は、関係データベースのスキーマ設計のように系統立ててまとまった手法は存在しません(情報アーキテクチャは一つのスタートポイントになるのでは、と考えています)。

今回は以前、社内向けにまとめたリソース設計に関する文書を再構成してみました。何かのヒントになれば幸いです。

#余談ですが、RESTful Web Services を初めて読んだとき、 表現の選択のところで出てくるフォーマットリストとほとんど同じものが9章に出てきてちょっとびっくりした思い出があります。

概要

Web サービスや Web アプリケーションの設計を行うときは、どのようにリソースを分割していくかが重要となります。本文書では、REST (Representational State Transfer) におけるリソースについて簡単に振り返り、新しくリソースを作成する際のヒントを示します。

リソースの考え方

REST の定義に従えば、リソースは情報の断片です。

しかし、それではあまりに抽象的すぎるので、ここではもう少し具体的な定義をします。

リソースはたとえば以下のようなものです。

これはすべて Web 上にあるデータです。そう、リソースとは Web 上にあるデータを少し抽象化したものだと考えても構いません。

概念的には Web 上にないデータでもリソースと捉えることは可能ですが、無理にはやらない方がよいでしょう。たとえば「人」というリソースを考えるのは面白いですが、残念ながら物理的な人は Web 上でデータとして存在し、やりとりされることはありません。

Web 上に存在するのは「人」ではなくて「人のブログ」だとか「人の写真」でしかないのです。

リソースと URI

Web 上のリソースの大きな特徴の一つとして、「全てのリソースが URI を持つ」ということが挙げられます。リソースが URI を持つことでリソース同士をリンクさせることができるのです。

リンクは Web を考える上で非常に重要です。リンクされていない Web ページは Web 上に存在しないも同然だからです。

リソースとリソースの表現

リソースは情報、あるいは Web 上のデータだと述べました。このリソースをサーバ・クライアント間で転送するときのデータ形式のことをリソースの表現といいます。

一つのリソースでも複数の表現を持つことがあります。

たとえば2006年10月10日の東京地方の天気予報、というリソースを考えてみましょう。このリソースの URI はたとえば以下のようになります。

  http://weather.example.com/20061010/tokyo

HTTP クライアントがこのリソースを GET するとこのようになります。

リクエスト

GET /20061010/tokyo HTTP/1.1
Host: weather.example.com

レスポンス

HTTP/1.1 200 OK
Content-Type: text/html; charset=utf-8

<html>
  <head>
    <title>2006年10月10日の東京の天気</title>
  </head>
  <body>
    <h1>2006年10月10日の東京の天気</h1>
    <p>晴れ</p>
  </body>
</html>

ここでサーバからクライアントに返されているのは、 2006年10月10日の東京地方の天気予報、というリソースの「HTMLによる表現」です。

このリソースは「晴れ」という情報を持っていますが、その表現形式は HTML であっても、 XML であっても PDF であっても画像であっても音声あっても映像であっても構いません。重要なのはこのリソースが「2006年10月10日の東京地方の天気予報」を表しているということです。

HTTP の Accept リクエストヘッダを使うと、欲しい表現の形式の優先度を明示的に指定することもできます。以下の例は Atom 形式の表現を HTML 形式の表現よりも高い優先度でリクエストしている例です。

リクエスト

GET /20061010/tokyo HTTP/1.1
Host: weather.example.com
Accept: application/atom+xml;q=0.9,text/html;q=0.5

レスポンス

HTTP/1.1 200 OK
Content-Type: text/html; charset=utf-8

<entry xmlns="http://www.w3.org/2005/Atom">
  <title>2006年10月10日の東京の天気</title>
  <updated>2006-10-10T00:00:00Z</updated>
  <author><name>foo bar</name></updated>
  <content type="xhtml">
    <div xmlns="http://www.w3.org/1999/xhtml">晴れ</div>
  </content>
</entry>

リソースと URI は1対1の関係ではないため、複数の URI が同一のリソースを指すこともできます。たとえば、上記の天気予報の URI

  • http://weather.example.com/20061010/tokyo

と、HTML 表現や Atom/PDF 表現を明示的に参照する URI

  • http://weather.example.com/20061010/tokyo.html
  • http://weather.example.com/20061010/tokyo.atom
  • http://weather.example.com/20061010/tokyo.pdf

は同じ「2006年10月10日の東京地方の天気予報」というリソースを指しています。

リソース表現と選択肢

上述のように、一つのリソースを提供するのにも、いくつもの表現の選択肢が考えられます。ここでは、代表的な表現の形式とその特徴を簡単に説明します。

  • HTML/XHTML
    • Web 上で最も一般的な形式
    • ブラウザで表示できるので、人間が読める
    • ここで挙げた形式の中で最も自由度が高い
    • 逆にいうと最もあいまいな形式
  • microformats(XHTML)
    • イベント情報、レビュー、コンタクト情報といったあらかじめ決められたデータ形式を XHTML に埋め込むための規格
    • XHTML の class, rel 属性を利用するだけなので、他の形式との親和性が高い
    • XHTML のあいまいな部分をある程度制限し、人間が読むだけではなくプログラムからも扱いやすい形式
    • XHTML と併用可能
    • microformats.org で定義されていないものは一般性に欠ける
  • Atom feed/entry (RFC 4287)
    • HTML が人間用ならば、Atom はプログラム用の代表形式
    • XML なので HTML よりもあいまいな部分が少い
    • contents 要素などに XHTML を入れることができる
    • タグの拡張が自由
    • ある程度のメタデータ(ID、タイトル、日付、著者)はあらかじめ決められている
    • AtomPub との親和性が高い
  • 画像(gif/jpeg/png/pdf)
    • これらの形式でしか表現できないリソースも多い
    • HTML の img 要素からリンク可能
  • JSON/JSONP
    • Javascript から利用しやすい呼出しやすい
      • Javascript 以外のプログラミング言語のバインディングもある
    • データ表現に優れている
      • 配列、データ型、ハッシュなどの表現も可能
    • XML(XHTML/Atom) よりも記述がコンパクト
    • HTML の script 要素からリンク可能

Web API とリソース

ここまでずっと Web API という言葉を出さずにリソースについて説明してきました。

いわゆる Web API というのは、 URI と HTTP を使ってリソースを提供し、編集・更新する仕組みです。すべてのリソースは URI で特定でき、HTTP を使ってさまざまな表現形式でクライアントとサーバの間のやり取りが行われます。

HTTP ではメソッド情報は固定されています。オブジェクト指向設計でクラスの振る舞いを考えるように、リソースの振る舞いを考えても HTTP メソッドは追加できません。リソースに新しいメソッドを追加したくなったら、別のリソースを用意するのが正しい考え方です。このように、HTTP を使った Web API の設計では HTTP メソッドを限定したり、拡張したりすることはなるべく避けるべきです。

この HTTP メソッドを固定する考え方を統一インターフェースと呼びます。すべてのコンポーネント間で、ただ一つのインターフェースを使うことで、世界規模での相互運用性が初めて確保されるのです。

Web API は、URI と HTTP を使ってリソースを操作する仕組み、と言い換えることもできます。

まとめ

Web API を設計する上で、最も重要なのはリソースの設計です。リソースの設計は大きく次の二つに分けられます。

  • リソースの URI の設計
  • リソース表現の設計

リソースは抽象的な概念ですが、今我々がブラウザから使っている Web をあてはめて考えると非常にわかりやすくなると思います。ブラウザを人が操作しているところが、プログラムにかわるということです。

リソース設計で悩んだときは、そのリソースの HTML 表現を考えてみましょう。

2008-01-08

WEB+DB PRESS Vol.32 に掲載された REST 入門の記事を公開します

はてなブックマーク   livedoor clip

2006年5月発行の WEB+DB PRESS Vol.32 に寄稿した「REST入門」を、技術評論社さんの許可を得て公開します(技評さんは太っ腹ですね)。全体は長いのでまずは1/3を。後半も順次公開予定ですのでお楽しみに!

2008-01-07

ricollab Web Tech Blog をスタートします

はてなブックマーク   livedoor clip

新年あけましておめでとうございます。 株式会社リコー ソフトウェア研究開発本部の山本陽平です。このブログでは当本部のエンジニアを中心に、技術的な内容、特にわれわれが重要だと考えている Web 技術に関する話題を扱っていく予定です。

はじめに、このサイトのドメインにもなっている ricollab (りこらぼ)について簡単にご紹介します。

ricollab は Ricoh と collaboration から作った造語で、以下のような想いが込められています。

リコーラボ であると同時に、コラボレーションスタイルを変える Re-コラボ を目指します。

まずはこのブログを通じて、Web 技術者のみなさんと発展的な情報共有を行っていきたいと思います。