■パソコン系に戻る■  最後のレスまで飛ぶ  レスを全部見る  最新レス100件を見る 業者対策用削除人募集です
いま注目の「サーバサイドJavaScript」
1  名無しさん   2011/03/01(Tue) 02:54
第1回
サーバサイドJavaScriptの本命「node.js」の基礎知識


読者の皆さんは、Webアプリケーションを作成する際に、サーバサイドはどんなプログミラング言語をお使いですか? よく聞くのは、PHPやRuby、Perl、Java、ASP.NETなどの言語だと思います。一方でJavaScriptは、主にリッチなGUIを実装するためにクライアントサイドで使われるのが多かったかと思いますが、サーバサイドの開発でもJavaScriptが使えるのをご存じでしょうか。

 「サーバサイドJavaScript」では、文字どおり、サーバサイドのアプリケーションの実装言語として、JavaScriptを使用します。JavaScriptをサーバサイドで使うことにより、クライアントサイドと同じ言語で開発でき、開発効率が上がることが期待されます。

 最近では、JavaScriptエンジンにも、JITが搭載されるようになり、処理速度が格段に向上しました。もはやサーバサイドでよく使われている他の言語と遜色ないといえるでしょう。

 さまざまな技術系メディアやブログでも、「今年はサーバサイドJavaScriptの年になるだろう」といわれていて、注目を集めています。「node.js」は、そのサーバサイドJavaScriptの実装のうちの1つです。すでに日本のユーザーグループも活動しています。

http://www.atmarkit.co.jp/fwcr/rensai2/nodejs01/01.html
2  名無しさん   2011/03/01(Tue) 02:55
本稿では、node.jsの特徴や動作原理に触れ、サンプルや役に立つパッケージ、活用事例などを紹介したいと思います。
□ 主なサーバサイドJavaScript

 node.jsに触れる前に、予備知識として他のサーバサイドJavaScriptにも触れておきます。node.js含め、サーバサイドJavaScriptには、主に以下のようなプロジェクトがあります。
node.js
グーグルが開発したV8エンジン上で実行する環境
Rhino
JavaVM上で実行する環境
SpiderMonkey
C言語で実装され、Firefoxに搭載されている環境

http://www.atmarkit.co.jp/fwcr/rensai2/nodejs01/01.html
3  名無しさん   2011/03/01(Tue) 02:56
サーバサイドJavaScripの標準仕様「CommonJS」とは

 サーバサイドJavaScriptには、「CommonJS」と呼ばれる標準化が策定されています。標準化というと難しい感じがしますが、要はサーバサイドでJavaScriptを実行するのに何が必要かを仕様として、定義しているドキュメントのことです(例えば、「ログが必要だよね」など)。

 node.jsは、このCommonJSに則って開発されています。現段階であれば、CommonJSの仕様も非常にシンプルです。今後、サーバサイドJavaScriptの普及とともに仕様も成長していくと思われます。node.jsと同様に、CommonJSの仕様も発展中です。今からサーバサイドJavaScriptを始めれば、CommonJSの仕様のバージョンアップとともにスキルアップできるかと思います。

http://www.atmarkit.co.jp/fwcr/rensai2/nodejs01/01.html
4  名無しさん   2011/03/01(Tue) 02:57
サーバサイドJavaScriptの本命「node.js」とは

 node.jsとは、サーバサイドJavaScriptの1つですが、「シングルスレッドベースの非同期処理環境」という特徴を持っています。

 普通、非同期処理というと、マルチスレッドを思い浮かべるかと思います。シングルスレッドでどうやって、非同期処理を行うかというと、「イベントループ」と呼ばれるアーキテクチャを用いて、非同期処理を行います。

http://www.atmarkit.co.jp/fwcr/rensai2/nodejs01/01.html
5  名無しさん   2011/03/01(Tue) 02:58
イベントループ

 このイベントループという技術は、C10K問題で有名になった技術です。インターネット上のWebサービスが普及し、たくさんのクライアントからのリクエストを処理するためには、どのようなアーキテクチャが効率的かが議論されました。

 特にApacheとNginx(エンジンエックス)が例に挙げられて、イベントループのアーキテクチャの優位性について、論じられてきました。Apacheは、スレッドベースで動作するアーキテクチャになっており、Nginxは、イベントループで動作します。スレッドベースの場合、クライアントからのリクエストごとに対応するスレッドを作成します。その際、メモリも確保されるため、同時接続するクライアントの数に比例して、使用するメモリ量も増えていきます。

 例えば、ニュースなどで話題になったWebサービスに一時的にアクセスが殺到したとき、つながらなくなることがよくありませんでしょうか? これは、まさしくサーバが瞬間的なアクセス増大に耐えきれなくなってしまうことにより、起こっています。かといって、いつブレイクするか分からないWebサービスのために、メモリ容量などのサーバリソースを余分に確保しておくのは、なかなか難しいことです。

 この問題を解決するアーキテクチャとして、イベントループが開発されました。イベントループは、シングルスレッドで動作します。では、シングルスレッドで、複数クライアントからのリクエストにどう対応するのでしょうか。その答えは、「ノンブロッキングI/O」です。

http://www.atmarkit.co.jp/fwcr/rensai2/nodejs01/01.html
6  名無しさん   2011/03/01(Tue) 03:00
ノンブロッキングI/O

 ノンブロッキングI/Oとは、データの送受信(I/O)が完了を待たずに、他の処理を開始する処理方式のことです。非同期で処理が並列に実行されるため、ある処理の完了を待って、次の処理を行いたい場合は、コールバックを使用する必要があります。

 つまり、イベントループとは、イベントが発生したタイミングでコールバックで呼び出される仕組みのことです。イベントループを使用すれば、スレッドは1つで済むため、メモリ使用率はクライアント数には比例しません。良いこと尽くめのアークテクチャのような気がしますが、デメリットももちろんあります。処理を必ずノンブロッキングで行わないといけないということです。もしブロックしてしまった場合、イベントループ全体の処理が止まってしまいます。

 イベントループの実装は、「Twisted」(Python製)、「EventMachine」(Ruby製)など、いろいろありますが、PythonやRubyを使う場合、一緒に使うライブラリがブロックしないか注意が必要です。

その点node.jsでは、記述言語としてJavaScriptを採用しています。シングルスレッドとノンブロッキングI/Oという特徴をJavaScript自体が持っているため、非常に相性が良いのです。

 次ページからは、実際にnode.jsをインストールしてサンプルプログラムを作成してみましょう。

http://www.atmarkit.co.jp/fwcr/rensai2/nodejs01/01.html
7  名無しさん   2011/03/01(Tue) 03:04
node.js 0.4をインストールしてみよう
- PR -


 本稿では、Ubuntu 10.10に記事執筆時のnode.js 最新版(v0.4.0)をインストールします。

 以下のコマンドをターミナルから実行し、node.jsのソースコードをダウンロードします。

 tar.gzファイルを展開し、展開したディレクトリに移動します。

 node.jsのビルドに必要なパッケージをインストールします。

 ビルドとインストールを行います。

インストールが成功したことを確認します。

 v0.4.0と表示されれば、成功です。

http://www.atmarkit.co.jp/fwcr/rensai2/nodejs01/02.html
8  名無しさん   2011/03/01(Tue) 03:05
node.jsでHello World!!

 インストールが完了したら、お約束のHello Worldアプリケーションを作成してみましょう。

 適当なディレクトリに以下の内容のコードを「helloworld.js」として作成します。

 ターミナルから先ほど作成した「helloworld.js」を指定して、node.jsを起動します。

 Webブラウザを起動し、「http://127.0.0.1:8124/」にアクセスすると、以下のように「Hello World!!」と表示されます。

http://www.atmarkit.co.jp/fwcr/rensai2/nodejs01/02.html
9  名無しさん   2011/03/01(Tue) 03:09
node.jsのパッケージマネージャー「npm」

 node.jsには、「npm(node package manager)」と呼ばれるパッケージマネージャーがあります。

 パッケージマネージャーとは、ソフトウェアのインストールを管理するもので、新しいソフトウェアのインストールや、新しいバージョンへのソフトウェアの更新、以前インストールしたソフトウェアの削除を容易に行えるようにするプログラムです。

 同様のものとして、Rubyには「gem」があり、Pythonには「easy_install」があります。


http://www.atmarkit.co.jp/fwcr/rensai2/nodejs01/02.html
10  名無しさん   2011/03/01(Tue) 03:10
「npm」のインストール

 それでは、npmをインストールしてみましょう。npmのインストールにcurlコマンドを使用するため、curlをインストールします。

 curlにより、「http://npmjs.org/install.sh」がダウンロードされ、install.shが実行されます。

 インストールが成功したことを確認します。

バージョン番号が表示されれば、成功です。

http://www.atmarkit.co.jp/fwcr/rensai2/nodejs01/02.html
11  名無しさん   2011/03/01(Tue) 03:18
node.jsのWebアプリ開発に役立つパッケージ7選

 npmには、すでに1200種類もパッケージが存在します。

http://search.npmjs.org/#/_browse/all

例えば、以下のようなパッケージがあります。これだけそろっていれば、Webアプリケーション開発には、かなり役立つかと思います。
□ 【1】Socket.IO

http://socket.io/

Socket.IO: the cross-browser WebSocket for realtime apps. via kwout

http://socket.io/

http://kwout.com/quote/6f8cknif

 WebSocketのnode.js実装です。チャットなどのリアルタイム通信を作成するのに使用します。イベントループが本領発揮する領域のパッケージです。

http://www.atmarkit.co.jp/fwcr/rensai2/nodejs01/02.html
12  名無しさん   2011/03/01(Tue) 03:20
【2】Express

http://expressjs.com/

Express - node web framework via kwout

http://expressjs.com/

http://kwout.com/quote/sjqk6t94

 Ruby on Railsライクなフレームワークです。MVCの自動生成、ルーティング機能、モデル機能などを持っています。

http://www.atmarkit.co.jp/fwcr/rensai2/nodejs01/02.html
13  名無しさん   2011/03/01(Tue) 03:22
【3】EJS

http://embeddedjs.com/

EJS - JavaScript Templates via kwout

http://embeddedjs.com/

http://kwout.com/quote/hin7ifeh

 node.jsのパッケージの中で、人気があるテンプレートエンジンです。

次ページでは、さらに便利なパッケージを紹介します。

http://www.atmarkit.co.jp/fwcr/rensai2/nodejs01/02.html
14  名無しさん   2011/03/01(Tue) 03:25
【4】jsdom

https://github.com/tmpvar/jsdom

tmpvar/jsdom - GitHub via kwout

https://github.com/tmpvar/jsdom

http://kwout.com/quote/bkfy5az8

 HTMLに対して、DOM操作が使えるようになるパッケージです。

http://www.atmarkit.co.jp/fwcr/rensai2/nodejs01/03.html
15  名無しさん   2011/03/01(Tue) 03:26
【5】node-validator

https://github.com/chriso/node-validator

 バリデーションや文字列操作、サニタイズ処理を行うパッケージです。

http://www.atmarkit.co.jp/fwcr/rensai2/nodejs01/03.html
16  名無しさん   2011/03/01(Tue) 03:28
【6】node-oauth

https://github.com/ciaranj/node-oauth

 OAuth認証を行うパッケージです。

http://www.atmarkit.co.jp/fwcr/rensai2/nodejs01/03.html
17  名無しさん   2011/03/01(Tue) 03:29
【7】node-mysql

https://github.com/felixge/node-mysql

 データベースのMySQLへ接続するためのパッケージです。

http://www.atmarkit.co.jp/fwcr/rensai2/nodejs01/03.html
18  名無しさん   2011/03/01(Tue) 03:31
node.jsの利用事例、7連発!

 最後に、node.jsの利用事例を紹介したいと思います。node.jsにはIDE(統合開発環境)も存在するので、ぜひご参考に。
□ 【1】Node.js Knockout

http://nodeknockout.com/

Node.js Knockout via kwout

http://nodeknockout.com/

http://kwout.com/quote/sv962ukn

 48時間で、node.jsを使ってアプリケーションを作成するというコンペのサイトです。このサイト自体もnode.jsで作成されています。

http://www.atmarkit.co.jp/fwcr/rensai2/nodejs01/03.html
19  名無しさん   2011/03/01(Tue) 03:33
【2】Hummingbird

http://projects.nuttnet.net/hummingbird/

mnutt/hummingbird @ GitHub via kwout

http://projects.nuttnet.net/hummingbird/

http://kwout.com/quote/8qwmehrw

Webのトラフィックをリアルタイムに分析するサービスです。

http://www.atmarkit.co.jp/fwcr/rensai2/nodejs01/03.html
20  名無しさん   2011/03/01(Tue) 03:37
【3】Cloud9 IDE

http://cloud9ide.com/

Cloud9 IDE - Ajax.org via kwout

http://cloud9ide.com/

http://kwout.com/quote/9g6adc36

 Webブラウザで動作するIDEで、JavaScriptプログラムの実行・デバッグが可能です。

http://www.atmarkit.co.jp/fwcr/rensai2/nodejs01/03.html
21  名無しさん   2011/03/01(Tue) 03:38
【4】Skywriter

http://cloud9ide.com/

Mozilla Labs ≫ skywriter via kwout

http://mozillalabs.com/skywriter/

http://kwout.com/quote/uxivhrwd

上の「Cloud9 IDE」と同様にこちらもWebブラウザで動作するIDEです。MozillaのLabs扱いです。

http://www.atmarkit.co.jp/fwcr/rensai2/nodejs01/03.html
22  名無しさん   2011/03/01(Tue) 03:40
【5】WebOS 2.0

http://developer.palm.com/index.php?id=2109&option=com_content&view=article

Intro to HP webOS 2.0 - HP Palm Developer Center via kwout

http://developer.palm.com/index.php?id=2109&option=com_content&view=article

http://kwout.com/quote/hqwmehrw

 Palmを買収したHPの、スマートフォンなど携帯機器向けのオペレーティングシステムです。内部にnode.jsが使用されています。

http://www.atmarkit.co.jp/fwcr/rensai2/nodejs01/03.html
23  名無しさん   2011/03/01(Tue) 03:43
【6】Nodejs on android

http://www.slideshare.net/forest1040/nodejs-on-android

View more presentations from Toshio Mori.

http://www.slideshare.net/

http://www.slideshare.net/forest1040

手前味噌ですが、【5】のWebOS 2.0に触発されて、Androidにnode.jsを移植してみました。

http://www.atmarkit.co.jp/fwcr/rensai2/nodejs01/03.html
24  名無しさん   2011/03/01(Tue) 03:44
【7】Myspace Threads

http://www.myspace.com/threads#!__/home/sort/last_activity

 SNSの「Myspace」のサービスです。アクティブスレッドをリアルタイムに表示します。

http://www.atmarkit.co.jp/fwcr/rensai2/nodejs01/03.html
25  名無しさん   2011/03/01(Tue) 03:45
node.jsで世界を驚かせよう

 今回は、入門ということでnode.jsの概要や事例を説明しました。まだまだ事例は少ないですが、リアルタイムに何かをさせたいときや、複数の人や物と通信を行い制御したい場合に有効活用できるかと思います。

 ぜひ、世界を驚かせるような面白いアプリケーションを作ってみてください。次回は、より実践的にnode.jsでサンプルアプリを作成してみたいと思いますので、どうぞ、お楽しみに!

http://www.atmarkit.co.jp/fwcr/rensai2/nodejs01/03.html
sage  pre  等幅 書き込み後もこのスレッドに留まる
名前: メール:

■パソコン系に戻る■  ページの先頭まで飛ぶ  レスを全部見る  最新レス100件を見る   友達に教える   現在の閲覧者数:

readres.cgi ver.1.69-902
(c)megabbs
(original)