This document is a Japanese translation of "How I explained REST to my wife..."

奥さんに REST をどう説明したかというと…

Translated By YAMAMOTO Yohei

僕が奥さんよりもパワーブックに夢中になっていたある日、彼女が僕の背中越し に画面を覗きにきて、何が映っているのかをいろいろ聞いてきた。これは本当に気になっ てるんじゃなくて、単に僕の気を引くための合図だ。僕はい つもはただあー、これはとっても面白いものなんだけど、君は気にしなくて もいいんだよって言っている。

でもこの日は、奥さんをどれくらい僕の世界に引き込めるか、 ちょっと楽しんでやろうと決意した。 彼女がおびえながら悲鳴をあげて逃げ出す前に。


奥さん: ロイ・フィールディングって誰?

ライアン: 大した男だよ。賢い。

奥さん: へー。何をした人?

ライアン: 最初の Web サーバを書くのを手伝って、そのあと、なんで Web が 動いているかを説明するたくさんの研究をしたんだ。そうだ、ブラウザでサー バからページを取ってくるときに使ってる転送方式(訳注:プロトコル)の仕様 書に彼の名前は載ってるよ。

奥さん: どうやって動いているの?

ライアン: Web が?

奥さん: ええ。

ライアン: うーん…HTTP は本当にとっても素晴しいんだ。でも変なのは、とても過小評価されてるところ。僕が言ってるその転送方式は HTTP って言っ て、世間ではある理由で無視されてるけど、あらゆる素敵なことができるも のなんだ。

奥さん: http ってブラウザに打込むのの始めの部分のこと?

ライアン: うん。その最初の部分はブラウザにどの転送方式を使うかを教えるん だ。君が打込むやつはコンピュータ関係の歴史の中で一つの重要な大発明なんだよ。

奥さん: なんで?

ライアン: 君が打込むやつは世界中のどこからでも、世界中のどこの位置でも表現できるからだよ。これは Web の基盤なんだ。GPS の座標の知識と情報みたいなもの だと思えばいいよ。

奥さん: Web のための?

ライアン: うん、そう、全部に。その人、ロイ・フィールディングは、 さっき言った研究で、それらが何を指し示しているかについて、多くを 語っている。Web は REST っていうアーキテクチャの流儀で作られているん だ。REST は君が打込むやつが指し示しているリソースの定義を用意してる。

奥さん: Web ページはリソースなの?

ライアン: 一種のね。Web ページはリソースの表現(訳注:representation)の一つだ よ。リソースは単なる概念(訳注:concept)。URL--ブラウザに打込むやつ…

奥さん: URL は知ってる。

ライアン: あ、そっか。URL はブラウザに概念がどにあるかを 教える。そしたらブラウザはその概念の具体的な表現を要求することができる。 特に、ブラウザは概念の Web ページ表現を要求することができる。

奥さん: 他にどんな表現があるの?

ライアン: 実際は、表現の全体がそれほど使われてるわけじゃない。多くの場 合は、リソースはただ一つの表現を持っている。でも、たくさんの新しい形式がそこ らじゅうに急に出現するから、僕たちは将来的にはもっとこれが使われること を願ってるんだ。

奥さん: たとえばどんな?

ライアン: うーん。えーと、人々が Web サービスって呼ぶ概念がある。 この言葉はいろんな人がいろんな別々のことを意味して使ってるんだけど、基本的な概 念は機械が人のように Web を使えるってことなんだ。

奥さん: それはロボットのこと?

ライアン: 違う、そうじゃなくて。機械が机の前に座って Web をブラウズし てるって意味じゃないよ。じゃなくて、コンピュータたちが、それらの転送方 式を、お互いにメッセージを送りあうのに使えるってことなんだ。僕たちは長 い間それをやってきたんだけど、世界中の全部の機械が通信しあうことのでき る技術はまだ今はないんだ。

奥さん: なんでできないの?

ライアン: そういう風に使えるように設計されてないからなんだ。フィールディ ングとその仲間たちが Web を作りはじめたとき、世界中の全ての機械がお互 いに喋れるようにするのは一番の関心事だった。僕たちが使ってたコンピュー タがお互いに喋るための技術の多くは、その要求を満たせなかった。ただ小さ いグループの機械とだけしか喋れなかった。

奥さん: そして今は、全ての機械と喋る必用があるってこと?

ライアン: そう、もっとね。全ての機械が他の機械にある全てのものと喋れる ようにする必用がある。一つの機械が他の機械に、考えようによっては他の機 械にあるかもしれないリソースについて、教える方法が必用なんだ。

奥さん: どういうこと?

ライアン: 君がお姉さんと喋っていて、彼女が掃除機か何かを借りたがってる としよう。でも君はそれを持っていない。お母さんが持ってる。君はお姉さん に、代りにお母さんから借りるように言う。これは現実の生活でいつも起ってい ることで、機械が喋ろうとしたときもいつも起きることなんだ。

奥さん: 機械はどうやってそれぞれのものがどこにあるかを教えるの?

ライアン: もちろん URL だよ。もし機械が喋る必用がある全てのものが URL と対応していたら、名詞に相当するものを機械的に作ることができる。これは 僕と君と世界の他の人たちがある一定の方法で名詞について喋ることに合意す るためにかなり重要でしょ?

奥さん: うん。

ライアン: 機械は世界共通の名詞を持っていない。これが機械がだめな理由。 プログラミング言語、データベース、その他のシステム全部が名詞について喋るため の別々の方法を持っている。これが URL が重要な理由。URL はそれぞれのシ ステムが別のシステムの名詞について教えられるようにするんだ。

奥さん: でも私が Web ページを見ているとき、そんなことは考えないよ。

ライアン: 誰も考えない。フィールディングとその他の小数の人たち以外はね。 だから機械は駄目なんだ。

奥さん: 動詞と代名詞と形容詞はどうなの?

ライアン: 面白いことを聞くね。これは REST の別の大きな側面だよ。とにか く動詞はある。

奥さん: 単なる冗談よ。

ライアン: 面白い冗談だけど、実際全部冗談ってわけでもない。動詞は重要なんだ。 ポリモーフィズムっていうプログラミングとコンピュータ科学の理論の強力な 概念がある。これは別々の名詞がそれらに適用できる同じ動詞を持つことがで きることを言うオタクの言い方なんだ。

奥さん: わからない。

ライアン: えーと…、コーヒーテーブルを見て。名詞は何? カップ、トレイ、 新聞、リモコンだよね。全部にできる何かっていったら何になる?

奥さん: わからない…

ライアン: 全部 取る(get) ことができる、いい? 全部手に取ることができる。全部手に引っ くり返すことができる。全部焼くことができる。同じ動詞をそこにある全部の モノに適用することができる。

奥さん: うん…それで?

ライアン: いや、これは重要なんだ。僕は君に"カップを取って(get)"、"新聞を取って(get)"、"リモコンを取って(get)" って言えるけど、もしそうじゃなくてそれぞれの名詞に別々の動詞を使う必要があったらどうなる? もし"取る(get)" っていう言葉を普遍的に使えなくて、新しい単語をそれぞれの動詞/名詞の組ごとに思い出さなければいけないとしたら。

奥さん: えー、それオカシイでしょ!

ライアン: そうだよね。僕たちの脳味噌はどういうわけか同じ動詞がたくさん の別々の名詞に適用できることを賢く知っている。いくつかの動詞は他のもの よりも具体的で、ごく小数の名詞の集合にだけ適用できる。たとえば、カップ を運転することはできないし、車を飲むこともできない。でも 取る(GET), 置く(PUT), 削除する(DELETE) みたいないくつかの動詞は一般的なんだ。

奥さん: カップは削除(DELETE)できないよ〜。

ライアン: まあそうだけど、捨てることはできる。あ、いまのも冗談かな?

奥さん: うん。

ライアン: とにかく、HTTP っていう、フィールディングと彼の仲間たちが作っ た転送方式は、要は動詞を名詞に適用するってことなんだ。たとえば、ある Web ページに行ったときに、ブラウザは 君が打ち込んだ URL を HTTP で取って(GET)、Web ページが返ってくる。

Web ページはたいてい画像を持ってるよね? 画像と Web ページは別々のリソース なんだ。Web ページはただ画像の URL を指定していて、 ブラウザは全部のリソースを取 得して Web ページを表示するまで、画像をまた HTTP で取る(GET)。 でもここで一番重要なのは、全然違う種類の名詞が同じように扱われていると ころなんだ。名詞が画像だろうが、テキストだろうが、映像だろうが、MP3 だ ろうがスライドショーだろうが何でも。URL があれば全部取れる(GET)。

奥さん: 取る(GET)はとても大切な動詞みたい。

ライアン: そのとおり。特にブラウザを使っていると、ほとんどが取る(GET)にな る。他のタイプのやりとりはあまりしない。これのせいで、多くの人が HTTP はただ取る(GET)ものだと仮定するようになったから問題なんだ。HTTP は本当 は動詞を名詞に適用する一般的な目的の転送方式なのに。

奥さん: へー。でもなんでこれがすごいことなのかまだわからない。どんな 種類の名詞と動詞が必用なの?

ライアン: うん、名詞はあるんだけど書式が正しくない。君が僕へのクリスマ スプレゼントを買うために amazon.com で探していることを考えてみて。で、 それぞれの商品が名詞だと思って。そしたら、もし機械が読める表現がそこに あれば、もっとすてきなことができる。

奥さん: なんで機械は普通の Web ページを理解できないの?

ライアン: Web ページは人が理解するように設計されているからだよ。機械は レイアウトと見た目は気にしない。機械は基本的にただデータだけを必用とし ている。理想的には、全ての URL が、人が読むことができる表現と、機械が 読むことができる表現を持っていることになる。機械がリソースを取る(GET) ときは、機械が読めるものを要求する。ブラウザが人のためにリソースを取る(GET)ときは、人が読めるものを要求する。

奥さん: みんな自分のページ全部に機械用のページを作る必用があるってこと?

ライアン: もしそれを価値あるものにしたいのならね。

これまではずっと抽象に喋ってきたから現実の例を考えてみよっか。君が…先 生だとしよう。学校で、大きなコンピュータシステムを使うよね。もしくは三 つか四つのコンピュータシステムを生徒を管理するために使う。誰がどのクラ スにいるか、何年生か、緊急連絡先、君が教えている教科書とか。もしそのシ ステムが Web ベースなら、学生、先生、クラス、教科書、教室なんかの名詞 のための URL がたいていあるよね。今、ブラウザに URL を与えて Web ペー ジを取得している。もしそれぞれの URL に機械が読むことができる表現があ れば、新しい道具が簡単にシステムを理解することができる。全ての情報が標 準的な方法で消費できるからね。それぞれのシステムがお互いに喋りあうのも かなり簡単にもなる。あと、それぞれの個別の学校システムがテストの成績を 集めるために州や国をまたがって喋るシステムも作れるようになる。可能性は 無限にあるんだ。

それぞれのシステムが情報を他のシステムから単純な HTTP GET で取得できる ことになる。もしあるシステムが何かを他のシステムに追加したかったら、 HTTP POST を使うでしょ。もしあるシステムが他のシステムの何かを更新した かったら、HTTP PUT を使うでしょ。あと残っているのは、データがどんな風 に見えるかを考え出すことだけなんだ。

奥さん: ふーん、これがあなたとコンピュータの人たちが今やってることなの? データがどう見えるかを決めているの?

ライアン: 残念ながら違う。それよりむしろ、大多数の人たちはこれのためには全然実用的じゃなくて、説得力のない複雑な仕様書の階層をを書くのに忙 しいんだ。 名詞は一般概念ではなく、動詞はポリモーフィックじゃない。 僕たちは長期間の現場の使いかたと実績のある技術を放り出して、 過去に失敗した他のシステムに似ているやつで、もう一度やり直そうとしている。 僕たちは HTTP を使ってるんだけど、その理由はネットワーク/セキュリティ部門とあまり話さずに、ファイアーウォール越しにデータをやりとりするためだけなんだ(訳注:原文がわかりにくかったので Ryan に詳細を説明してもらった結果を訳してあります)。 僕たちは派手な道具とウィザートのために簡単さを取り引きしちゃってる。

奥さん: なんで?

ライアン: わからない。

奥さん: なんであなたは何も言わないの?

ライアン: たぶんやるよ。

on Sun 12/12/04 at 07:30 AM

翻訳者メモ(Translator's memo)

原文は Ryan Tomayko さんのとっても面白い blog です。 コンセプトも面白いけれど REST の入門としてもいいかもしれないと思って訳しました。 かなりカジュアルに(イイカゲンに)訳してますんで、誤訳などあるかと思います。 英文解釈において mixi で hei, Izu-ru さんと mad-p さんにお世話になりました。 また、原著者の Ryan さんにも内容に関する質問に答えていただきました。 訳文に関するコメントは yoheiy at gmail.com 宛にお願いします。(2005-04-04)

下野暁生さんの指摘にしたがって訳文を2箇所修正しました。 僕がちゃんと理解できていなかった部分を丁寧に解説していただき 翻訳の質が上がったと思います。下野さんありがとうございました。(2007-12-19)