LoginSignup
34
34

More than 5 years have passed since last update.

grunt-releaseでversionを上げられる男になろう

Posted at

弊社の大先輩、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プログラマの方、手元のライブラリ管理がぐっと楽になるので、
ぜひぜひ使ってみてくださいー。

34
34
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
34
34