弊社の大先輩、mashさんがpull-req送っていたのを偶然見て、
grunt-releaseというプラグインの存在を知りました。
これが、npmやbowerにがんがんライブラリを置いている自分には、
めちゃくちゃべんりでした!
bowerでライブラリ公開するハードルを下げることにもなる、
と思うのでちょっと紹介してみます。
grunt-releaseとは
grunt-releaseは、git管理しているライブラリの
versionアップ時の作業を自動化してくれる gruntプラグインです。
具体的には、
- 設定ファイルから、現在のversionを取得
- 次に使うべきversionを計算 (semver形式)
- そのversion名をgitのtagとして適用
- versionを指定している設定ファイルを書き換え
- 設定ファイルへの変更をコミット
- tagおよび設定ファイルの変更をpush
- 必要ならnpm publishを実行
という、雑務としか言い様のない部分を、まるっとやってくれます。
レジストリは、npmにもbowerにも対応しており、
他にもgitのtagを使っているものならば、うまく使えるのではないでしょうか。
(jquery pluginsとか。未検証だけど。)
導入方法
まずはプロジェクトにインストール。
npm install --save-dev grunt-release
続いてGruntfileの編集。
npmの場合
module.exports = function(grunt) {
grunt.initConfig({
pkg: grunt.file.readJSON('package.json'),
release: {
// おおむね、デフォルトの設定で問題ないです
options: { }
}
});
grunt.loadNpmTasks('grunt-release');
grunt.registerTask('default', ['release:patch']);
};
bowerの場合
module.exports = function(grunt) {
grunt.initConfig({
pkg: grunt.file.readJSON('package.json'),
release: {
options: {
// 設定ファイルとしてbower.jsonを指定
file: 'bower.json',
// npm publishは実行しない
npm: false
}
}
});
grunt.loadNpmTasks('grunt-release');
grunt.registerTask('default', ['release:patch']);
};
こんな感じです。
bowerの設定ファイルは、bowerのversionが古いと、
bower.json
ではなく component.json
となってるかもしれないので、そこは気をつけてください。
いざ、version up
設定ができたら、task実行で実際にversion upができます。
relaseタスクには、4つの環境が用意されています。
それぞれで、アップデートする先のversionが変わります。
メジャーリリース (0.0.0 → 1.0.0)
grunt release:major
マイナーリリース (0.0.0 → 0.1.0)
grunt release:minor
パッチリリース (0.0.0 → 0.0.1)
grunt release:patch
プレリリース (0.0.0 → 0.0.0-0)
grunt release:prerelease
MAJOR.MINOR.PATCH って形なんですね。知らなかった……。
動作を確かめてからリリースする
また、いきなり実際のアップデートをするのが怖い場合は、 --no-write
オプションを使いましょう。
-v
オプションと組み合わせることで、
実際のgit tagやnpm publishは行わずに、何が起きるかだけを先に確認することができます。
以下、実際にやってみたときの出力例です。
% grunt release:prerelease -v --no-write
Running tasks: release:prerelease
Running "release:prerelease" (release) task
Reading bower.json...OK
Parsing bower.json...OK
Not actually writing bower.json...OK
>> Version bumped to 0.0.2-0
Not actually running: git add bower.json
Not actually running: git commit bower.json -m "release 0.0.2-0"
>> bower.json committed
Not actually running: git tag 0.0.2-0 -m "version 0.0.2-0"
>> New git tag created: 0.0.2-0
Not actually running: git push
>> pushed to remote
Not actually running: git push --tags
>> pushed new tag 0.0.2-0 to remote
まとめ
grunt-releaseは、
Web開発で自動化できる部分を自動化して、もっと大事なことに集中する
という目的に適った、いいプラグインですねぇ。
JSプログラマの方、手元のライブラリ管理がぐっと楽になるので、
ぜひぜひ使ってみてくださいー。