BT

最新技術を追い求めるデベロッパのための情報コミュニティ

寄稿

Topics

地域を選ぶ

InfoQ ホームページ ニュース lodash, あなたが既に使っているJavaScriptライブラリ

lodash, あなたが既に使っているJavaScriptライブラリ

ブックマーク

原文(投稿日:2015/03/24)へのリンク

JavaScriptユーティリティライブラリのlodashがバージョン3.5に達して,npmパッケージリポジトリの中で最も多く参照されるライブラリになった。もはや代用品などではなく,信頼できる選択肢のひとつだ。

そもそもの始まりは,コントリビュータ間の意見の相違が原因で,Underscore.jsからフォークしたことだ。John-David Dalton氏がリーダであった頃の目標は,より“ブラウザに依存しない,一貫性のある挙動 ...とパフォーマンス改善”を実現することだった。その後,プロジェクトは後継の開発を続け,今年1月にバージョン3.0がリリースされた。

lodashは,以前の名称であるUnderscoreと同じく,すべての機能名の前にある文字にちなんで命名されている。グローバルな$にすべてアタッチするjQueryと同じように,lodashではグローバルな_を使うことで,便利なツールに簡単にアクセスできる。配列のすべての要素を処理するには,次のように記述する。

_.each([1, 2], function(n) { console.log(n); });

バージョン3では,_.camelCase_.flattenDeepのような47のメソッドが新たに追加されるなど,多くの変更が行われている。さらに重要なのは,メソッドの呼び出しを連続的に実行する連鎖メソッドが,遅延評価されるように変更されたことだ。

var users = [
  { 'user': 'barney',  'age': 36 },
  { 'user': 'fred',    'age': 40 },
  { 'user': 'pebbles', 'age': 1 }
];

var youngest = _.chain(users)
  .sortBy('age')
  .map(function(chr) {
    return chr.user + ' is ' + chr.age;
  })
  .first()
  .value();
// → 'pebbles is 1'

このようなメソッドに対して,遅延評価を適用することによってパフォーマンスの最適化が可能になる,とDalton氏は,InfoQとのインタビューで語っている。

遅延評価の導入によって,メソッドの連鎖は,明示的ないし暗黙のvalue()が要求されるまで実行されません。実行が延期されることにより,処理を一体化してショートカットするなどの最適化が可能になります。連続した反復処理を結合することで,繰り返し回数を大幅に削減することができるのです。

Filip Zawada氏は,この変更によってパフォーマンスが大きく向上した,と述べている

lodashはもともと,Underscoreを置き換えるものとしてスタートしたが,バージョン3.0では,置き換え対象となるUnderscoreのビルドは特定されなくなった。“Undersocre/Backboneのユニットテストによるテストは行っていますが,lodash v3では,特定のUndersocre/Backboneのビルドのサポートはしていません。”とDalton氏は言う。

昨年以降,UnderscoreがlodashのAPIに一致するようになってきたため,Underscoreのビルドを区別する必要性が少なくなりました。特別な部分での互換性が必要ならば,lodash v3のモジュールを使用して,Underscoreでの使用を補完することを推奨します。

JavaScriptトランスパイラのBabel,ブログプラットフォームのGhost,プロジェクトのベースとなるツールであるYeomanなど,npmの主要なパッケージのいくつかは,lodashに依存している。Ghostの場合は,当初使用していたUndersocreからlodashに切り替えている。Ghostがlodashを採用した理由について,開発者のJohn O'Nolan氏はInfoQに,“主として私たちオープンソースコミュニティがあおり立てた,とても現実的な決定だったのです。”と話している。

lodashは機能が多くてパフォーマンスもよく,構文のバージョニングも適切です。Node.jsコミュニティ(依存関係もすべて含む)では,とても有名な存在になりつつあります。

lodashはnode.js開発者の間で有名なだけでなく,ブラウザベースのプロジェクトでも利用されている。Web開発者はライブラリ全体をダウロードする代わりに,実験的ビルドツールを使って,プロジェクトに必要なメソッドをチェリーピックすることが可能だ。node.jsプロジェクトでパッケージ全体が必要でない場合には,メソッドを個別にをインクルードできる。

この記事に星をつける

おすすめ度
スタイル

BT