node.jsでよく使うアレ

var module = require('アレ');

※諸注意

javascript歴が一番浅い私が発表しますよん(^q^)

javascript界隈だと普通こうするよってのがあったら教えてください

あじぇんだ

1. node.jsって何?

node.js知らない人向けにチョッピリだけ説明


2. 3つのモジュールを紹介

    1. request.js
    2. underscore.js
    3. async.js

node.jsって何?

javascriptを実行するためのプログラム(Platform)


keyword(ググると面白いと思われる)

  • C10K問題
  • 非同期プログラミング
  • ノンブロッキングI/O
  • WebSocket

3つのモジュールを紹介

  1. request.js
  2. underscore.js
  3. async.js

何故この3つ?

※説明の関係上アジェンダの順番は前後しています.

ちなみに…

arduinode.js

ウエーィ

話は戻って何故あの3つ?


  • underscore.js
  • async.js
  • request.js

沢山のプロジェクトに使われてる.

なので汎用性が高く、知っておいて損はない!

まずは1つ目

request.js

https://github.com/mikeal/request

Simplified HTTP request client.

簡略化されたHTTPリクエストクライアント

node.jsにも標準でhttpの機能が揃っているが…

微妙に使いにくい…

そんな時に便利なrequest.js

request.jsを使わないコード

var http = require('http');
http.get('http://ha.logginging.org/hotentrys', function(res){
  res.setEncoding('utf-8');
  // チャンクデータが入ってくる.
  res.on('data', function(chunk){
    console.log(chunk);
  });
  // 全部受信し終わったら呼ばれる.
  res.on('end', function(){
    console.log('end');
  });
});

request.jsを使ったコード

var request = require('request');
var url = 'http://ha.logginging.org/hotentrys';

request(url, function(err, resp, body){
  if(err) return console.log(err);
  console.log(body);
});
Super simple to use

実際に実行してみる

  1. request.jsを使わないコード
  2. request.jsを使ったコード
  3. 受け取った内容が同じ事を比較

request.jsのまとめ

  • 簡単にhttpリクエストを発行できる
  • GET以外にもPOST, PUT, DELETE, HEAD, …が出来る
  • httpリクエストしたい時はrequest.jsを使おう!
  • 機能が豊富で把握しきれてない
  • 開発がとても活発で常時Pull Requestが発生してる
2つ目

underscore.js

http://underscorejs.org

Underscore is a utility-belt library for JavaScript that provides a lot of the functional programming support that you would expect in Prototype.js (or Ruby), but without extending any of the built-in JavaScript objects.



英語は自身ないが...期待したとおり関数型っぽいプログラミングが出来るってことでおk?

ん? 関数型?

ってことでコーディング

さっきrequest.jsで取得したJSONを加工する

  1. tweetだけ抽出
  2. entryだけ抽出
  3. 同じURLのentryをひとつに纏める. cntが最大のものを残す
  4. cntが100以上のエントリーだけ抽出
  5. titleとurlのペアのリストを作る
  6. cntを合計する & 平均値をとる

underscore.jsのまとめ

  • 構造を持ったデータを加工するのに便利!
  • あるデータを別のデータに変換することはプログラムにとって当たり前の事なので常に便利ってこと!
最後 3つ目

async.js

https://github.com/caolan/async

Async is a utility module which provides straight-forward, powerful functions for working with asynchronous JavaScript.


非同期javascriptを扱うための簡単で強力な関数を提供する


straight-forwardには"真っ直ぐ"って意味があるので、ネストを解決して真っ直ぐ書けるって意味に掛けてある?

node.jsの要点をおさらい

node.jsは非同期プログラミング

処理をした結果の受け取り方は以下の2種類

  1. イベントリスナ
  2. コールバック

がある.

var result = proc();

というスタイルは同期プログラミング.

イベントリスナ

こういう奴
  // チャンクデータが入ってくる.
  res.on('data', function(chunk){
    console.log(chunk);
  });

微妙に使い難い

コールバックが適用できない場面で仕方なく使うイメージ.

コールバック

こういう奴

    これ↓↓↓↓↓↓↓↓↓↓コールバック.

request(url, function(err, resp, body){
  if(err) return console.log(err);
  console.log(body);
});

こっちをよく使う.

コールバックには重要な規約が課せられている.

一体それは???

コールバックに約束されたもの…

第一引数はエラーの為に使う

request(url, function(err, resp, body){
  if(err) return console.log(err);
  console.log(body);
});

errの部分

ソース : http://nodeguide.com/style.html#callbacks

この原則が様々なモジュールで守られているので、async.jsの汎用性が半端ないことになっています.

でわ、コーディング.

  1. hotentryとnewentryを取得してファイルに保存 <- ネスト地獄
  2. ネスト地獄を解消

async.jsのまとめ

  • ネスト地獄の救世主
  • もう無いと生きられない体になった
  • yield使えるようになるらしいけどよく知らん!