Node.jsを使ってみたのでその記録。
JavaScriptはWebブラウザの中でだけ動作するプログラム言語だ。私はこの言語になじんでいる。というのも FlashのActionScriptやAdobe ExtendScript ToolkitもほぼJavaScriptなので、よく使っているから。
デスクトップPCでは Perl/Python/Ruby などの言語を使うのが普通だが、いろいろ言語ごとに作法が違う。私はJavaScriptをデスクトップPCでも使いたいので、Node.jsを使ってみることにした。
動作環境
- Windows XP
- Node.js v0.6.13
- gnupack-devel 7.03
インストール
- http://nodejs.org/ でWindowsのインストールファイル (node-v0.6.13.msi 3.5MB) を取得してインストール。
- Windowsのコマンドプロンプトから使うことができる。
しかし私はCygwin+Emacs(gnupack)で使いたい。 - gnupack http://sourceforge.jp/projects/gnupack/ からファイル (gnupack_devel-7.03.exe 129MB) を取得してインストール。
gnupackはNTFSパーテーションにインストールすること(シンボリックリンクを使うgitなどのため)。Emacs23.2以降はjs-mode搭載している。インデント幅は2にしたほうがよいようだ。(setq js-indent-level 2)
参考: http://popkirby.github.com/contents/nodeguide/style.html - $HOME/.bashrc に
export PATH=$PATH:/c/Documents\ and\ Settings/foo/Application\ Data/npm:/c/Program\ Files/nodejs
を追加してminttyからもnode.exe使えるようにする。
初歩
最初は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。正常に動作した。
JavaScriptパターン ―優れたアプリケーションのための作法
- 作者: StoyanStefanov
- 出版社/メーカー: オライリージャパン
- 発売日: 2011-02-16
- メディア: 大型本