octoreleaseのJavaScript版 "octopublish"と、PHP版 "octopackage" を作った

自分はawspeckomaなど、gemのリリースにずっとoctoreleaseを使っていて、いつも便利さを感じています(mizzyさんありがとうございます)。

k1low.hatenablog.com

特に便利な機能は、関連PRへのコメントとリリースノートのPullRequestへのリンクです。

これは、PullRequestしてくれた人へのお知らせだけでなく自分用のメモとしてもとても重宝しています。

ところが、最近個人的に課題がありました。

octoreleaseは他の言語では使えない

OSS活動をしていて、Rubyでは簡単にできるのにJavaScriptPHPでできないことにストレスを感じていました。

それがoctreleaseを利用したリリースでした。

というわけで、やっと、それぞれ作りました。

github.com

github.com

使い方はoctoreleaseとほぼ同じです。hubコマンドの利用(~/.config/hub)が前提なのも同じです。

詳しくはREADMEをご覧ください。

言語ごとにリリース方法が違う

今回、otoreleaseの別言語実装を作ってはじめて意識したのが、

各言語でリリース方法(リポジトリへの登録方法)が違うということです。

「使い方はoctoreleaseと"ほぼ"同じです」というのは「同じではない」ということです。

例えば、Rubyでは rake release によって、*.gemspec (正確には *::VERSION )にかかれているバージョン番号でGitHubへtagが振られ、そしてrubygems.orgへリリースされます。一番便利です。

(※今回は簡単にするためにGitHubだけを例に取り上げます)

JavaScriptGitHubへのtagの登録は自身で行う必要があります。npm publish は package.json のバージョン番号でリリースされます。

PHPGitHubへのtagの登録は自身で行う必要があります。そして(連携していれば)GitHubのtagと同じバージョン番号でPackagist.orgへリリースされます。

つまり、PHPスクリプトやcomposer.json内にそのライブラリのバージョン番号を示すものがありません。

今回、octopublishとoctopackageでは、そこらへんを個人的な感覚で吸収しました(=適当)。

Composerプラグインを作ってみた

今回PHP版octoreleaseであるoctopackageを作るにあたって、Hirakさんのスライドと発表映像が本当に役に立ちました。

PHP Conference2016 Track1 (2) Composerプラグインの作り方 - YouTube

この発表は、まさにチュートリアルでした。発表を見ながら順番に実装していくだけでできました。

これはHirakuさんの発表も当然ですが、発表を映像として残してくれたPHPカンファレンスの方々のおかげです。

スライドの行間を体験できました。本当にありがとうございます。

というわけで

誰得というか俺得なわけですが(そして最低限の実装ですが)、octoreleaseと同じ便利さをJavaScirptとPHPで実現できて最高です。