WHAT'S NEW?
Loading...

Fedora18にNodebrewでNodejs入れてExpressなWebアプリをforeverで動かそう!

■なんという事でしょうン!!

もうね、あれですな。うんうん。しょうがない。

たまに趣味で、いろいろな会社の募集項目見るんだよ。開発会社とか、デザイン会社とか、およそ俺が即役に立てることができそうな業種のね。

で、条件ってところにはたいてい、どういったサービスをどれくらいやってたのか、とか、使ってた言語とかってのが書いてあることが多いんだけどさ、うん。

もうね、PHPとかって載ってないんだよね。ほっとんどの会社がね。

ライトウェイトな言語だとたいていPerlとかPythonとか、得に多いのがRubyね。うんうん。うんこ。
Rubyって言うよりむしろ、Ruby on Rails使ってる会社が多いみたい。ンダーーー!!!!

あとはスマートフォン用のゲーム開発だね。多いね。実に多いね。
スマートフォン買ったはいいけど全然使ってない。誰からも電話かかってこないし、誰にもかけないし、ただの文鎮ですなぁ。
ま、それはいいとして。

というわけで、なんだかPHPに対する愛情が薄れてきたというか、正直いうとね、飽きちまったんだよね。うん。

実に困ったもんですなぁ。


■お分かりいただけただろうかン!

実はね、こんな俺でも色々考えたんだよ。だいたい4~8秒くらいは。

以前(というかまだ現在進行形ではあるけど)まではいわゆるLAMPね。LinuxにApacheぶち込んでMySQLとか入れちゃってPHPとかで開発~みたいな。うひ。

使ってるフレームワークはCakePHP。1.1から使い始めてたけど、今やもう2.3とか?すごいよねー。でもさ、なんだかさ、CakePHPがだんだんファットになってきて、ワッツザファック!な感じなのよ。だから一時期FuelPHPにも浮気してみたりしたよ。うん。あくまで浮気ね。重婚じゃないからいらぬ詮索はせぬように。

でも、やっぱりなんだか飽きてきた。PHPに飽きてきた。

PHPは好きだよ。ずっといじってきたし。でも満たされなくなってきた。
俺は常に変化してないと駄目なんだ。

カンダタ。本文とは関係ありません。


ちょっと前に、MongoDB使おうかなって思ってたんだよね。MongoDBってJavaScriptライクなデータの持ち方してるでしょ?JavaScript結構好きなんだよ。

だからいじってみたくなった。CakePHPでも市川さんがプラグイン作ってくれたみたいだし、すごくやってみたい。

で、PHPに飽きてる+MongoDBいじってみたいって1,024秒くらい考えてたらさ、いっその事全部JavaScriptでやっちまえばいいんじゃないかって思った。

そこで思いついたのがNodeですよ。Nodejs。うん。もうサーバサイドでもJavaScriptだね。Socket.I/Oとかすごく興味深いじゃん!!!

ちゅーわけで、早速俺のトーハムサーバにNodejs環境をねじりこんでみたYO!!!

■Nodeから手が出るン

早速行ってみよう。
俺のマシンは以下の感じだ。だいたいこんな感じだ。だから安心。

Fedroa18 x86_64

VirtualBoxで動かしてる。

顔がスティーブン・セガールで、話し方がクリス・タッカーで、動きがマイケル・ジャクソンみたいなオッサンがいたら死ぬほどうざいじゃん?Fedoraってそんな感じね。だから夜も安心。

 


で、ホストOSがWindowsで、ゲストOSがLinuxな環境で動かしてるって感じね。
Windows側にはPoderosaっていうコンソールソフトをつかって、ゲストOSにあくせくとアクセスしてるよ。

CentOS6とかUbuntuとかっていう、まるで三浦春馬みたいなOS大好きちゃんは、いろいろライブラリ系が足りなくなるかもしれないけど、それはお手持ちの知識と経験でカバーしていただきたい!!!俺に聞くともれなくうんこ投げるよ。


まずは、あとでいろいろと面倒くさくならないように、いまのうちに関係ありそうで実は関係ないかもしれないけど入れておくと寝覚めがよさそうなパッケージをひと通り入れておこう。
# yum -y install gcc-c++ openssl-devel libxml2 libxml2-devel boost boost-devel
ふぅ、これだけでも体力消耗するぜ。年取ったなぁ俺も。モン~~。


さて次に行く。
Nodejsの各バージョンをそれぞれ使えるように、Nodebrewというものを入れるんだ。
NodebrewでNodejsを各バージョンに切り替えられるし、個別にインストールすることができるので便利だ。何気にさりげなくあどけなさを感じるしどけなさがやるせねぇ。
$ cd
$ curl https://raw.github.com/hokaccha/nodebrew/master/nodebrew | perl - setup
インストールが終わったら.bashrcに以下を追記だ。
export PATH=$HOME/.nodebrew/current/bin:$PATH
まぁここらへんはインストール中に画面にヒントが出てくるんで書かなくてもわかると思うけど、俺は老眼だからよく見ないんだよね。だからハマって困らないように書いてみた。


よし、ちゃんとインストールできてるか確認でございますYO!
$ nodebrew help
ヘルプが表示されたら大成功!!赤ヘルメットかぶってドッキリカメラ!!とか言ってみたくなるよね。

ね!!! m9(´゚д゚`)


そしたらこの、Nodebrewをつかって、好きなバージョンのNodejsを入れてみようぜ。
もう一度いうけど、入れてみようぜ。もう一度いうけど、入れてみようぜ。

今回入れるのは、Nodejsのステーブル・セガールなバージョンである、小数点が偶数のバージョンだ。
  • v0.10.7
  • v0.8.23
本日の時点では、この2つが入っていれば大丈夫でしょう。
$ nodebrew install-binary v0.10.7
$ nodebrew install-binary v0.8.23
これで2つ入った。
バージョンの切り替えは
# nodebrew use v0.10.7
などとすればそのバージョンになってくれる。

あとでやるけど、追加したライブラリなんかもバージョン別に管理してくれるから楽だね。
あんまり楽すると太るんだけど、それはまた別の機会に詳しく説明するよ。

※逆の言い方をすると、v0.10.7で入れたモジュールやツールなどは、v0.8.23に切り替えたら当然使えないってことになるので、バージョンを頻繁に切り替える必要がある人は、両方のバージョンに同じようにモジュールやツールなどをインストールしておく必要があるよ。それはそれで混乱するだろうけど。いずれにせよnodebrewが便利なことには違いないィ!!!

■こ、こいつン、動くぞン!!

さてと、実際にNodeでサンプルスクリプトを動かしてみようズ。
var http = require('http');
http.createServer(function (req, res) {
  res.writeHead(200, {'Content-Type': 'text/plain'});
  res.end('Hello World\n');
}).listen(1337, "192.168.56.101");
console.log('Server running at http://192.168.56.101:1337/');
こんなスクリプトをexample.jsとかって名前でファイルに保存しておこう。
場所はホームディレクトリでいいと思う。



そしたらおもむろに実行するべし!!
$ node example


コンソールからプロンプトが返ってこなくなったけど、この状態でブラウザで『192.168.56.101:1337』を見ると、あら不思議!!!不思議なことが起きてるから不思議!!


しょべぇ!!いつにもましてしょべぇ!!
まるで新人パイロットがよくかかる病気になっちまったようだ!!

安室 令(仮名:15歳)


しかし、コレはApacheで動いてるわけではない。紛れもなくNodejsで動かしてるンだ。大感動だ。

ひと通り感動したら次にいくので、コンソール側はCtrl+Cでキャンセルしておこう。

キャンセルしたらブラウザで見れなくなるのも確認しておくとなかなかの神経質で将来が不安!!

■5倍以上のゲイン以上がある以上ンぬ!!

さて、先ほどのコンソールでは、直接example.sjをnodeコマンドで叩いだけど、プロンプトが返ってこなくなるので、他の作業ができなくなる。

そうではなくて、Apacheなどのデーモンみたいに、起動したらバックグラウンドで永遠と動き続けてほしいって思ったのは俺だけじゃないはずだ。多分、隣のミヨちゃんも思ったはずだ。概ね、後ろの百太郎も思ったはずだ。

そこで登場するのはForeverだ。

Foreverをいれてforeverコマンドでexample.jsを走らせてみれば、その意味が確実にわかると思う。確実!!!そう、ゲップを飲んだらコーラが出るように!!!


早速Foreverを入れようじゃないかしら?
※疑問形なのは特に意味はない。
$ npm install -g forever
これでOKだ。

実は以前までNodejsとは別々にインストールしてたnpmだけど、Nodejsに含まれることになったので、上記Nodebrewでインストールした時点で入ってくれてるという如才の無さが素晴らしい。

そしてnpmってなんぞや?って思ったら、まぁなんという勉強不足の坊やでしょう!!

Nodejsで使うモジュールを探してくれてインストールしてくれる便利なおもちゃ!!といっておきますが、詳しくはWebで。


さて、Foreverをつかってexample.jsを起動してみよう。nodeコマンドとは違って、拡張子まで書かないといけないので、そこが注意だ。だから注意しよう!!
$ forever start example.js
どう?スグにプロンプト返ってきたでしょ?これよ、これ。


これならママもホームラン。明日はOKさ!!

そしてこのforeverは何個でも実行することができるんだけど、以下のコマンドで実行しているスクリプトが一覧表示されるのでわかりやすい!!番号もつけてくれてる。
$ forever list

実行を止めるには、この番号を指定してstopさせればOK。
$ forever stop 0
これで0番のスクリプトが止まるから寝覚めよさそうだね。
一度とめたらブラウザから見れなくなるもの、例によって確認しよう。

ブラウザがうんともすんとも言わなくなるサマを再び体感しよう。
そう、まるで、新人パイロットがよくかかる病気のようにね!!

亜室 霊(仮名:v0.15.0)

■親父がハマるわけだンぬ!!

さて、もう君は立派なNode使いになった気分だろ?少なくとも俺はそうだ。
いや、そうだった、というほうが正しいか。

NodejsでJavaScriptファイルをコリコリ書くのって、結構面倒くさいと思わない?
まるでHTMLをプチプチ書いて、西暦だけPHPタグで動的にしたり、ヘッダとフッタを動的includeしてみたり、何度も同じような事を繰り返したりするのは無駄だと思うんだよ。

まぁ正解をいうと、フレームワーク使おうぜって話。

フレームワークというとまっさきにRuby on Rails思い浮かべる人はIT業界の最先端!!CakePHPなどのMVCフレームワークも参考にしたって言うほど、構造的にはRuby on RalisがIT業界Web屋のスタンダードになってるといっても過言ではないんだろうね。

俺はRuby on RalisどころかRuby自体を使ったことが(割りと5回くらいしか)ないので、よくわからんけどね。悲しいけど、これ現実なのよね。

というわけで、Nodejsで使えるExpressJsという、これまたRuby on Railsを参考にしたといわれるフレームワークをねじり込もう。
$ npm install -g express
以上だ。-gをつけてるから、グローバルで使えるようになる。コレは便利。

そして早速プロジェクトを作る。プロジェクト名はsampleでいいだろう。
$ express -e sample
このeというオプションは、ejsというテンプレートエンジンを使うぜ!っていう宣言だ。
入れなかったらjadeというテンプレートエンジンになるよ。

さて、プロジェクトを作った直後に表示されるヒントに使い方が書いてあるので、その通りやってみよう。
$ cd sample
$ npm install
おや?npmのinstallオプションに、インストールするモジュール名がないですぞ?と思ったら鋭い。実はモジュール名がない場合、同じ場所にあるpacjkage.jsonを見るという仕組みになっているらしい。コレは便利!!ブバ!!

プロジェクト作成時にeオプションを付けたので、ejsテンプレートが無ければいけないが、まだ入ってない。でもプロジェクト作成時に自動的にpackage.jsonに書かれてあるので、npm installだけでejsが入ってくれる、という、なんともバッチグーな作りになっていて身長伸びそうだね。俺はコレで身長が2m超えたんだ。大変だ。

そしてnpm installが終わったら実行してみよう。
$ node app

実行すると、ポート番号が表示されるので、この場合は3000だ。ブラウザで192.168.56.101:3000を見てみよう。
すると、カッコイイサイズでカッコイイ文字がカッコイイ感じでカッコイイからすごい!!



ただExpress、Welcome to Expressって書いてあるだけなんだけど、新人パイロットがよくかかる病気っぽさがなくて、これは良いと思うんだ。うん、良いね。

さて、実行するときにnodeコマンドでappを叩いたけど、もちろんforeverコマンドでapp.jsを叩いて実行するのもアリなのは言うまでもないよね。言うまでもないから言いたくなかったんだけど、書いてしまったから気にしないでくれ。あんまり細かい事気にしてると下痢するよ。

■ボクンが一番Nodejsをうまくン扱えるンだ!!

といえるように、頑張りましょうぞ。



というわけで、唐突に終わるよ。
どっとはらい。