Mark Andreessenの言うウェブ上の3つのプラットフォーム

アマゾンのSimpleDBとかが登場したことで、「いよいよクラウドコンピューティングの時代がやってきた!」と各所で盛り上がっているわけですが、そんな盛り上がりのど真ん中なブログエントリがblog.pmarca.com: The three kinds of platforms you meet on the InternetというMarc Andreessenが書いたもの。

それをベースにして書かれた論考がこちら、Web上に登場した3種類の“プラットフォーム” − @IT

で、確かにこれは抑えておかなくちゃいけないのはわかるけど、丁寧に技術や概念をとぎほぐしておかなきゃまずそうな感じ。ここで言われるレベル3プラットフォームって、別に単なるクラウドコンピューティング=WWW上の分散処理と同一概念ではないですしね。

なわけで、The three kinds of platforms you meet on the Internetのポイントを考えながらまとめるメモを自分もエントリ。


いろいろ歴史背景は前書きとして書いてあるけれど、そんなことは当然どーでもいいわけです。肝心のレベル1/2/3のプラットフォームとはいったい何なのか。

あ、その前にここだけはピックアップ。

A "platform" is a system that can be programmed and therefore customized by outside developers -- users -- and in that way, adapted to countless needs and niches that the platform's original developers could not have possibly contemplated, much less had time to accommodate.

プラットフォームの定義を述べた部分。
この4行の文章は直後で1行に圧縮されます。

If you can program it, then it's a platform. If you can't, then it's not.

プラットフォームとは、
「外部の他社が作ったプログラムが動く場所。」
ということですね。


そしていよいよ本題の3つのプラットフォームについての説明です。3つのプラットフォームはそれぞれ、

  • Level 1:Access API
  • Level 2:Plug-In API
  • Level 3:Runtime Environment

と名づけられています。
というか、この原文の表現が一番わかりやすい!!

では各レベルの詳細を追っていきましょう。

RESTやSOAPのように今最も一般的な形態。
早い話、

A Level 1 platform's apps run elsewhere, and call into the platform via a web services API to draw on data and services.

動いているコードはプラットフォームの外側にあって、そこにデータを引っ張ってくる。ユーザ側からすると、データを利用する場所は引っ張ってこられた外側の場所になるわけですね。つまり、

DB―(API)→外部サーバ
ここでコードが動く

ユーザはここにデータを参照しに行く

というわけです。

  • Level 2:Plug-In API

ウェブサービスの例として挙げられているのはFacebookだけど、私はFacebookアカウントなぞ持っていないので、Cybozu Developer Network: Facebook Platform で SNS 内アプリケーションを作ろう 〜 Part 1 開発編 〜Facebook Platformから見る、次のアーキテクチャ (arclamp.jp アークランプ)を参考にして理解。


原文の説明は

A Level 2 platform's apps run elsewhere, but inject functionality into the platform via a plug-in API.

ですが、早い話この図<<なお、この図の出所は第13回 速報!Facebookアプリケーション開発(入門編):ITproの記事です>>がまんまそうなんですね。

つまり、

DB―――――――――→外部サーバ
ここでコードが動く
サイト内で表示 ←――情報の生成

ユーザはここにデータを参照しに行く

ということになります。
ま、2007年にFacebook Platformはずいぶん話題になりましたし、アンドリーセンもずいぶん多くの字数を費やしてレベル2について説明しています。

  • Level 3:Runtime Environment

これは原文から。

A Level 3 platform's apps run inside the platform itself -- the platform provides the "runtime environment" within which the app's code runs.

Put in plain English? A Level 3 platform's developers upload their code into the platform itself, which is where that code runs. As a developer on a Level 3 platform, you don't need your own servers, your own storage, your own database, your own bandwidth, nothing... in fact, often, all you will really need is a browser. The platform itself handles everything required to run your application on your behalf.

つまり

プラットフォーム
コード←―――(アップロード)――――ディベロッパ

ユーザはここにデータを参照しに行く

ということですね。
ディベロッパーは自分でサーバなどの環境を用意する必要もなく、ただコードを書いてアップロードすればいいだけだ、というわけです。

具体例として出しているのが、アンドリーセン自ら関わっているNingAmazonのEC3(Amazon Elastic Compute Cloud)だと。

で、このレベル3について@ITの記事では「ウェブOS」という言葉を使って解説している。
ウェブOSなる言葉の意味はここにある

ウェブ上に広がる巨大なコンピューター網(AmazonのEコマースサイトやGoogle検索エンジンやオンラインアプリなど)に場を移すにつれて、こうして繋がれた多数のサーバーを大きなコンピュータ1台に見たてる新しいタイプのウェブオペレーティングシステムが出来つつある。

っていうのが一番わかりやすい表現でしょう。ま、私はここにある疑問に大いに賛同しますけど。

で、アンドリーセンは、

So people who aren't programming, or making decisions about programmers programming on them, don't have a lot to do with them, and often don't know what they're talking about.

というように、こういう世界の到来が影響するのはコードを書くエンジニアだけだ、と言っていますが、本当ですかね、、
コードを書かない人は、ウェブ上で提示されたプログラムたちの中から、必要なものを選んで組み合わせて使うだけ。それって、例えばMS-Office or i-work のような選択(ローカルハードウェア上のアプリケーションレベル)やFirefoxのエクステンションを選ぶ(ローカルハードウェア上のアプリケーションのアドインレベル)と同じことで、コードが動いている場所が「あちら側」に移行しただけ、なんてことはありえるのだろうか。

ウェブのネットワークにひとたび載ってしまったものは、これまでの歴史を振り返るとおのずと共有され、まったく異なった利用のされ方をされ、情報収集・解釈・活用というプロセスを丸ごと変えてしまうことすらありました。この共有というのが曲者なわけです。

そもそも数多くのソースコードが同時に一箇所で走ると不可避なのが衝突です。Firefoxのアドオンなど、やられたっという経験を持つ人は多いはずです。

また、多方面からアップロードされた情報が集約されるのに、表現形態が変化した例というのも結構あります。例えば、タグクラウドとか。

だから、予測のつかない変化、起こるかもしれないんですよね。で、それがアンドリーセンの作ったプラットフォームであるNingで現在展開しているものとは、全く異なるような可能性すらあるわけです。そっちのほうを考えるのが面白いのでは、と思っているのでした。