十徳ナイフな JavaScript ライブラリ、「Sugar」を使ってみた

今回も JavaScript トピックです(たまたまですが)。

JavaScript の穴ぼこ

先日仕事で、毎度お決まりな日時関連の JavaScript プログラミングをしてて思ったんですが、JavaScript のビルトインオブジェクトって「そろそろ何とかしてくれてもいいのに」って思うような欠落箇所がいくつかありますよね。Date の日時演算とか、String の各種エンコード/デコード等など。まぁ自助努力で何とかなるレベルの話なので、「自分ライブラリ」をシコシコこしらえたり、出来合いのライブラリやコードスニペットをネットでその都度探したりして、そういった穴ぼこを埋めている方が多いのではないかと思います。そんな貴方に朗報ですw 「Sugar」ライブラリ、もうこれで決まりです。

直観的で多彩、チェーン可能なメソッド群

Sugar は Andrew Plummer 氏が作成した、JavaScript のビルトインオブジェクトを拡張するライブラリです。自分は Sugar をまだ少し使ってみただけですが、メソッドの構成が実によく練られているな、と感じました。その場限りの必要性で積み上げてしまった「自分ライブラリ」だと、機能の重複や規則等の不統一でだんだん便利になるどころかカオスとファイルサイズだけがどんどん増えていく、てなことになりがちです(すんません、ヘボプログラマで)。その点、Sugar は、

  • メソッドの機能が網羅的でバランスが良い。
  • 命名やインターフェースが優れていて直観的。
  • jQuery のようなメソッドチェーンが可能。

という優れものなので、一度使ってしまうと手放せない十徳ナイフのような逸品です。jQuery と共に常に head タグ内に書いておきたいですね。

Date API の使用例

論より証拠。冒頭で触れた作業ってのは DB から取り出した YYYY-MM-DD hh:mm:ss 書式の日時文字列を、ヒューマンフレンドリな書式(OSX のファインダーみたいな)に変換する」というものだったんですが、これを Sugar を使って書き直してみます。こんな感じです。

/**
 *	与えられた 'YYYY-MM-DD hh:mm:ss' が、
 *	今日なら 'h:mm:ss' に、
 *	昨日なら '昨日 h:mm' に、
 *	それ以外は 'M月D日 h:mm' に変換して返す
 */
function easyDate( ymdhms )
{
	var d = Date.create( ymdhms ); // Safari だと new Date(ymdhms) でうまく変換できないので...
	if ( d.is('today') ) {
		return d.format('{h}:{mm}:{ss}');
	}
	else if ( d.is('yesterday') ) {
		return d.format('昨日 {h}:{mm}');
	}
	else {
		return d.format('{M}月{d}日 {h}:{mm}');
	}
}

うん。コード量が半分以下に減って、なおかつぐっと可読性が良くなりました。それにしても、jQuery を初めて使った時にも感じましたが、メソッドチェーンってドラッグのような常習性がありますね。普段なら関数にしちゃう少し長い処理でもワンライナーでバリバリ書いちゃいそうです。

Sugar には Date の他にも String (日本語変換や各種エンコード・デコードが充実!)や Number (Math のメソッドが多数移植されてて合理的)、Array、Object、Function、RegExp の拡張メソッドが多数用意されています。JavaScript 使いの人はすぐに使い始めて幸せになっちゃいましょー。

追記 : この記事を公開後、作者の Andrew Plummer さん( http://twitter.com/l_andrew_l )からツイッターで Mention を頂きました。元々は語学を専攻されていたとかで、現在は東京にお住いらしいです。どーりで String API の日本語関連機能がムチャクチャ充実してる訳だw