Java

JIRA、Jenkins、GitHubで始めるオープンソース #jiraadvent

JIRA Advent Calendarの最終日担当です。

趣味でなんとなく作ったものの放置してしまっているアプリケーション、ユーティリティ、ライブラリはありませんか?
オープンソースソフトウェアにしてしまいましょう!

もちろん懸念はあるかもしれません、例えば:
・オープンソースってやってみたいけど人に見せられるほどキレイなコード書ける自信がない
じゃぁいつやるの?
今感じる範囲でキレイなコードにして公開してみたら?

・同じようなコードは他にもあるし・・・
既存のコードで歯がゆいところがあったから書いたんじゃないの?
地球に70億人もいるんだから同じように歯がゆさを感じている人が1人や2人はきっといるはず。

・オープンソースにしたら盗まれちゃう!
死蔵してたらすぐに、またはいずれ陳腐化して新規性のないコードにきっとなります。
盗まれて困るようなコードだったらとっとと起業してビジネスにしたほうがいいかも?
またはオープンソースにして「盗んでもらって」改良してもらえればプロジェクトを始めた人間としてオイシイかも。

というわけであんまり公開することによるデメリットやリスクはそんなにないのでオープンソース化、オススメです。
誰かがほめてくれるかもしれません。
誰かが使ってくれるかもしれません。
誰かが改良してくれるかもしれません。

オープンソースプロジェクトを始めるにあたってオススメなのがJIRA、Jenkins、GitHub。
・JIRA
JIRAは課題管理/バグトラッキングを行うためのツールで商用ではもっとも普及している製品(侍ズム調べ)です。
オープンソースプロジェクトでは無料で使えます。
ちなみに非オープンソースプロジェクトでは年間10人/$10〜(オンプレミス運用)または月間10人/$10(Atlassianによるホスティング)〜で利用できます。
JIRA – Track bugs, projects, issues with software development tools by Atlassian | Atlassian
誰に使って貰えるか、使って貰えないかわからないプロジェクトに毎月ホスティングフィーとして月間$10払う難しいので私は自宅サーバで運用しています。

あんまりおおっぴらに宣伝はしていないけれどもJIRA Studio for OSSというサービスでOSSプロジェクトをAtlassianでホスティングしてくれるサービスもあります。
たぶん長期的にはBitbucketの課題管理にJIRAを統合した上でGitHubよりイイよ!移行して!って言いたいんじゃないかと思ってる。

・Jenkins
Jenkinsは言わずとしれた継続インテグレーションツール。詳しくはJenkins実践入門を参照。
コードのテストやデプロイを自動化することができます。
Welcome to Jenkins CI! | Jenkins CI

ウチでは自宅サーバでJenkinsを運用していますがオープンソースプロジェクトであればCloudBeesのサービスを使うのも良さそうです。
CloudBees & Open Source

・GitHub
今やデファクトスタンダードとなりつつあるコードホスティングサイト。公開しているリポジトリであれば300MBまでは無料で使えます。
Your Dashboard – GitHub

さて、3つともスバラシイツールなのですが連携すると一層強力です。
このエントリはクリスマス中に公開しないといけない関係上細かい説明は省きますが(ゴメンナサイ)、以下の設定やプラグインを使うことでスムースに連携させることができます。

1. JIRA→GitHubの連携
JIRAにはJIRA GitHub Connectorというプラグインがあり、課題(issue)とgithub上のコードを簡単にひもつけることができます。
今はなぜかJIRAの管理画面で検索してもヒットしません。
プラグインのサイトからjarをダウンロード、管理画面からアップロードすることでインストールできます。

2. GitHub→JIRAの連携
JIRA4.2以降はREST APIでissueを更新することができます。GitHubはservice hooksという機能でJIRAにデフォルトで対応しており、gitのコミットメッセージを元にissueをクローズしたりすることができます。(Twitter4Jではissueは完全手動管理しておりこの機能は使っていません)

3. GitHub→Jenkinsの連携
GitHubでPost-Receive URLというのを設定するとgithubへコードをプッシュしたタイミングでJenkinsにテストを走らせることができます。

4. Jenkins→GitHubの連携
Github Pluginを使うとgithubのコードをJenkinsでpullさせてビルドを走らせたり、コンソールで見えるコミットIDをgithubにリンクさせたりすることが出来ます。

5. Jenkins→JIRAの連携
JIRA Pluginを使うとJenkinsのコンソールで見えるコミットメッセージ内のissue#をJIRAとリンクさせることができます。

GitHubにもissue管理機能があるけど、正直なところまっだイマイチ。
デファクトスタンダードなだけありJIRAは柔軟、高機能で、そしてUIが洗練されています。
また、継続インテグレーションツールとしてAtlassianのBambooがありますが個人的にはJenkinsが好み。(正直Bambooはほとんど使ったことない)

3つのツールの連携具合を図にすると以下の様な感じ

さて、この3つのツールを使ってオープンソースプロジェクトを作ったらみんなに知ってもらう必要があります。
例えばブログエントリを書いてdzoneに投稿するとか、・TheServerSide.comの・Industry newsフォーラムに投稿するとか、Twitterでそれっぽいハッシュタグを付けてツイートするとか。
#日本だけでいいなら友達3人にハテブしてもらえばイイですが、英語で発信すると10倍リーチします

だれか興味を持ってくれるかもしれません。