Node.js v0.6をWindowsで使ってみる

Node.jsを使ってみたのでその記録。


[しゃべり担当] JavaScriptWebブラウザの中でだけ動作するプログラム言語だ。私はこの言語になじんでいる。というのも FlashActionScriptAdobe ExtendScript ToolkitもほぼJavaScriptなので、よく使っているから。


デスクトップPCでは Perl/Python/Ruby などの言語を使うのが普通だが、いろいろ言語ごとに作法が違う。私はJavaScriptをデスクトップPCでも使いたいので、Node.jsを使ってみることにした。


動作環境

インストール

初歩


最初はSTDOUTに出力。

console.log('hello node')



次はドキュメント http://nodejs.org/api/synopsis.html にある通り、Webサーバを立ててブラウザにHTML出力。

var ht = require('http');
ht.createServer(function (req, response){
    response.writeHead(200, {'Content-Type':'text/html; charset=utf-8'});
    response.end('<html><body><h1>Hello <span style="color:#c99;">Node.js</span></h1></body></html>\n');
}).listen(8124);
console.log('Server running at http://127.0.0.1:8124/');



次はファイルアクセス。まずはstatでファイルサイズを調べる。参考: http://nodejs.org/api/fs.html

var fs = require('fs');
var fname = 'nodeTest.txt';
fs.stat(fname, function(err, stats){
    if (err) throw err;
    console.log('stats:' + JSON.stringify(stats));
});



次はファイル読み書き。正規表現置換も。参考: https://developer.mozilla.org/ja/Core_JavaScript_1.5_Reference/Global_Objects/String/replace
ちなみにgnupack7.xxはコンソールの文字コードShift_JIS(CP932)なのでSTDUOTにUTF-8を出力できないらしい。ここではファイルに出力。

var fs = require('fs');
var fname = 'nodeTest.txt';
fs.readFile(fname, function(err, data){
  if (err) throw err;
  var newstr = data.toString().replace(/なんだ/,'なのよね');
  fs.writeFile('new_'+fname, newstr);
});


それでは次はちょっと自分に役に立つスクリプトを書く。
あるフォルダに 'emacs.exe' 'FirefoxPortable.exe' などのショートカットアイコンがたくさんあるとする。ショートカットアイコンは実は emacs.exe.lnk という「.lnk」拡張子がついているのだがexplorerからは表示されてない。


で、このショートカットアイコンのファイル名から「.exe」を除きたい。

var fs = require('fs');
var dir = 'z:/';
fs.readdir(dir, function(err, files){
  if (err) throw err;
  for(var i=0; i<files.length; i++){
    var oldFileName = dir + files[i];
    var newFileName = oldFileName.replace(/\.exe\./, '.');
    if (oldFileName !== newFileName){
      console.log('mv '+oldFileName+' '+newFileName);
      fs.rename(oldFileName, newFileName, function(err){
        if (err) throw err;
      });
    }//if
  }//for
});


OK。正常に動作した。