愛と友情のインターフェース
車中の会話
「プラットフォームが普及する上で本当に大切なことってなんなんですかね?」
「プラットフォームって?」
「例えばプレイステーションとか、セカンドライフとか、プラットフォームじゃないですか。iモードもそうですけど」
「そうだなあ、いろいろな要因はあると思うけど、ユーザから見たときの使いやすさや伝わりやすさはもちろん重要だよね」
「でも例えば、初代プレステとサターン、PS2とドリームキャストってそんなに解りやすさに歴然とした差はないじゃないですか。いろいろ要因はあるだろうけど、結局なにが決め手だったんでしょう」
「開発者に対する解り易さ・・・インターフェースだね」
「コントローラの形状ですか?」
「いや、違うよ。今風に言えばAPI(アプリケーションプログラムインターフェース)に決定的な違いがあったんだと思うんだよね。プレステのライブラリとサターンのライブラリでは明らかに出来ることが違ったしね」
「そうなんですか。そんなにAPIによって変わるもんですか」
「だいたいみんな、APIとか気軽に言うけど、気軽に考えすぎなんだよね。マイクロソフトなんか何万人も社員が居て、APIを考えて決定する立場の人は100人も居ないわけで、APIを作るっていうのは超エリートの仕事なんだよ。APIは、いわば法律だからねえ。高級官僚くらいの難易度の仕事だよ
APIが違うっていうのは、ユーザーインターフェースが違うのと一緒なのでこれがダメだと全部がダメになるよね」
「つまらないゲームっていうのはユーザーインターフェースが悪いわけだ
たとえば、レースゲームなんて無数にあると思うけど、面白いレースゲームとつまらないレースゲームは、もう画面見ただけでなんとなく想像できるでしょう。たとえばメーターの位置がおかしいとか、コース図があるとかないとか」
「ああ、見ただけで操作方法が解るかどうか、とかですかね」
「そう。ゲームはアーケードに始まっているから、まずインターフェースに触ってもらえないと商売にならない。だからゲームのインターフェースは他のものに比べて圧倒的に洗練されているよね。マニュアルを読まないと遊べないゲームというのは今は殆ど無い。これがインターフェース」
「それがプログラマにとってはどういうことになるんですか?」
「OSやハードウエアとのインターフェースも同じさ。ただし目に見えないから良し悪しが瞬間的には解りにくい。だからAPIの出来不出来の差はよほど詳しくないとすぐには見抜けないわけだ」
「でも最近APIって流行ってますよねえ。Web-APIとか」
「たいていのWeb-APIなんて、OSが用意するような膨大なAPIからしてみたら、簡単すぎて何も出来やしないよ。AmazonのWeb-APIはかなりたくさんあって、本当にそれ自体がOSに近いレベルまで来ているけど、そんなに出来のいいAPIは本当に一握りしかないと思う。だからAPIを作っても使われないことが多いんじゃないかね」
「確かにあんまりマッシュアップを使ったサービスって聞かないですよね」
「しかもGoogleに関して言えば、APIはあんまりちゃんとは作ってくれないよね。簡単に使えるレベルではあるけど、実際にはアクセス回数などに凄い制限があったりして、まじめに商売に使うのは難しい。きちんと使われているのはGoogleMapのAPIくらいじゃないかな。APIというよりライブラリに近いけど」
「そうですね。埋め込むものですね」
「ただ、たとえばブログパーツとかアクセスカウンタとかも、広い意味ではAPIで、あれって埋め込むだけで目的を果たせるから凄く重宝するわけだ。Web-APIとして提供されているサービスは実はものすごくシンプルなことが多いんだけど、実際にはシンプルであることに物凄い価値があるんだよね」
「かつては、OSみたいなものがあらゆるサービスを提供するからOSのAPIは非常に重要だったけど、今は違うということですか」
「シンプルなサービスを組み合わせてより複雑なことをやらせよう、やりたいという方向に進化している。オープンソースのPEARや、きっとCPANもそうだけど、無数のプログラマが無数のライブラリ(つまりAPI)を投稿しているけど、本当に多くの人に使われるのは一握りで、それを決定するのはAPIの出来の良さ、わかりやすさ、シンプルさなんだよね」
「じゃあやっぱりインターフェースってシンプルな方が良いんですかね。iPodみたいに」
「使い方をシンプルにしようとすると、実はAPIの実装はとんでもなく複雑になるんだ。Webの世界の中で最もシンプルなユーザーインターフェースはGoogleのトップページだと思うけど、Googleの検索エンジンの中身は複雑かつ大規模であるのと同じように、シンプルなインターフェース、シンプルなAPIを提供するためには高度な技術的裏づけが必要になるんだよね」
「たしかにGoogleAnalyticsとか、使う側はHTMLを埋め込むだけですけど、あの集計プログラムにはかなりの手間がかかってますよね」
「プラットフォームというものを考えたとき、プラットフォームが開発者に対して提供するのは実はAPIの塊でしかないんだよ。Windowsでもゲーム機でも。そして例えば動画の再生とか、動画をテクスチャマップするだとか、言葉や概念が単純なことでも、APIの出来が悪いと無茶苦茶大変だったりするんだよ。95年当時のDirectXがどれだけ複雑だったか知ってる?」
「いや、知りません」
「95年から97年くらいにかけて、DirectXは画面にただ一枚のポリゴンを描画するためだけに、A4にして400ページくらい、ソースコードにして1万行くらいのプログラムが必要だったんだよ。しかもそのコードの99%以上がDirectXの"初期化"に絡んだ部分でね」
「ええっ!嘘でしょう」
「いやホント。僕はその初期化をカプセル化するライブラリを作って配っていたから間違いない。5万人くらいのプログラマが僕のまとめた初期化ライブラリを使っていたよ。初期化ロジックの中身はサンプルをそのまま使っただけだけど、大事なのは初期化を一行でできるようにすることだったのさ」
「1万分の1の手間になるわけですか」
「DirectXの初期化が面倒なうちは、誰もDirectXでプログラムを書こうとすら思わなかった。でも一行で初期化できるとしたら、世界が変わるよね」
「なぜそんなことが起きたんですかね」
「初期のDirectXチームはまずWindowsが動くありとあらゆる環境に適合することを最優先したため、ありとあらゆる場合を想定したAPIを用意していたんだ。彼らの失敗は、APIの設計そのものではなくて、SDKに添付したサンプルコードがどんなに短いものでも1万行以上あったということだ。それを読みたいと思う人間はまずいないよ。僕がDreamcast向けのSDKで最初にやったことは、サンプルコードを100行以内で書くということだった。もともと彼らが用意していたサンプルコードを全てゴミ箱に捨てて、たった一つの点を画面に打つサンプルや一枚のポリゴンを表示するサンプル、という具合にサンプルコードを出来るだけコンパクトに、シンプルにしたんだ。ただそれだけのことで開発者は10倍以上に増えたと思うよ。僕が入った時点で3社くらいしかつかってなかったけど、最終的には200タイトルくらいで使われたそうだしね」
「それもまた開発者とのインターフェースですね」
「そう。ということは何事もやっぱり大切なのはインターフェースということだな。UEIのIはインコーポレイテッドではなくてインターフェースということにするか」
「営業の仕事も結局はお客様と開発のインターフェースに徹することですからね」