Nodeclipse 0.3 has been released.

こんにちは。またブログの更新サボってました。

ってサボってたって言うか、またマニアックなことの続きです。

マニアックなこととは、Node.jsのEclipseプラグインであるNodeclipseにデバッグ機能をつけた件です。

あれからNodeclipse本体の方々とやり取りして、本体に統合されました。
Eclipseマーケットプレースにも登録しました。

下記を参照してください。もしよかったら、Eclipseマーケットプレースの★をポチッとしてもらえるとうれしいです。

http://marketplace.eclipse.org/content/nodeclipse
http://www.nodeclipse.org/
http://www.youtube.com/watch?v=8ACnLALdKT8
https://github.com/Nodeclipse/nodeclipse-1

ではでは。

Nodeclipseにデバッグ機能を付けてみた。

お久しぶりです。だいぶ更新をサボっていました。

ってか、サボっていたと言うよりも、かなりマニアックな所にはまり込んでました。

マニアックな所っていうのは、Eclipseでもっと便利にNode.jsアプリケーションのデバッグをしたいっていう欲求を満たすことです。

以前に、Nodeclipseを触ってみたという記事でNode.js用のEclipseプラグインを紹介しましたが、V8デバッガー(chromedevtools)との連携が取れていなく、ちょっと面倒でした。

まず、Nodeclipseのエディタのルーラをダブルクリックしてもブレークポイントの設定ができませんでした。

また、chromiumエディター上ではブレークポイントの設定は出来るけど、JavaScriptファイルがV8上にロードされるまで、.chromiumファイルが生成されないため、例えば、「デバッガー起動前にブレークポイントが設定できない」、デバッガー起動後も、「Expressのindex.js上にブレークポイントを設定しようとしてもできない」など、数々の不満がありました。

これを一丁解決してみようやないかと、Nodeclipseの改造を始めてしまいました。

苦節数ヶ月。やっと完成しました。

ついでに、Expressプロジェクトの生成機能も追加しています。

詳しくは下記のサイトを参照してください。

http://www.tomotaro1065.com/nodeclipse/

Nodeclipseのオーナーの方にはPull Request中です。

ちなみに、英文作成とナレーションはGoogle翻訳先生にお願いしました。便利な世の中になったものですね。

Cloud9を触ってみた。

ubuntu 10.10にCloud9環境を構築してみました。

http://codedehitokoto.blogspot.jp/2012/01/nodeidecloud9.html

上記ページを参考にやってみました。
既にGitやNode.jsはインストール済みである前提です。

Node.jsをまだインストールしていない場合は、Node.jsを触ってみたを参照してインストールしてください。

Gitに関しては、Google先生に聞けば山ほど情報があると思います。

で、本題です。

$ git clone git://github.com/ajaxorg/cloud9.git
$ cd cloud9/bin/
$ ./cloud9.sh

とすると、こんなエラーが発生。

Error: Cannot find module 'dryice'
at Function._resolveFilename (module.js:320:11)
at Function._load (module.js:266:25)
at require (module.js:348:19)
at Object. (/Users/cmeier/workspace/clojureland/
workspace/ace/Makefile.dryice.js:39:12)
at Module._compile (module.js:404:26)
at Object..js (module.js:410:10)
at Module.load (module.js:336:31)
at Function._load (module.js:297:12)
at Array. (module.js:423:10)
at EventEmitter._tickCallback (node.js:126:26

ネットを色々検索していると、

$ sudo npm link .

をすれば?的なコメントがあったのでやってみてもこんなエラーが発生。

Error: Each commonjs root should be a directory: /home/tomotaro1065/cloud9/node_modules/ace/lib
at CommonJsProject. (/home/tomotaro1065/cloud9/node_modules/dryice/lib/dryice/index.js:665:13)
at Array.map (native)
at new CommonJsProject (/home/tomotaro1065/cloud9/node_modules/dryice/lib/dryice/index.js:663:27)
at Function.copy.createCommonJsProject (/home/tomotaro1065/cloud9/node_modules/dryice/lib/dryice/index.js:936:10)
at worker (/home/tomotaro1065/cloud9/Makefile.dryice.js:43:30)
at main (/home/tomotaro1065/cloud9/Makefile.dryice.js:35:9)
at Object. (/home/tomotaro1065/cloud9/Makefile.dryice.js:100:5)
at Module._compile (module.js:449:26)
at Object.Module._extensions..js (module.js:467:10)
at Module.load (module.js:356:32)

どうやらaceというモジュールが必要なんだろうと思い、

$ sudo npm install ace
$ sudo npm install treehugger

なんかをやってみても、

@@@@ FATAL ERROR: DRYICE FAILED { '0': 'Failed to find module: ace/lib/fixoldbrowsers' }

make: *** [plugins-client/lib.ace/www/worker/worker-language.js] エラー 1
Linux 64 bit
path.existsSync is now called `fs.existsSync`.

module.js:340
throw err;
^
Error: Cannot find module 'asyncjs'
at Function.Module._resolveFilename (module.js:338:15)
at Function.Module._load (module.js:280:25)
at Module.require (module.js:362:17)
at require (module.js:378:17)
at Object. (/home/tomotaro1065/cloud9/plugins-server/cloud9.process-manager/process_manager.js:11:13)
at Module._compile (module.js:449:26)
at Object.Module._extensions..js (module.js:467:10)
at Module.load (module.js:356:32)
at Function.Module._load (module.js:312:12)
at Module.require (module.js:362:17)

もう完全にブチ切れました。もうCloud9なんて知るかぁ!!

しかし、何とか思いとどまりました。こんははずはない。何か間違っているはずだと。

あきらめずに検索していると、下記のサイトを発見。

http://ubuntuforums.org/showthread.php?t=1813076

先ほどのサイトとは少し手順が違うみたいなのでやってみた。

$ git clone git://github.com/ajaxorg/cloud9.git
$ cd cloud9
$ git checkout devel
$ git submodule update --init --recursive
$ bin/cloud9.sh

おぉ〜。動いたぁ!
と思ったのもつかの間。

$ bin/cloud9.sh -w ~/nodework/express-hellocl/

expressで生成したプロジェクトをCloud9に読み込ませて、ポート番号だけ変更して(Cloud9が既に3000番を使っているため。)実行するも、zlibがないとかってコンソールに出る。

node.js:116
throw e; // process.nextTick error, or 'error' event on first tick
^
Error: Cannot find module 'zlib'
at Function._resolveFilename (module.js:299:11)
at Function._load (module.js:245:25)
at require (module.js:327:19)
at Object. (/usr/local/lib/node_modules/express/node_modules/connect/lib/middleware/compress.js:14:12)
at Module._compile (module.js:383:26)
at Object..js (module.js:389:10)
at Module.load (module.js:315:31)
at Function._load (module.js:276:12)
at require (module.js:327:19)
at Object.compress (/usr/local/lib/node_modules/express/node_modules/connect/lib/connect.js:89:14)

引き続き、色々調べてみると、どうやらNode.jsのバージョンが0.6よりも古いとこのようなエラーが出ることがあるという情報に行き着いた。
が、自分が入れているNode.jsは0.8.11。おかしい。。。と思っていたら、Cloud9.shの中を見てみると、Cloud9に添付されているNode.jsを起動しており、そのバージョンが0.4系であることが判明。
なぜ、今頃0.4。。。

Cloud9.shを0.8.11のNode.jsを起動するように書き換えて実行してみた。すると、今度は下記のようなエラーが発生。

Error: require.paths is removed. Use node_modules folders, or the NODE_PATH environment variable instead.
at Function.Module._compile.Object.defineProperty.get (module.js:386:11)
at Object. (/usr/local/lib/node_modules/cloud9/support/paths.js:7:8)
at Module._compile (module.js:449:26)
at Object.Module._extensions..js (module.js:467:10)
at Module.load (module.js:356:32)
at Function.Module._load (module.js:312:12)
at Module.require (module.js:362:17)
at require (module.js:378:17)
at Object. (/usr/local/lib/node_modules/cloud9/bin/cloud9.js:6:1)
at Module._compile (module.js:449:26)

色々と調べて、

$ export NODE_PATH=/usr/local/lib/node_modules/

などをやってみるも変化なし。どうも新しいバージョンのNode.jsではrequire.pathsが削除されたが、Cloud9で使用しているためのエラーっぽいです。

ん。。。完全に手詰まりかと思っていた時に。

$ npm -g install cloud9

だけでインストールできて楽チンだよね。みたいな記事を発見。
まじか。今までの苦労は?と思ったが、とりあえず藁にもすがる思いでやってみるも、

Error: require.paths is removed. Use node_modules folders, or the NODE_PATH environment variable instead.
at Function.Module._compile.Object.defineProperty.get (module.js:386:11)
at Object. (/usr/local/lib/node_modules/cloud9/support/paths.js:7:8)
at Module._compile (module.js:449:26)
at Object.Module._extensions..js (module.js:467:10)
at Module.load (module.js:356:32)
at Function.Module._load (module.js:312:12)
at Module.require (module.js:362:17)
at require (module.js:378:17)
at Object. (/usr/local/lib/node_modules/cloud9/bin/cloud9.js:6:1)
at Module._compile (module.js:449:26)

なんじゃい、それは!!

もうあきらめようと何度も思いましたが、ふとCloud9のフォルダを眺めているとREADME.mdファイルが目に留まりました。

何気なく中身を見てみると、なんとインストール方法が書いとるやないかぁ!!

何々。sourcemintでソース管理をするようになった?

$ sudo npm install -g sm
$ git clone https://github.com/ajaxorg/cloud9.git cloud9
$ cd cloud9
$ sudo sm install
$ bin/cloud9.sh -w ~/nodework/express-hello/

とりあえず、Cloud9は起動した。が、app.jsをダブルクリックして開こうとすると、

http.js:686
throw new Error('Can\'t render headers after they are sent to the client.'
^
Error: Can't render headers after they are sent to the client.
at ServerResponse.OutgoingMessage._renderHeaders (http.js:686:11)
at ServerResponse.res._renderHeaders (/home/tomotaro1065/cloud9/node_modules/connect/lib/patch.js:76:25)
at ServerResponse.writeHead (http.js:950:20)
at module.exports.getList (/home/tomotaro1065/cloud9/plugins-server/cloud9.ide.filelist/filelist-plugin.js:77:33)
at Socket. (/home/tomotaro1065/cloud9/plugins-server/cloud9.ide.filelist/filelist.js:55:17)
at Socket.EventEmitter.emit (events.js:88:17)
at Pipe.onread (net.js:390:31)

シュン。。。なんでやねん。。。もういややぁ。無理!!!


気を取り直してMac OS Xで再挑戦。

なぜか、Mac OS XではREADME.mdに書いてある方法で、正常に動いている模様。おぉ、ブレークポイントも止まるし、ステップ実行も出来るやん。変数の中身も見れる。

Windowsでは動くんかなぁ。。。
あれ?sourcemintのインストールで失敗してる。
まぁ、良いか。Windowsやし。気にしない、気にしない。(^^;

Ubuntuでは何で動かないんかなぁ。。。色々と試行錯誤でごちゃごちゃしてたから、変なごみでも残ってるんかなぁ。今度、クリーンにして、最初からやってみようか。

Nodeclipseを触ってみた

NodeclipseというNode.js用のEclipseプラグインがあったので触ってみた。

Update Site : http://www.nodeclipse.org/updates

デバッグ起動用のコンソールを立ち上げる必要がなくて、Eclipse上から起動できるのでちょっと便利かな。

本当は、デバッグ起動時にV8エンジンデバッガーも一緒に起動してくれると、もっと便利かも。


あと、package.jsonを作ってdependenciesを指定すると、Eclipse上から「npm install」もできるみたい。

※追記
こちらも参照してください。便利になりましたよ。


フルスクリーン

Node.jsをEclipseでデバッグしてみた

EclipseJavaScriptデバッグするにはJSDTというプラグインが必要だけど、Eclipse for Java EE Developpersをダウンロードすると、あらかじめJSDTも含まれている。

Node.jsをEclipseデバッグするにはGoogle Chrome Developer Toolsプラグインも入れる必要がある。

http://chromedevtools.googlecode.com/svn/update/dev/

後は、[File]-[New]-[Project]-[JavaScript]-[JavaScript Project]でプロジェクトを作成し、Project Exploerでプロジェクトを選択して右クリックで[New]-[JavaScript Source File]でJavaScriptファイルを作る。

hello.js

var sys = require('sys');
var http = require('http');
var port = process.env.PORT || 8081;
 
var server = http.createServer(
    function (request, response) {
 
        response.writeHead(200, {'Content-Type': 'text/plain'});
        response.write('Hello World!!\n');
        response.end();
    }
).listen(port);
 
sys.log('Server running at http://127.0.0.1:'+ port + '/');

コンソールを開いてプロジェクトのディレクトリに移動し、

node --debug-brk hello.js

Eclipseに戻り、[Run]-[Debug Configration]を選択し、[Standalone V8 VM]を選択して左上の[+]ボタンを押下する。

[Name]に適当な名前(今回は「localhost」とした)と、[Port]に「5858」を入力して[Debug]を押下。

ブレークポイントを設定して

http://localhost:8081/

にアクセスすると、ブレークポイントに止まった。

ステップイン、ステップアウト、ステップオーバーも出来る。


※追記
こちらも参照してください。もっと便利にデバッグできますよ。


フルスクリーン

node.js+express+ejsでHello World on Heroku

node.js+express+ejsでHello WorldしてHerokuで動かしてみた。


フルスクリーン

sudo npm install -g express@2.5.9 ejs
express -t ejs
node app.js ⇒エラー発生 Cannot find module 'express'
npm install -D
node app.js ⇒http://localhost:3000/ にアクセス成功!
vi app.js ⇒ポートをprocess.env.PORTから取得するように変更。
vi package.json ⇒nodeとnpmのバージョンを指定。 これを追加しなければ、Herokuにデプロイした後、なぜかzlibが見つからないと言うエラーが発生する。

package.json

{
  "name": "express-hello",
  "version": "0.0.1",
  "private": true,
  "engines": {
    "node": "0.8.5",
    "npm":  "1.1.41"
  },
  "dependencies": {
    "express": "2.5.8",
    "ejs": ">= 0.0.1"
  },
  "devDependencies": {
    "ejs": "~0.8.1",
    "express": "~2.5.8"
  }
}

echo 'web: node app.js' > Procfile
echo 'node_modules/' >.gitignore
git init
git add .
git commit -m
heroku create
git push heroku master

HerokuでNode.jsを動かしてみた。

Gitのインストール

sudo apt-get install git-core

toolbeltのインストール(Ubuntuの場合)

wget -qO- https://toolbelt.heroku.com/install.sh | sh

鍵生成

ssh-keygen -t rsa

Herokuへのログイン

heroku login
Enter your Heroku credentials.
Email: <メールアドレス>
Password: <パスワード>

Hello WorldをHerokuへデプロイ

フルスクリーン

Procfile

web: node hello.js

package.json

{
  "name": "node-hello",
  "version": "0.0.1",
  "engines": {
    "node": "0.8.5",
    "npm":  "1.1.41"
  }
}

git init
git add .
git commit -m init
heroku create node-hello --stack cedar
git push heroku master