Chromeはゆくゆく「Native Client」で脱Flashするつもりなのだろうか・・・
Webアプリとネイティブを結ぶ真の橋, GoogleのNative Clientがいよいよリリース間近 - Tech Crunch Japan
GoogleがNetscapeのPlugin API(NPAPI)の仕組みを応用して、ブラウザ内でプラグインなしでネイティブコード(C、C++)を実行できるようにするSDKを出したらしい。
ブラウザ内でネイティブコードを実行する方法としてはFlashのAlchemyがある。しかし、これはもちろん、Flashがインストールされている環境でしか実行できない。しかも自分が知る限り、ポーティングはかなり面倒で、必ずしも高速とは限らない。
このSDKがリリースされた背景にはそういった問題意識があるのだろうか。つまり、Googleはゆくゆくプラブインなしのブラウザ内で高速なネイティブコードを実行する環境を整えたい。ようするに、脱Flashを狙っているのかもしれない。ChromeはFlashを統合しているにも関わらず・・・
おもしろそうなので、とりあえず動かしてみることにした。
ここに書いてあるインストラクションに従う。
C Tutorial: Getting Started - Native Client SDK - Google Code
Chrome10が必要なので、BetaチャンネルのChromeをダウンロードしてインストールする。
Early Access Release Channels - The Chromium Projects
Chrome10を起動してアドレスフィールドで「about:flags」して「Native Client」機能を有効にする。
ここでSDKをダウンロードして適当な場所に展開。
Downloading the SDK - Native Client SDK - Google Code
コンソールで展開したSDKの「examples」フォルダに行き「python httpd.py 5103」としてポート5103でhttpサーバーを起動。
http://localhost:5103/に行くとサンプルアプリケーションのリストが出る。
ここでは「Sine Wave Synthesizer」を見てみる。
「Play」するとポーっとサイン波の音が鳴った。「440」は周波数で、これを変えると音程が変わった。この音の生成にネイティブコードを使っているらしい。
このサンプルのフォルダに行ってみると、こんな感じ。
まずHTMLを見ると、embedタグがみつかった。これでネイティブコードを埋め込んでいるらしい。
ここで参照されている「sine_synth.nmf」の中身はテキストで、実際のバイナリはnexeという拡張子を持っているファイルらしい。
で、バイナリコードのパラメータ操作には、HTMLのインターフェースとJavaScriptを使っている。
なるほど。確かに動いている。
きっとUI部分はHTML5で組んで、ビデオコーデック、サウンドコーデック、画像のエンコーダー・デコーダーなど高速な処理が必要なコア部分をネイティブコードで実装してJavaScript経由で利用するということなのだと思う。
ChromeはJavaScriptの実行エンジンの高速化に相当な力を入れているけれど、やはりそれでもネイティブコードの速度にはかなわないという結論なのかもしれない。
しかし、たったこれだけの事をするのにバイナリコードは1MB以上。これで実用になるのだろうか。さらに、この実行環境はオープンソースだとはいえ、今のところChromeにしかない。今後、他のブラウザに移植される可能性はどれくらいあるだろうか。この2点が今後の課題だろうと思った。
しかし、技術としては非常におもしろい。Chromeはこの技術をもって将来、脱Flashできるだろうか。
・・・Native Clientを使うとデベロッパは、ブラウザの中からネイティブコードを実行するWebアプリケーションを作れる。つまりブラウザが、従来からあるWebベースの言語、JavaScriptなどを実行できるだけでなく、CやC++で書かれたコードも実行できるようになる。・・・この新しいSDKは“Arctic Sea”と呼ばれ、Chrome 10以上を必要とする・・・
GoogleがNetscapeのPlugin API(NPAPI)の仕組みを応用して、ブラウザ内でプラグインなしでネイティブコード(C、C++)を実行できるようにするSDKを出したらしい。
ブラウザ内でネイティブコードを実行する方法としてはFlashのAlchemyがある。しかし、これはもちろん、Flashがインストールされている環境でしか実行できない。しかも自分が知る限り、ポーティングはかなり面倒で、必ずしも高速とは限らない。
このSDKがリリースされた背景にはそういった問題意識があるのだろうか。つまり、Googleはゆくゆくプラブインなしのブラウザ内で高速なネイティブコードを実行する環境を整えたい。ようするに、脱Flashを狙っているのかもしれない。ChromeはFlashを統合しているにも関わらず・・・
おもしろそうなので、とりあえず動かしてみることにした。
ここに書いてあるインストラクションに従う。
C Tutorial: Getting Started - Native Client SDK - Google Code
Chrome10が必要なので、BetaチャンネルのChromeをダウンロードしてインストールする。
Early Access Release Channels - The Chromium Projects
Chrome10を起動してアドレスフィールドで「about:flags」して「Native Client」機能を有効にする。
ここでSDKをダウンロードして適当な場所に展開。
Downloading the SDK - Native Client SDK - Google Code
コンソールで展開したSDKの「examples」フォルダに行き「python httpd.py 5103」としてポート5103でhttpサーバーを起動。
http://localhost:5103/に行くとサンプルアプリケーションのリストが出る。
ここでは「Sine Wave Synthesizer」を見てみる。
「Play」するとポーっとサイン波の音が鳴った。「440」は周波数で、これを変えると音程が変わった。この音の生成にネイティブコードを使っているらしい。
このサンプルのフォルダに行ってみると、こんな感じ。
まずHTMLを見ると、embedタグがみつかった。これでネイティブコードを埋め込んでいるらしい。
<embed name="nacl_module" id="sineSynth" width=0 height=0 nacl="sine_synth.nmf" type="application/x-nacl" onload="moduleDidLoad();" />
ここで参照されている「sine_synth.nmf」の中身はテキストで、実際のバイナリはnexeという拡張子を持っているファイルらしい。
{ "nexes": { "x86-64": "sine_synth_x86_64.nexe", "x86-32": "sine_synth_x86_32.nexe", } }
で、バイナリコードのパラメータ操作には、HTMLのインターフェースとJavaScriptを使っている。
なるほど。確かに動いている。
きっとUI部分はHTML5で組んで、ビデオコーデック、サウンドコーデック、画像のエンコーダー・デコーダーなど高速な処理が必要なコア部分をネイティブコードで実装してJavaScript経由で利用するということなのだと思う。
ChromeはJavaScriptの実行エンジンの高速化に相当な力を入れているけれど、やはりそれでもネイティブコードの速度にはかなわないという結論なのかもしれない。
しかし、たったこれだけの事をするのにバイナリコードは1MB以上。これで実用になるのだろうか。さらに、この実行環境はオープンソースだとはいえ、今のところChromeにしかない。今後、他のブラウザに移植される可能性はどれくらいあるだろうか。この2点が今後の課題だろうと思った。
しかし、技術としては非常におもしろい。Chromeはこの技術をもって将来、脱Flashできるだろうか。
コメント
コメントを投稿