会社でBitbucketを導入する Stash/JIRAの紹介とその設定方法

会社でGit？GitHub Enterpriseでしょ？という今日この頃、もう一方で有名なStash/JIRAを紹介します。

聞いたことないなあ、という方もいるかもしれませんが、[Bitbucket](https://bitbucket.org/)は多分ご存じなのではと思います。こちらはPrivateリポジトリが無料ということもあり、お世話になっている方もそこそこいるのでは。

Stash/JIRAはこのBitbucketを提供しているAtlassianの製品で、StashはGitリポジトリ管理、JIRAは課題管理(Trac/Redmine的なもの)、二つ合わせてプロジェクト管理、というような仕様になっています。

Bitbucketはそのままユーザー数を増やして使うこともできますが、GitHub Enterpriseのように社内にインストールして使いたい、という場合はこのStash/JIRAが選択肢となります。

# 評価

結論としては、少人数(10～50user)なら強くお勧めできます(そうでない場合は普通にお勧めします)。

### 機能面

機能面ですが、まずGitHubの最大の弱点は課題管理です。issueだけで課題管理をしていくのはかなりきついです。用意されている項目は少ないですし、クエリで抽出したりもできません。
その点、Stash/JIRAの組み合わせの場合、JIRAは課題管理特化型のツールなのでこの点はすべてクリアできます。Wikiがないためドキュメントを共有するのが苦手ですが、そこは[作った](https://github.com/icoxfog417/jira-wiki-gadget)のでクリア可能です。
そしてStashはPull Requestやソースコードへのコメントなど、GitHubにも劣らない機能を備えているためここで困ることもありません。

また、プラグインを追加することで機能の追加が可能なため、カスタマイズ性もかなり高いです(上記のプラグインもかなり簡単に作れました)。

要するにおすすめできる！ということです。

### 価格面

2014/4現在の価格は以下のようになっています。

[Stash](https://www.atlassian.com/purchase/product/stash)
10user 10\$/12month
25user 1800\$/12month

JIRA
10user 10\$/12month
25user 1200\$/12month

因みにGitHubは[20user $5,000/12month](https://enterprise.github.com/pricing)で、20user単位で増えていきます。

10userまでなら、JIRA/Stashを併せても20$、GitHubの1/250。25userを超えるとつりあがりますが、それでもGitHubよりはまだ安いです。

なお、Bitbucketそのものをユーザー数を拡張して使うこともできます。この場合は、[10user 10$/month,25user 25$/month](https://bitbucket.org/account/user/icoxfog417/plans/
GitHub)。

JIRAほどではないですが課題管理ができ、またWikiがついてくるのがメリットです。ただ、インターネット経由にはなるのでその点は要注意(メリットでもあり、デメリットでもある)。

大規模な導入では、Stash/JIRAで費用がかさむこともあるでしょう。しかし、25～50user近辺ならかなりお手頃な値段での導入が可能です。


# 詳細
画面を見ないとどうにもイメージがわかないと思うので、ログイン～課題登録～改修～解決までを追ってみます。

まずはトップ画面。ちゃんと日本語で出てきます。
レイアウトは、一昔前のiGoogleのようにガジェットを使用しカスタマイズが可能。
ここでは、担当分の課題とチーム内のアクティビティを右に表示しています(グラフでも入れてみよう・・・と色心を出すと結構見にくくなる)。

![top.PNG](https://qiita-image-store.s3.amazonaws.com/0/25990/a4e993fb-f3e7-7820-0c32-be3c34ebe763.png)

課題の参照画面はこんな感じです。

![issue.PNG](https://qiita-image-store.s3.amazonaws.com/0/25990/7dbd9536-c43c-50de-4e20-7cc28cb9b0af.png)

作業記録をつけることができ、ｘｘ時間ｘｘした、というようなログも記録していけます(そこまでやるかという説はありますが、日報的に使うなら良しかも)。

右下のCreate Branch、ここからStashと連動しブランチを作成することができます。
ブランチを作成するとSource Treeを起動するボタンが出てくるので、(インストールしていれば)そこから起動することができます。

ブランチを作成して・・・(画面ショットを別の処理で取ったので、以下2ショットは内容がちょっと異なります)

![createBranch.PNG](https://qiita-image-store.s3.amazonaws.com/0/25990/128a5ec1-c4ba-4e81-0f13-0fc69c778e47.png)

Stashで確認。ここからSourceTreeを起動。

![invokeSourceTree.PNG](https://qiita-image-store.s3.amazonaws.com/0/25990/190866c7-fc54-bcae-b32a-cdceea382185.png)

Clone完了。

![develop.PNG](https://qiita-image-store.s3.amazonaws.com/0/25990/c53fd667-8409-a4e4-e861-ea46953ac360.png)

この、課題からBrachを作成、作成したBranchをClone、CloneしたフォルダをSourceTreeで開く、という一連の流れはかなりスムーズで、「わざわざブランチを作っている」という感じは全くありません。ここはさすが純正、といったところ。

一通り終わったらレビュー/masterへの反映をPull Requestを通じ行います。

![sendpullrequest.PNG](https://qiita-image-store.s3.amazonaws.com/0/25990/d80369d0-e53f-d989-79ae-bca74bc5b567.png)

レビューはレビューでまた別のツール(Crusible)があるのですが、Stashでも十分可能です(変更内容が驚くべきほど下らないのはデモ用なのでご容赦ください)。

![reviewing.PNG](https://qiita-image-store.s3.amazonaws.com/0/25990/a15d5d0b-31f5-8d1c-af97-de1ea4df3d60.png)

変更内容も結構見やすいです。

![diff.PNG](https://qiita-image-store.s3.amazonaws.com/0/25990/28711ef0-3ef7-0beb-965d-26edbc219ed8.png)

PullRequestは課題のソースの部分で参照できます。この、コメントとソースなどが分けて見られるのは結構良いかもしれないです。Tracだと、コミットが多いと最後の方のコメントがものすごい下にある。。。ということもあったので。

![aftermerge.PNG](https://qiita-image-store.s3.amazonaws.com/0/25990/a78f6265-8403-e70e-ff5a-32f88e8bf4b8.png)

JIRAは慣れるのにそこそこ時間がかかるので、課題管理は慣れたTracやRedmineで行い、Stashだけ使うというのも十分ありだと思います。StashはBitbucketを使っているならissue/wikiがない版と思ってもらえれば良く、ここはかなり洗練されています。

# 導入
さて、以上を読んで試してみたい！という方は90日間評価版が無料なのでそれで[試してみることができます](https://www.atlassian.com/ja/software)。
JIRAの方はほぼダウンロードしてインストールするだけですが、Stashの方は起動前に下記の設定を行っておく必要があります([公式ドキュメント](https://confluence.atlassian.com/display/STASH/Installing+Stash+on+Linux+and+Mac))。

* [Javaのインストール](http://www.oracle.com/technetwork/java/javase/downloads/index.html)  
  JDK1.6以上(1.7推奨 なお、2014/4現在ではJava8未対応なので先走るとNG)
* [Gitのインストール](http://git-scm.com/download)(Windowsの場合、MsysGit)  
  perlも・・・と書いてあるが、Gitに含まれるため問題なし。インストール時はオプションの設定に注意すること(Run Git and included Unix tools from the Windows Command Prompt)を選択すること 
* 環境変数STASH_HOME、JAVA_HOMEの設定

STASH_HOMEはインストールディレクトリではありません。というか、インストールディレクトリにしてはいけません。これは、Stashがデータをためるためのディレクトリのようで、適当に作成しそこに環境変数を設定しておけばよいです。

あとは普通に動かすだけ、、、ですが、下記の設定を推奨します。
setenv.bat/setenv.shを編集し、以下の設定をしておく。

* JVM_SUPPORT_RECOMMENDED_ARGS  
  -Dfile.encoding=UTF-8を設定しておく。これを設定しないとデフォルトMS932なので得策ではない。
* JVM_MINIMUM_MEMORY/JVM_MAXIMUM_MEMORY  
  場合によっては下げないと起動できないことがあるので注意(Could not reserve enough space for object heapエラーが出る)。

普通はサービスにしておいた方がいいので、[こちら](https://confluence.atlassian.com/display/STASH/Running+Stash+as+a+Windows+service)を参考にサービス化しておく。
なお、Windowsの場合Administrator権限を持つユーザーだと[pushが異常に遅くなる](https://confluence.atlassian.com/display/STASHKB/Git+Push+Operations+Extremely+Slow+on+Windows)ため、Network Serviceなどのアカウントで動かすようにしておいた方がいい(STASH_HOMEへのアクセス権限は追加しておく必要あり)。

めでたく両方とも稼働したら、基本はJIRAでプロジェクトやユーザーを作成し、Stashにそれを反映する形になる。
この連携に必要なのは下記の設定。

* Application Link  
  StashからJIRA、JIRAからStashが参照できるようにする。Stashの管理メニューからApplication Linkで、JIRAのアドレスを入力し設定
* User Directories  
  JIRA>JIRAユーザーサーバー、のその他のアプリケーションの構成で、Stash側のIPとStashからアクセスする際のID/パスワードを設定。  
  Stash側からは、User Directories>Add Directoryから、Atlassian JIRAを選択し先ほど作成したID/パスワードで接続を設定、保存する。

JIRAについては、日付のフォーマットも設定しておくといい(デフォルトだとdd/mm/yyyy的なフォーマットのなので)。

* 日時の書式  
  [ユーザーインタフェース＞ルックアンドフィールから日時の書式](https://confluence.atlassian.co.jp/display/JIRA/Changing+the+Due+Date+Input+Format)

後は、お好みのプラグインで機能を拡張することもできる。おすすめは以下(フリーから厳選)。

Stash

* [ReadMe Parser](https://marketplace.atlassian.com/plugins/com.pirateninjaunicorn.stash.readme-parser)  
READMEを表示してくれるプラグイン
* [Realtime Editor for Stash]  (https://marketplace.atlassian.com/plugins/com.atlassian.stash.plugin.stash-editor-plugin)  
Stash上でファイル編集が可能になるプラグイン  
* [Color Commits for Stash](https://marketplace.atlassian.com/plugins/com.hgh.color-commits-for-stash)  
CommitLogを人別に色分けしてくれるプラグイン

JIRA

* [JIRA Calendar Plugin](https://marketplace.atlassian.com/plugins/com.atlassian.jira.ext.calendar)
タスクをカレンダ表示してくれるプラグイン。ダッシュボードに入れると便利。

* [Custom Content for JIRA](https://marketplace.atlassian.com/plugins/com.tngtech.jira.plugins.customcontent.jira-gadget-custom-content)
静的ページをダッシュボードに組み込めるプラグイン。Wiki的に使いたい場合など。

* [Gantt-Chart Project for JIRA](https://marketplace.atlassian.com/plugins/com.soyatec.jira.plugins.jira-ganttchart-project)
無償でも使えるガントチャート用のプラグイン。

なお、JIRAのプロジェクトは既存のプロジェクトからインポートすることも可能。
これでもか、というほどいろんなところからインポートできるので、ことこの件について困ることはないと思います。今回はTracからのインポートを試しましたが、かなり早くインポートできました(1000未満程度のチケット数で4～5分)。ただ、上記のエンコードの設定をしておかないと盛大に文字化けるのでその点は要注意。

![imports.PNG](https://qiita-image-store.s3.amazonaws.com/0/25990/76eba47b-0559-651f-3c25-5ecc00be5042.png)

なかなかのツールなので、Gitの導入を検討されている場合は是非俎上に上げて頂ければと思います。