EmacsからnodeやブラウザでCoffeeScriptを動かす
前に書いたJavaScriptの開発環境を整えるついでにCoffeeScriptの環境が整います。
EmacsでJavaScriptの環境を整えたい - はなちん C-x C-c
swank-jsの導入
ivan4thさんのswank-jsを使うとEmacsからNodeやブラウザにつないでJavaScriptを実行できます。
JavaScriptならChromeの開発者ツールやFirebugでも出来ますが、やはりEmacs上で出来ると幸せです。(そのまま保存出来るし)
僕はswank-jsにCoffeeScript用の機能をいくつか付け加えました。
GitHubに置いてあるので、そこから導入します。
GitHub - hanachin/swank-js: Swank backend for Node.JS and in-browser JavaScript
swank-js導入手順
ほとんど深町さんのこの記事と一緒です。
http://e-arrows.sakura.ne.jp/2011/06/connect-to-nodejs-and-chrome-from-emacs.html
違うところだけ、説明します。
0.swank-jsのダウンロード
CoffeeScript用に改造してある僕のリポジトリから落とします。
% git clone git@github.com:hanachin/swank-js.git
1.nodeをインストールします
自分はここを参考にしました。
http://nodejyuku.node-ninja.com/slides/nodeintro1/#handson-0-1
EmacsからCoffeeScriptを使う
swank-jsのディレクトリで以下のコマンドを実行し、swank-jsのサーバーを立てます。
% node swank
EmacsでM-x slime-connect、接続。(ここでslimeとswank-jsのバージョンが違う等のメッセージが出るが気にしない)
ここまではJavaScriptと同じです。
slime-repl JSのバッファーで,select-remoteと入力して、CoffeeScript/directを選びます。
あとはJavaScriptと同じ感覚でCoffeeScriptを入力して実行出来ます。とっても簡単ですね。
EmacsからブラウザのREPLにアクセスしCoffeeScriptを使う
次のブックマークレットを、CoffeeScript使ってattachしたいページで実行します。
Attach Swank Coffee
後はslime-reple JSの画面で,select-remoteでCoffeeScript Browserと書いてるやつを選べばおk
このように、Emacsで書いたCoffeeScriptをブラウザで実行できます。
また、coffee-modeで範囲を選択して、C-c C-rで実行することもできます。
まとめ
- 最初はslime-js.elの方をいじって、elisp側でCoffeeScript->JavaScriptの変換かけようとしていたが面倒だった
- swank-handlerのRemoteを継承するクラスを作ってevaluateメソッドをオーバーライドし、そこで実行前に変換をかければよい
- そのクラスをswank.jsの中で使うようにする
- 別のaltJS、JavaScriptにコンパイルされる言語(Cocoなど)をEmacsから叩きたいときも同じ感じでいけるかも。
という感じ。
CoffeeScriptの問題として、コンパイル後のJavaScriptコードを実行中にエラーがおき、エラー行が表示されても、元々のCoffeeScriptの何行目に対応するのか分からないといったところがあります。
これについてはこちらのスレッドで意見がかわされてるようです。
line number mapping for debug · Issue #558 · jashkenas/coffeescript · GitHub
まぁ僕はとりあえずCoffeeScriptをEmacsから実行できる環境が整ったので満足です。
Emacs使いでCoffeeScript使いで興味を持ってくださった方は是非試されてみてください。
フィードバックは[twitter:@hanachin_]まで。