Node.jsの開発を超速化するGitHub連携 三種の神器
Node.js Advent Calendar 2013 - Adventar9日目です。
あまりネタを用意する時間がなかったので、GitHubにNode.jsのリポジトリを置いたりnpmにパッケージを公開したりしたときに便利な定番サービスを3つ紹介します。
●TravisCI
●Coveralls
●David
タイトルは釣りですが、特にTravisとCoverallsは一度体験すると離れられないぐらいほんとにlife changing。コードをpushしたらブランチのビルド結果をプルリクに表示してくれたり、カバレッジ結果をコメントで書き込んでくれるので、それを見ながらコーディングを進めていけます。これが無料なのは意味不明なぐらいの神です*1。
サンプルコードはこちらのプロジェクトで見てください。
●Github: https://github.com/teppeis/fixclosure
●Travis: https://travis-ci.org/teppeis/fixclosure
●Coveralls: https://coveralls.io/r/teppeis/fixclosure
●David: https://david-dm.org/teppeis/fixclosure
TravisCI
●Travis CI - Free Hosted Continuous Integration Platform for the Open Source Community 言わずと知れたド定番のCIサービス。いわゆるJenkinsのフリーホスティング版。 使い方も超簡単。 (一)https://travis-ci.org/ にGitHubアカウントでログイン (二)ヘッダー右上からAccountsに飛んで、リストからCIしたいGitHubリポジトリを選んでON (三)package.json
のscripts.test
にテスト実行コマンドを指定してnpm test
でテストが走るようにする。
(四)リポジトリのルートに設定ファイル.travis.ymlを設置。
language: node_js node_js: - 0.10以上の設定だけで、あとはコードをpushしたらガンガンテストが走ります。プルリクでの結果表示を見てマージするかどうか判断するのがオススメの使い方。
TravisでGruntを使う
Gruntでテストを実行する場合、Travisのワークスペースにはgrunt-cli
がグローバルにインストールされてないので、ちょっとコツがいります。
devdependenciesにgrunt-cli
を指定するか、テスト実行時にインラインでnpm install grunt-c
li
してから、scripts.test
でnode_modulesのgrunt-cliを実行するのが簡単なようです。
// package.json "scripts": { "test": "node_modules/grunt-cli/bin/grunt" },
Coveralls
●Coveralls - Test Coverage History & Statistics テストカバレッジ結果や履歴を表示してくれるサービス。 ファイルごとのカバレッジもこんな感じ。 まずはGitHubアカウントでログインして、アカウント設定から対象リポジトリを有効にしときます。 Coverallsは結果を表示してくれるだけなので、カバレッジの計測は自分でやらないとダメです。 カバレッジツールにはいくつかありますが、ここではblanket.jsを使います。 ●Blanket.js | Seamless javascript code coverage Blanket.jsはEsprimaベースのカバレッジツールで、require('blanket')
したらそのあとrequire
するコードを動的にinstrument*2してカバレッジを計測してくれます。
静的にinstrumentしたコードを出力してディレクトリをリネーム、みたいなことをする必要がないので良いです。
テストの実行とCoverallsへのポストは、今回はgrunt-mocha-covを使います。
Gruntfile.jsでは、mochacovタスクのoptio
ns.coveralls.serviceName
で"travis
-ci"
を指定すれば、あとはよろしくTravisとCoverallsのつなぎはよろしくやってくれます。
// Gruntfile.js mochacov: { test: { options: { files: ['test/*.coffee'], coveralls: { serviceName: 'travis-ci' } } } },ここはちょっとトリッキーで、mochacovが内部的に
npm b
lanket
を呼ぶので、オプションはpackage.jsonで指定します。自分の場合はここでカバレッジ対象を指定しないとnode_modulesも測っちゃうっていう現象が発生しました。
// package.json "scripts": { "test": "node_modules/grunt-cli/bin/grunt", "blanket": { "pattern": "/project-name/lib/" } },これでめでたくカバレッジ計測の完了です。