node.jsのいろいろなモジュール1 – node-gzip

2011.07.12

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

node.jsについての簡単な説明

最近はnode.jsに関する記事をよく見かけます。node.jsとは、javascriptのサーバサイド実行環境です。
パフォーマンスが良くWebsocket(双方向通信のための規格) ※1と相性がいいこともあり、現在注目されています。
node.jsにはnpm(node package manager)という パッケージ管理ツールがあり、これを使用するとnode.js用のライブラリやフレームワークをインストールしたり、自作パッケージを公開することができます。
これらnode.js用のライブラリやフレームワークはモジュールと呼ばれ、node.jsのgithub上のwiki ※2にまとめられています。
本格的なWebフレームワークからシンプルな特定用途のライブラリまで、さまざまなモジュールがあります。(もちろん、ここにないモジュールも数多く存在します)
この記事では、いろいろなnode.js用モジュールを紹介していきます。

Note:
この記事はnode.jsについて解説するものではありません。node.jsについての記事は下記サイト等をご確認ください。
Node.js 日本ユーザグループ
サーバサイドJavaScriptの本命「Node.js」の基礎知識
node.jsとWebSocketの利用シーン

今回紹介するモジュールは、node-gzipです。
これは指定したデータをgzip形式に圧縮するシンプルなライブラリです。

Note:
node.jsのモジュールでメジャーどころでいえばexpress(Webフレームワーク)※3 や socket.io(双方向通信のためのライブラリ) ※4 など多数あるのですが、
そこら中に良質な記事があるので興味のある方はそちらをご確認ください。

なお、本記事での動作確認環境は下記の通りです。

  • OS : MacOS X 10.6.8
  • Node.js : v0.4.8
  • npm : 1.0.14
  • coffeeScript : 1.1.1(option)

必要なパスはすべて通っているものとします。
もし、node.jsのインストールから行わなければならない方は、こちらを参考にセットアップしてみてください。
それではnode-gzipを試してましょう。

node.jsでgzipを使う

まず、node-gzipをインストールしましょう。

$ npm install gzip
$ npm list
/your/path/gzip
└── gzip@0.1.0

無事インストールできれば、npm listコマンドでgzipモジュールが表示されるはずです。
今回はコンソール上で、特定のファイルを圧縮してgzファイルにして出力するサンプルを作成しましょう。

まずは元になるinput.txtファイルを作成します。

############################################
# これは、gzipサンプルアプリ用のサンプルファイルです。
# このファイルをgzipで圧縮します。
############################################

次に、gzip圧縮を行うgzip.jsファイルを作成します。

var fs, gzip;
fs = require('fs');
gzip = require('gzip');
fs.readFile('./input.txt', "utf-8", function(err, strData) {
  if (err) {
    throw err;
  }
  //圧縮対象のデータを渡し、そのデータを圧縮してファイルに出力
  gzip(strData, function(err, compData) {
    return fs.writeFile('./output.gz', compData, function(err) {
      if (err) {
        throw err;
      }
      console.log('compress done.');
    });
  });
});

gzip関数は、圧縮元のデータとコールバック関数を受け取ります。
コールバック関数の中でgzipファイルを出力して、エラーがなければメッセージを表示して終了します。

では、実行してみましょう。

$ node gzip.js 
compress done.

これでoutput.gzファイルが作成されました。解凍して、元ファイルと比較してみましょう。

$ gzip -d output.gz 
$ diff input.txt output

問題なく、圧縮が出来ていることがわかります。

まとめ&おまけ

関数1つ呼ぶだけで簡単にgzip圧縮ができました。 これ以外にも圧縮系ライブラリはいろいろとあるので、node.js modulesを見てみてください。
ちなみに、このプログラムは最初にcoffee scriptで作成しました。
そのソースも載せておきます。

fs = require('fs')
gzip = require('gzip')

#ファイルを読込み
fs.readFile './input.txt',"utf-8",(err, strData) ->
    if err
      throw err
    #読み込んだデータをgzip圧縮
    gzip strData,(err, compData) ->
      #output.gzファイルとして出力
      fs.writeFile './output.gz', compData,(err) ->
        if err
          throw err
        console.log('compress done.')

coffee scriptで書いたほうがシンプルですね。
それではまた次回。

参考サイトなど