SpiderMonkeyでのコマンドラインJavascript
Javascriptの実行はWebブラウザ上に限定されたものではない。ターミナル上でもスクリプト言語として実行可能だし、構文チェックも可能。今日はあまり知られていない非ブラウザでのJavascriptの話。SpiderMonkeyをターミナル上で動かすことを中心にまとめる。
SpiderMonkeyとは
- 世界初のJavascriptエンジンのコード名。
- Mozilla Foundationによって保守運用。
- C言語で開発され、インタプリタ、コンパイラ/逆コンパイラ、ガーベージコレクション、標準クラス群を提供。
- LinuxやMacにinstallするとコマンドラインからJavascriptが操作可能。構文チェックも可能。
install
Macにinstallする方法を挙げる。以下2つのどちらかの方法を採用すれば良い。
※sourceからのbuildはmacの場合色々と設定が大変だったのでport installした。1 portからinstallする
これが一番簡単。
$ sudo port install spidermonkey2 sourceをdownloadしてbuild
※以下は実行していないが念のためダウンロードとインストールについて記述する。
SpiderMonkey Build Documentation ここを参考に設定する。
Mac OS X Build Prerequisites 設定が結構大変。
autoconf213が必要なのでまずはそれを入れておく。sudo port install autoconf213ソースの取得方法は次の通り。※murcurialからの取得が時間がかかる。
- tarballでの取得
$ wget http://ftp.mozilla.org/pub/mozilla.org/js/js185-1.0.0.tar.gz $ tar xzf js185-1.0.0.tar.gz
- murcurialからの取得
$ hg clone http://hg.mozilla.org/mozilla-central/※ murcurialを操作するhgコマンドが無いと取得できないので設定されていなければportからinstallする。
sudo port install mercurial
- CVSからの取得
$ cvs -d :pserver:anonymous@cvs-mirror.mozilla.org:/cvsroot login $ cvs -d :pserver:anonymous@cvs-mirror.mozilla.org:/cvsroot co -l mozilla/js/src mozilla/js/src/config mozilla/js/src/editline mozilla/js/src/fdlibm
- 取得したsourceをbuildする。公式のドキュメントには色々と書いてあるがここでは最も簡単な方法でのbuildを行う。
$ cd js/src $ autoconf-2.13 $ ./configure $ make
コマンドラインでのスクリプト実行
SpiderMonkeyの設定が完了したらjsコマンドがインストールされていることを確認する
$ which js /opt/local/bin/jsSyntax Check
sオプションを利用する。構文エラー箇所を教えてくれる。
$ js -s ソースファイル名 ソースファイル名: strict warning: trailing comma is not legal in ECMA-262 object initializers: ソースファイル名: strict warning: }; ソースファイル名: strict warning: ^ソースコードを実行する。
jsコマンドの後にファイル名を指定するだけ。
$ js spidermonkey.js SpiderMonkey実行ソースコード
#!/opt/local/bin/js var SpiderMonkey = function() { this.name = 'SpiderMonkey'; }; SpiderMonkey.prototype = { echo : function() { print( this.name ); } }; var spider = new SpiderMonkey(); spider.echo();コマンドライン引数を渡す
実行ファイルにコマンドライン引数を渡す方法。js ファイル名 引数1 引数2 引数3
$ js arguments.js Javascript Python Java Javascript Python Java実行ソースコード
#!/opt/local/bin/js for(var i=0; i<arguments.length; i++ ) { print( arguments[i] ); }上のように実行ファイルに対して入出力が可能だと例えばHadoopのMap/ReduceにもJavascriptで書けてしまう。
vimにSyntaxCheckを仕込む
この章はおまけ。SpiderMonkeyを利用するとvimと連携してこんな事もできますという感じの内容。
JSLint.vimを利用する
JSLintをvimで使うプラグイン。構文のチェックをしてエラー箇所を教えてくれる。gitにソースが上がっているのでそれを落としてきてrake installする。~/.vimrcにfiletype plugin onを追加する。
$ git clone git://github.com/hallettj/jslint.vim.git $ cd jslint.vim $ rake install (in /Users/YutaKikuchi/work/src/jslint/jslint.vim) Installed ftplugin/javascript/jslint.vim to /Users/YutaKikuchi/.vim/ftplugin/javascript/ Installed ftplugin/javascript/jslint/jslint-core.js to /Users/YutaKikuchi/.vim/ftplugin/javascript/jslint/ Installed ftplugin/javascript/jslint/runjslint.js to /Users/YutaKikuchi/.vim/ftplugin/javascript/jslint/ Installed ftplugin/javascript/jslint/runjslint.wsf to /Users/YutaKikuchi/.vim/ftplugin/javascript/jslint/ $ vim ~./vimrc filetype plugin onSyntaxCheckのコマンドをmapする
Pluginを入れると重くなると感じる人もいるだろうし、ある程度コードしてから手動で確認したいという人はvimrcの設定だけで済ませるのもいいかも。次のmap設定をvimrcに仕込む。※この方法では完全なる文法チェックは行われない。
$ vim ~/.vimrc "syntax check map ,php <ESC>:!php -l %<CR> map ,js <ESC>:!js -s %<CR>vimを開いている時のコマンドモードで",js"と入力すると開いているファイルのSyntaxCheckを行う。以下は実行結果。
arguments.js:7: ReferenceError: test is not defined