Node.js を会社のテストサーバにインストールした。
Node.js は「サーバーサイド JavaScript 環境」である。
node コマンドにより、CommonJS 仕様に則って書かれた JavaScript を UNIX サーバのシェル上で実行したりできる。
CommonJS 仕様に拡張された JavaScript なので、標準入出力も扱うことができる。
つまり、CGI としても実行できる。
CGI というのは、どんな言語でも I/O インタフェースが合っていれば(例えば標準入出力を使って I/O していれば)実行できるものだから当然だけど。
例えば、Node.jp には console という「標準出力と標準エラー出力に対するブラウザライクなオブジェクト」というのが用意されているので、
$ cat > cgi-bin/node_test.cgi#!/usr/bin/nodeconsole.log('Content-type: text/plain');console.log('');console.log('Hello World');^D$ chmod 755 cgi-bin/node_test.cgi
という具合に CGI としてファイルを作成し、ブラウザから http://127.0.0.1/cgi-bin/node_test.cgi へアクセスすれば、ブラウザ画面に Hello World と表示される。console.log というのは、改行付きで標準出力(STDOUT)に文字列を出力するメソッドである。
ただ、Node.js を CGI として使うのはナンセンスというのが識者の方々の共通認識のようだ。
Node.js 日本ユーザグループのサイト上の「NodeをApache上でCGIとして動かすというのはナンセンスなんでしょうか?」という質問に対してのやり取りがそのあたりの参考になるかな。
たしかに Node.js の機能であるとか、作成動機となった思想であるとか、そういう面から見れば「わざわざ CGI で実行する意味は?」とか「だったら Node.js でなくてもいい」とか、そういう話になるのはわかる。
でも、もっと泥臭い部分で「Node.js で CGI を組ませる」という判断は有り得ると思う。
新人プログラマに、「とりあえず JavaScript と Node.js を覚えてくれ。あとはそれでサーバサイドで実行するプログラムも、クライアントサイドで実行するプログラムも作れるから、Web アプリの開発はそれだけでいけるから。他に Perl や PHP や、Ruby や Java を覚えてもらう必要はないから」と指示する・・・みたいなケースのニーズはあると思うけどねえ。
まあ、CGI で組まなくても、Apache の Proxy 機能を使って、Node.js をアプリケーションサーバ的に使ったりというのもあるだろうけど、既存の CGI 実行形式のアプリケーションに機能追加をしていくというケースもうちの仕事じゃ多々あるので、その際に JavaScript しか知らないプログラマに Node.js を取得してもらって CGI として開発させる・・・というのはありそうなんだよなあ。
まあ、Node.js がそういう用途でまったくパフォーマンスを出せないのであれば仕方ないんだけど。
ということで、少しこのあたりを掘り下げて調べてみようてぇ。
コメントする