読者です 読者をやめる 読者になる 読者になる

糸電話式のアレ

プログラミングのこと。毎日のこと。書いています。

JavaScriptとか好きだからー

javascript expressjs node.js
HerokuがNode.jsに対応した

というのはもう随分前の話のように思えますが、そういうことだと聞いたのでHeroku×Node.jsを試してみようと思い立ちました。

なんでNode.jsかって?

それは、JavaScriptとか好きだからー。

CoffeeScriptでも可。

Herokuと言うことは、WEBアプリを作らなきゃ。

ではでは、WEBフレームワークを使ってみようじゃないか。
して、どこのどいつが今の流行りなのよ?ってGoogle御大に尋ねたところ、それはExpressがよろしかろう、とのこと。

WEBフレームワーク Expressを試してみる

インストールまではいろんな所で紹介されているし、公式の情報で何も困らないのでさくっと説明します。

ボクの場合は、使っているOSはMacOS Xです。
順当にHomeBrewでNode.jsをインストールして、npmでインストールしました。


sudo brew install node
sudo npm update
sudo npm install -g express

npmにはsudoはいらないかも。
権限で怒られるのが面倒なのでつけてしまってます。


インストールし終わるとexpressコマンドが使えるようになります。
このコマンドを使って、新規アプリを初期化します。



cd ~/work/node
express ./express_practice
cd ./express_practice
npm install -d

この新規アプリには、サンプルのアプリが既に入った状態になっています。

さあ、手始めにサンプリアプリのソース読んじゃうぞぉ、と

ふえぇ……なにこれ……分かんないよぉ

多分、初見だと大抵の人がそんな状態だと思います。


ボクの場合、モダンなWEBフレームワークとは縁遠いSIer勤務で、WEBフレームワーク自体あんまし使わないので、特にさっぱりでした。
Node.jsもよくわかってないしね。

で、公式のガイドを見に行くことに。

ガイドには観光ガイド程度のコトしか書いてねぇ

頼るべき公式サイトのガイドは精々、2 cent tour止まりでした。本当に、さわりだけ紹介してもらえるだけなのね。

ガイドの内容が薄いというそれ以上にexpressの正体がわかってないので、そのガイドが言っている意味すらわからない。

公式ページにAPI仕様もないのはちょっと辛い。(ボクの検索スキルが低くて見つけられなかっただけでどっかにあるのかな?)

とりあえず、あまりに分からん過ぎたのでexpressのソースを読みながら調べることにしました。
プログラマにとってライブラリとは読むものですね。

なるほど、ソースを見ながらだと、ようやくガイドの内容がやや理解できてきました。

大体つかめたかも知れなかぁない、そんな思いがした気が芽生えた

なんとなく大枠の理解を得た所で、サンプリアプリを一行ずつ解読してみます。

とりえあず一番大きな、app.jsを見てみます。

分かったことをソース中にコメントで書いたのが以下になります。

結局は、ガイドに書いてある内容とほとんど変わらないなぁ。

結局、expressは何者なんだ

まぁ、WEBフレームワークなのはそうですね。
サンプルの作りを見た感じだと

・設定を書いて
・使うミドルウェアを並べて
・ルーティングを決めて
・Controlを書いて
・Viewを作って(任意のテンプレートエンジンが使えるっていう)
・(コードと分離した位置に)静的ファイルを置いて
・Listen開始

という流れで作り込んでやるんでしょう。
MVCというモデルで捉えると、Mはサンプルだと出てこないです。
DB使わないし。(DBだけがModelじゃないけど)

まぁ、慣れたらサクサク使えるような気がしています。

ちなみにexpress公式では特徴を次のように述べています。

Features

  • Robust routing
  • Redirection helpers
  • Dynamic view helpers
  • Application level view options
  • Content negotiation
  • Application mounting
  • Focus on high performance
  • View rendering and partials support
  • Environment based configuration
  • Session based flash notifications
  • Built on Connect
  • Executable for generating applications quickly
  • High test coverage

うーん、よく分かんないや。
使いながら上記の意味を理解していこう。

あったま悪くて毎日やることあって楽しいです。