Eyes, JAPAN Blog > フルスタックJavaScript

フルスタックJavaScript

yahata

この記事は1年以上前に書かれたもので、内容が古い可能性がありますのでご注意ください。

はい、八幡です。
今日はjavascriptによるフルスタック開発についてお話したいと思います。

フルスタックフレームワークとはUIやDB、セキュリティなどの基本的な問題領域にAll in oneな環境を提供するもの
はてなキーワード 

ということで、クライアントサイドはもちろんサーバーサイドでもどこでもがんがんJSを使っていこうというお話です。

1. サーバーサイドJS

サーバー機能を担うのは、言わずと知れたNode.jsです。
Eyes, JAPANでも一部プロジェクトはNode.jsで動いていますね。

Node.jsに内蔵されているJSエンジンであるV8、これはC++で実装されており、
C++でアドオンを書くとJSを独自に拡張して使うこともできます。
いつもゴチャゴチャと書いていたコールバック処理なんかも
独自拡張でスッキリ&高速に書けるようになるのかもしれません。
(C++アドオンはまだあまり試せていませんが…)

また、V8はJSの標準化規格であるECMAScript5に完全に準拠しており、
ブラウザでは対応にブレのある最新の文法もNode.jsでは完璧に実行できます。素敵です。
ちなみに、Javaで実装されたRhinoやRubyで実装されたTwostrokeなどもあります。

シングルプロセスとして有名なNode.jsでしたが、マルチプロセス化モジュールも公式に装備され
速度面の課題も緩和されつつあるかと思います。
webサーバー・アプリケーションサーバー・プロキシサーバーなど様々な用途に利用できます。

2. DB

データベースではMongoDBです。
MongoDBはNoSQL系のDBで、 ドキュメントはBSONというJSONライクなバイナリ形式で保存されます。
BSONに関しては少し書きたいこともありますが、今回は割愛します。

MongoDBのシェルはSpiderMonkeyで動いているため、現状はES5準拠ではありません。
しかしビルドオプションでV8にもできるし、2.3系からは標準でV8に変わるようです。
今個人的に使っているMongoDBは2.2系だったので、2.3がリリースされたら更新してみます。

3. クライアントサイドJS

JSの華となる部分ですね。

クライアントサイドはブラウザによってJSの実行エンジンが違います。
IE9はChakra、FirefoxはSpiderMonkey, SafariはNitro, ChromeはV8。
ただ、普段web開発をする上でJSエンジンの差異に悩まされることはほとんどなく(たまにあるけど)、
基本的にはレンダリングエンジンに悩まされます…。

最近はHTML5の新APIもどんどん出てきており
SVG, 3D, Audio, VideoなどのメディアAPIからOffline CacheやLocal Storageなどのwebアプリ用APIまで
もう流れにしがみつくので精一杯な勢いです。

3D表現などはブラウザの処理能力に依存するところもあり、一般に普及するのはまだまだ先かと思いますが、
RiverTrailなどOpen CLを用いたマルチコア処理用アドオンも開発されており
JSの表現力の向上に期待が高まりますね。

4. スマホアプリ

スマホアプリもJSで。

「容器だけネイティブで作って中にwebアプリをはめ込む」というハイブリッドスタイルがあります。
これなら、GPSやプッシュ通知などのネイティブAPIもJSから叩く事ができるので、機能的なハンデは無くなります。

有名なフレームワークはPhoneGap, Titanium, Senchaあたりでしょうか。
Senchaはつい最近、FacebookのアプリをHTML5で遜色無く作り直した!って話題になりましたね。
PhoneGapとSenchaは構造的にはWebViewの中でアプリケーションが動く形なので、
上述のハイブリッドスタイルの一種です。

Titaniumは、JSのコードをJSエンジン上で動かして
直接ネイティブのAPIを叩いて動作するので、一番ネイティブに近い構造をしています。
ただ、実際にTitaniumで開発をしてみた感想としては、
ネイティブに近い分JSだけの知識ではどうにもならない事も多くて
「これだったらObjective-Cで書いた方が速いし小回りがきくよね」っていう印象でした。

 

5. 開発環境(シェル)

シェルもJSで行きましょう。
NodeにはREPLモジュールが実装されているので、インタラクティブシェルを自作することもできます。
昔Rhinoでシェルを作ろうとして挫折したので、誰かNode.jsで作ってくれるととっても嬉しいです。
多分C++アドオンを絡めていけばうまく作れるんではないでしょうか…

6. その他

photoshop用のスクリプトであるJSXもJSで書けます。
AppJSはNode.jsを用いてデスクトップアプリケーションを開発できます。
neu.Nodeは、iOSでは本来制限のあるNode.jsを完全な形で動かすフレームワークです。

…そんな感じで、JSは様々な分野で利用されはじめており、
個人的にはかなりアツいんじゃないかな〜と思っています。
というよりHTML5がアツいのかも。

もちろん、その分野を専門とするような言語、
例えばiOSならObjective-C、などに速度・可用性の面で勝つことは無理かもしれませんが
状況によっては保守性・学習効率を考えてJSを使うのも一つの手段かと思います。

さて、偉そうな事を書きましたが個人的にすごくJSが好きなので、
web開発を通して長く触っていけたらいいな〜と思います。

八幡(春休みはV8の中身読むぞ)

Comments are closed.