conventional-changelogがrubyから使いづらいのでどうにかしたい

TL;DR

いくつかこのリストのchangelog generatorを使い比べた結果、やはりconventional-changelogがいいとおもったんだが、Rubyからは使いづらい。
試行錯誤してる。

短い比較

skywinder/github-changelog-generator

CHANGELOG.mdの表示が一番きれい
リンクもわかりやすい。タグとタグの間で表示を作るので、タグを打ったあとにしか更新できない。
載せる載せないはgithubのissueのtagでfilter出来る。

lalitkapoor/github-changes

まあまあきれい
コミットにすると細かすぎるので、pull requestにするとよさそう。タグとタグの間で表示を作るので、タグを打ったあとにしか更新できない。

ajoslin/conventional-changelog

angularjsである
特長はangularjsのcommit comment conventionで縛って、changelogに載せる載せないをfilterしている。
覚えるのがはじめはツライ。他人のcommit messageをいじるのはツライ。自分でもとくにgithub上で編集してそのままコミットすると Update readme とかになっててツライ。
バージョンやリポジトリ情報はpackage.jsonからデフォルトでは読み取る。
縛りメンドイけど、それがいいのでは?という気がしている。

前提

changelog書きたい時って、一番いいのはmergeしたとき、一番遅くて changelog変更ー>tag 打つ-> releaseでしょ?
tagとtagの間を検出するchangelog generatorはtag打ってからでないと検出しないので、github表示上はそれでいいんだけど、gemやnpmのpackageに入れるには間に合わない。githubのrelase pageはそれでいいのかもしれない。
もちろんtagから最新バージョンを取らなくすると、バージョンチェンジしたことにして生成するか、changelog generatorに次のバージョン渡して生成するか、なんらかversion読み取って生成しなくてはいけなくて、package managerに渡してるバージョンを取るので言語ごとに考えなければいけなくなってしまう。

というissueを各changelog generatorにあげればいいのか。うーむ。

conventional changelog

自分はconventional changelogが好きなので、使っている。ただしRubyのproductに適用しようとすると、一手間必要。

試行錯誤1 version.json

rubyスクリプトの中からYourApp::VERSION で取れるのは維持したい。
すると、version.rbと別にversion.jsonをつくって、version.rbではversion.jsonから読み取るようにする。

# version.rb
module PullRequest
  module Create
    VERSION = "0.1.1.beta"
  end
end

これを

# version.json
{
  "version": "0.1.1.beta"
}

# version.rb
require 'json'
module PullRequest
  module Create
    VERSION = ::JSON.parse(File.read('./lib/pull_request/create/version.json'))['version']
  end
end

こんな感じ

こうすると、jsonなので、conventional-changelogから簡単に読める。
これで行こうと思ったけど、なんというかぎょっとするので却下。

試行錯誤2 parse ruby

これをbin/conventional-changelog に置いて、あとpackage.jsonをリポジトリに置きつつgemのfilesからは外してる。

#!/usr/bin/env node

var fs = require('fs');
var execSync = require('child_process').execSync;
var conventionalChangelog = require('conventional-changelog');

var version = "" + execSync('ruby -e \'require "./lib/pull_request/create/version"; print PullRequest::Create::VERSION\'');

conventionalChangelog({
  repository: 'https://github.com/packsaddle/ruby-pull_request-create',
  version: version,
  file: 'CHANGELOG.md'
}, function(err, log) {
  fs.writeFile('CHANGELOG.md', log, function(err){
    console.log(err);
  });
  console.log('Here is your changelog!', log);
});

jsからruby実行するのかよ! というのはあるけど、ここで閉じてるのでjson読み込むのよりはぎょっとしない。
ただだるいのは、いちいちrepositoryとかversionのprintする中身とか、いちいち書き換えること。

現状jsからrubyを呼び出すほうで回してみている。

広告

conventional-changelogがrubyから使いづらいのでどうにかしたい」への2件のフィードバック

  1. ピンバック: changelogとrubygem | 實松アウトプット

  2. ピンバック: conventional-changelog(npm)をRuby pruductから使う | 實松アウトプット

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中