開発をちょっと楽にする、nodeモジュール紹介
こんにちは,maxmellonです.
javascriptやnodeで開発する際に便利なnodeモジュールを紹介したいと思います.
モジュール選択・比較するときの判断基準
モジュールを紹介する前に,いくつか役割が重複したモジュールを選択する時の自分なりの ポイントをまとめておこうと思います.
- Githubの更新が活発
- 過渡期で破壊的変更がたくさんあることもあるのでその点は注意する
- QiitaやStackOverFlowなどの情報が豊富
- twitterなどで活動している有名jsエンジニアが利用しているかどうか
- 巨大なものよりミニマムなもの(時と場合による)
これらを踏まえて,今から紹介していくモジュールから自分好みのものを 考えてくださると幸いです.
Testingフレームワーク/ランナー
簡単な分類
describe/context/it 形式のもの
- mocha
- jasmine
test 形式のもの
- tape
- ava
これら4つともサーバー/ブラウザで動作する.
それぞれ機能については,
が非常に分かりやすかったです.
HTTPクライアント
最近では,DOMを直接操作する必要がない場合があります.
(Vue, Polymer, Angular, Reactなどを使った時)
$.ajax
は馴染みあるし使いやすいですが,DOM操作を直接行わない場合,
すこしjQueryでは肥大です.
そこで,superagent
やaxios
が使われるようになってきました.
特に,複数のリクエストを同時に投げたり,非同期処理を 任意の順番で走らせたい場合の時には Promise化されているほうが綺麗にコードをかけます.
Promise化するメリットは,このスライドとか分かりやすかったです.
www.slideshare.net
なので僕は次のように利用するものを選択するのがベストだと考えています.
- たくさんリクエストを送る可能性が高い -> axios
- jQueryとかは使わない.ajaxだけ楽に書きたい -> superagent or axios
- DOM操作する.ajax処理は比較的単純 -> $.ajax
その他知っておいて損はないモジュールなど
nyc
testのカバレッジを測るモジュール. CLIで実行した時の結果もなかなか見やすいと感じました.
lcovも吐き出してくれるので,codeclimateやCoverallsとの連携も可能.
lcovだけではなく,htmlも作るので,circle ciなどのartifactに, 出力されたhtmlを指定しておくと,よりカバレッジが見やすく便利.
使い方も非常にシンプルで,mochaやavaとかでも使えるので便利.
詳しい使い方は,次の記事がわかりやすかったです.
KeyboardJS
keycodeを意識することなくkeybindすることができます.
例えば,次のように.
const callback = (e) => { console.log('enter is pressed'); }; // 13でも'enter' でもbind可能 keyboardJS.bind('enter', callback); keyboardJS.unbind('enter', callback);
単なるバインドであれば素のjavascriptでも案外簡単にできます. これが本当に便利なのは,コンビネーションや同時押しを超カンタンにかけるということです.
keyboardJS.bind('a + b', function(e) { console.log('a and b is pressed'); }); keyboardJS.bind('a + b > c', function(e) { console.log('a and b then c is pressed'); }); keyboardJS.bind(['a + b > c', 'z + y > z'], function(e) { console.log('a and b then c or z and y then z is pressed'); });
material-ui
material-design-lite の React版. cssフレームワーク版より使いやすかったです.(個人の感想)
Reactのアプリケーション開発時,jQuery依存しているcssフレームワークを使いたくない時とかに使うみたいです.
json-server
カップ麺を作るように,json流しこむだけでサーバー作れるというものです.
とりあえず今すぐモックサーバーを立てて動作を確かめたい時に便利です.
esbox
babelなどでトランスパイルすることなく, es6, es7のコードを動かすサンドボックス環境を提供してくれるもの.
ちょっと,確認するときや,部分的に動作確認したいときに便利です..
sweet-scroll
ECMAScript2015対応, jQuery非依存のモダンなスムーススクロールモジュール
アニメーションの種類も豊富です.
lodash
モダンなjavascript関数群
underscoreより高速なのも,人気の理由だと思います.
もちろん,ブラウザでも利用できます.
lodashとunderscoreの比較はこの記事が分かりやすかったです.
一部では,lodashからramdaに乗り換えてる人もいるみたいです.
abigail
gulp, gruntからnpm script乗り換えた時に便利なモジュール.
npm-run-all のように並列,直列を指定でき,かつ watchも搭載している.
環境変数の設定も --env
で行うことができる.
(windows環境で NODE_ENV=production browserify...
みたいなことをするとエラーになるのを防げる)
設定ファイルも不要で,package.jsonに追記する形式をとっている.
余談ですが,gulp, gruntからnpm scriptsに乗り換える理由は,次の記事がわかりやすかったです.
さいごに
AngularやVuejsをほとんどやったことがないので,若干Reactに偏った内容にも見えますが許してください.
OSSはたしかに便利ですが,業務アプリなどでは,とにかく使えばいいというわけでもないと思います.
僕が,これからOSSを利用する,あるいは利用を検討するときに思っていることは
利用するOSSにもバグが有る可能性がある
ということを忘れずに,そしてもしバグが直せるチャンスが有れば
積極的にpull requestを送っていけるようになれば良いなあと思います.
参考サイト
- React.jsでPropやStateを使ってComponent間のやりとりをする - Qiita
- b-o-a を mocha から AVA にのりかえた - 15 min/d
- javascript におけるユニットテストについて (2013/01) · GitHub
- Jasmine使い方メモ - Qiita
- Promiseでコールバック地獄から解放された話
- nycでbabel6のカバレッジを取る - Qiita
- lodash(Underscore.js)まとめ, Swift, Objective-C, PHPもあるよ - Qiita
- [意訳]私がGulpとGruntを手放した理由 - Qiita