You don't need API version 2

周回遅れ感が半端ないけどバージョニング関連で色々読んで・聞いて思ったことを書く。

RESTとバージョニング

基本的にいわゆる狭義のRESTとAPIのバージョニングは何も関係ない。強いて言えば、HATEOASはバージョニングにも使えるよ、というのがREST信者の主張であるものの、それが正しい(というか実用的)かどうかはまだよくわからない状況だと思う。

なので、APIをRESTfulにするためにはバージョニングはどうあるべきかという議論はそもそも斜め上で、どうでもいい話かと。

一方でREST API(僕はこの呼び方嫌いだけど)のバージョニングはどうあるべきかというのは、設計論として当然あり、そこは実装との兼ね合いもありいろいろ難しい。

APIのバージョン設計論

奥さんが書いてる通りだと思う。

破壊的変更(breaking changes)はなるべく避ける。ここでいう破壊的変更というのは必須のパラメータを増やすとか、デフォルト値を変更するとか、パラメータ名を変更するとか、特定のAPIを廃止するとか、そういった以前のクライアントがそのまま使えない変更のことを指す。

この辺は最近はJSONを使っていればそれほど難しいことなく実装できる(ややこしいことに興味がある人は「xsd upa」で検索してみよう)。

一方で、最初からv2を見据えてURIにわざわざv1とか入れちゃうのはムダな工数と負債を最初から抱えてしまうように感じる。なるべく破壊的変更は入れずにバージョンを上げるべき。どうしても変更が必要であれば、江島方式もあるし、宮川方式もあるし、奥方式もある。個人的にはv2を見越しちゃうことを「心配性症候群」あるいは「皮算用症候群」と呼んでいる。ちゃんと設計されたAPIは寿命がとても長いし、どうしても本当に破壊的変更を加えたくなったらそれは新APIなのだと思う。そしてWeb APIの場合は名前空間を分ける方法はいくらでもある。

Dynamic Scripting Platformについて

Rebuild.fm#35 を聞いて初めて知ったけど、netflix にdynamic scripting platformというのがあるのですね。RESTでいうところのCode on demandのクラサバ逆転版みたいなもののようだ。こういうのが欲しいというのはよくわかるしかっこいい。いろいろ熱そう。

要はストアドプロシージャじゃねーの、と突っ込まれそうだけど、SQLのスコープとWeb APIのスコープは違うので、課題もいろいろ異なると思われる。

その他

rebuild.fmを聞いてたらなんかmiyagawaさんが思いの外REST厨っぽい発言をしてて、思わずニヤニヤしてしまった。勝手にmiyagawa氏はもっとプラクティカルでカジュアルな嗜好なのかと想像してたけど、メディアタイプ厨的発言をしてたりとかわいい一面が。ちなみに僕はメディアタイプにバージョン番号を含めるのは本当にいいのかはまだよくわからないです。

あと江島さんのブログエントリは炎上成分が高かったみたいだけど、実装・運用経験に裏打ちされた発言で説得力があると感じた。やっぱり動いているプログラムが一番強い。

まとめ

自分としては成功するかどうかわからないAPIのv2を気にするくらいなら、その労力をいわゆるv1の価値向上に注いだ方がよいと考える。でも全てはコンテキスト次第。@miyagawaや@kennクラスでもこれだけ悩むということがわかったのだから、安心してよりよいAPIを設計実装するよう努力すべきと思った。

チームビルディングで大富豪をやった話

先日リーンスタートアップセミナーというので、札幌に行って話をしてきた(発表資料)んですが、本題と外れたところでチームビルディングについて喋ったら思いのほか受けたので、ここにも書いておきます。

 
その当時は部門再編の時期で、僕たちは主に二つの拠点、三つの部署から寄せ集められた20数名の開発部門でした。当然それまでやってきたことはバラバラで、お互いのことをよく知らない。組織として何を作るかも決まっておらず、上からの具体的な指示もない。新横浜のオフィスに集結することは決まったけど、そのフロアは什器がまだ何もなくがらんどう、という状況でした。
 
そんな状況だったので、みんな何をやったらいいかわからんし、そもそも暇そうだから、一度集まれる人で集まって、話をしようと提案しました。
 
当時のメールをひっくり返したら、こんな風に書いてあった、と書きたいのだけれど今メールが見られないので★あとで書く→書いた★
 
調べたら、メールを出したのは僕じゃなかったです。ただ、社内のスケジュール調整サイトは僕が作ってて以下のように募集していました。完全に大富豪のことを隠して募集してるw
 
Web 関係の話題を中心にいろいろ情報交換します
 
で、当日みんなで居室に集まってみたら、本当に気持ちいいくらいなにもない部屋がそこにありました。ちょっとは椅子やテーブルあるかなと期待してたんだけど、本当に何もなかった。部屋の鍵が空いててよかった。
 
集まった10数名は、これから何が始まるんだろうと不安だったと思うのですが、そこでいきなり今日は大富豪をやりましょう、と提案したわけです。
 
その時のみんなの反応は覚えてないんですが、たぶんポカーンとしていたのではないかと。で、人数が多かったので2グループに分けてトランプ配って小一時間大富豪をやりました。
 
大富豪は面白いゲームで、性格が出ます。僕は昔Yahoo!のオンライン対戦できる大富豪で革命を起こしまくったことがあったんですが、その時は最終的に他の3人からチャットで罵倒されました。
 
そんな経験があったのと、当時はてなの入社面接で大富豪をやるという話があったので、これを応用してチームの自己紹介に使ったら面白いのでは、と考えたわけです。
 
自己紹介を上手くできる人ってそういません。そもそもうまい人でも、自分の性格なんかを5分やそこらで話せるわけがないのです。だから、ゲームの中で自然と性格が出るのを期待してました。
 
やってみたらどちらのグループも大変盛り上がり、参加者にも好評でした。打ち解けられたという人もたぶん多かったはず。そもそも大富豪が楽しいしね。
 
面識のない人が集まってプロジェクトをやるときのチームビルディングはとても大変なわけですが、そういう時はあまり慌てず、まずは大富豪をみんなでやってみるのがいいんじゃないかなという話でした。
 
 
初めてiPhoneで通勤中にブログ書いた。意外と書けるな。

Webはインターネットになったねぇ

1月の話になるけど、CROSS 2013というイベントに行ってWebの話をしてきました。詳細なログは前田さんが取ってくれたのでそちらをどうぞ。で、オブザーバ的な立場で聞きにきてくれたid:naoyaが僕の言葉を引いてエントリを書いてくれた。

本来Webはインターネットの1アプリケーションだった。ここでいうインターネットはTCP/IPのこと。これはid:naoyaが引いた論文の中でTimBLも強調していることだ(Keep the Web separate from the Internet)。

テクノロジーとしてはそのとおりで、今でもたぶん教科書にはそう書いてあるはず。低レイヤの技術革新が上位レイヤとは独立して進んでも大丈夫というのはとてもきれいだなとエンジニアとしてよくわかる話です。

ただ、それでもやっぱりWebはインターネットになったんだなあとしみじみ感じるんだよな。今でもDNSを引いてるし、NTPで時計合わせもしてるんだけど、SMPTはだいぶ意識しなくなった。@gmail.com同士でメールやりとりするときに、たぶんバックエンドでSMTP使ってないですよね(違うかな)。そもそも、emailもあまり使わなくなって、Facebookメッセージだったり、twitter DMだったり、LINEだったりでコミュニケーション取ってるわけだ。

LINEがWebなのか、っていう話もある。CROSの前半のSPDYの話でLINEが出てきた。そういう意味で、あの文脈ではLINEはWebなんだな。

だんだん何が言いたいのかよくわからなくなってきたけど、簡単に言うとコミュニケーションプラットフォームはその他が淘汰されてWebになったねえ、というかんじなのかなあ。emailはまだ息をしているけどnetnewsはほぼ瀕死だ。gopherなんてネタにしかならないし。音声・動画があるわけですが、それもWeb化しているという話もある。

そういえばSunのthe network is the computerという言葉もありましたね。今でいうとThe Web is The Smartphoneになるのか?

スマホアプリがWebを全然意識しないでHTTP使って勝手な世界を作ってる件についてはそうそうと思う反面、Webに接続する端末をブラウザだけに限らないでもっと独自のプログラムに開放していこうという路線は、「Webサービス」とか「プログラマブルWeb」の当初の大きなコンセプトだったはず。そういう意味では、今のこの現状は喜ぶべきものなんじゃないか。

ただ、もっとアプリ間でURLを交換して連携できるようにしておいた方がいいんじゃないのかなあと思うことはある。別にユーザにURLのコピペを手作業でさせなくてもいいんだけど、アプリ間連携ってもっとできたらいいんじゃないのかな。

ちなみに twitter の iOS クライアントはちゃんとツイートのURLをコピーできる機能が入ってる。さすがだなあ。

ここで思考がちょっと飛んで以下の本を思い出したのです。

パソコン創世「第3の神話」―カウンターカルチャーが育んだ夢

パソコン創世「第3の神話」―カウンターカルチャーが育んだ夢

ヴァネヴァー・ブッシュのAs We May Thinkから始まって、ダグラス・エンゲルバートの活躍と、ARPANET、Alto、PC/Macというような流れのコンピュータ歴史本なんだけど、この本のメッセージの一つにそれまで科学技術計算をターゲットにしていたコンピュータを、人間の知性を拡張するデバイスとしてのコンピュータとして位置づけ直したエンゲルバートの業績が語られている。このコンセプトの延長線上で、我々はスマホアプリをピコピコやりながらHTTPを喋ってクラウド経由で友達と夕飯の写真を共有しているのだろうか。

Webがインターネットになったというのはそういうことなんじゃないかと思います。

とりあえずブログ書いてみた。