自分はawspecやkomaなど、gemのリリースにずっとoctoreleaseを使っていて、いつも便利さを感じています(mizzyさんありがとうございます)。
特に便利な機能は、関連PRへのコメントとリリースノートのPullRequestへのリンクです。
これは、PullRequestしてくれた人へのお知らせだけでなく自分用のメモとしてもとても重宝しています。
ところが、最近個人的に課題がありました。
octoreleaseは他の言語では使えない
octorelease の Node版とPHP版が欲しい
— k1LoW (@k1LoW) 2017年5月1日
OSS活動をしていて、Rubyでは簡単にできるのにJavaScriptやPHPでできないことにストレスを感じていました。
それがoctreleaseを利用したリリースでした。
というわけで、やっと、それぞれ作りました。
使い方はoctoreleaseとほぼ同じです。hubコマンドの利用(~/.config/hub
)が前提なのも同じです。
詳しくはREADMEをご覧ください。
言語ごとにリリース方法が違う
今回、otoreleaseの別言語実装を作ってはじめて意識したのが、
各言語でリリース方法(リポジトリへの登録方法)が違うということです。
「使い方はoctoreleaseと"ほぼ"同じです」というのは「同じではない」ということです。
例えば、Rubyでは rake release
によって、*.gemspec (正確には *::VERSION
)にかかれているバージョン番号でGitHubへtagが振られ、そしてrubygems.orgへリリースされます。一番便利です。
(※今回は簡単にするためにGitHubだけを例に取り上げます)
JavaScriptはGitHubへのtagの登録は自身で行う必要があります。npm publish
は package.json のバージョン番号でリリースされます。
PHPもGitHubへの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で実現できて最高です。