BitBucketのいいところ

KLab では、プロジェクト開発中に作った便利ツールなどを皆が気軽に社内で公開できる場としてBitBucketの無制限プラン($200/month)を契約しています。 今日は Github に比べていいなと思う点を紹介していきます。

1. アクセスコントロール

Githubだと、書き込み権とadmin権が一緒になってしまっていましたが、BitBucketではadmin権とwrite権が分かれていたり、Team(GithubでいうOrganization)の Owner グループでなくてもリポジトリを作ることができます。 特にadmin権がなくてもリポジトリが作れるので、「皆に気軽にリポジトリを作って欲しい」を実現するために皆に Team の admin権を渡さなくていいのが利点です。

deploy key についても、同じ公開鍵を複数のリポジトリに登録できるのと、pushが禁止されているのでサーバーで間違えてpushしてしまう事故を防ぐ事ができます。

2. ショートカットキー

BitBucketではリンクにカーソルを合わせるとポップアップでショートカットキーを教えてくれます。 また、 Repository 画面の Issue なら r i という感じにイニシャルになっていて、とても覚えやすいです。

コミット履歴やソースツリーを見るリポジトリブラウザでは、J/K/Enter/Backspace でナビゲートできます。 Github のブラウザはカッコイイし慣れたら素早く特定のファイルを見えると思うのですが、慣れるまでは BitBucket の方が早いと思います。

3. リポジトリ、ブランチ管理

BitBucket のコミット履歴画面では、コミットグラフが表示されます。 Pull Request 運用をしていると master ブランチにマージしたコミットと、 feature ブランチ内のコミットをひと目で見分けられるのでとても便利です。

また、 feature ブランチ一覧画面があって、たくさんある feature ブランチを1つ1つ選択しなくても一覧することができます。 まだ試していないのですが、最近はブランチの同期機能ができたらしいので、ブラウザ上で master ブランチの変更を feature に取り込んだり、 fork 元の変更を取り込んだりできるかもしれません。 (what's new)

4. コードレビュー

ブラウザ上でコードレビューしていると、差分のもうちょっと上も見たいことがよくあります。 BitBucket の差分表示画面は「もうちょっと上」を表示することができたり、ファイル全体の side-by-side diff が見えたりするので、差分の確認が圧倒的に楽です。

また、Pull Request画面では、現在そのPull Requestを見ているユーザーの数が表示されたり、だれかがコメントしたらその通知が表示されてリロードを促してくれます。 IRCなどで Pull Request のレビュー依頼をして複数人でワイワイレビューするときにはこのリアルタイム性が楽しいです。

Pull Request 画面には Approve ボタンがあり、レビューしてOKだと思った人の一覧が表示されるようになります。これは Pull Request 一覧画面にも表示されるので、masterへのコミット権を持った人はレビュー済みの Pull Request だけを選んでマージするべきかどうかを確認することができます。

まとめ

1年前の BitBucket は Github の安くて低機能なバージョンという感じでしたが、この1年ですごい勢いで改善されていて、特にコードレビュー機能の使いやすさは Github よりも数歩先に行っています。 Github Enterprise を契約する前にまず社内で Pull Request によるコードレビュー体制を作って行きたい場合には、 Github の Private よりも良いのではないでしょうか。

Enterpriseに関しては、 BitBucket の Enterprise は Stash という別のソフトになってしまっていて、こちらは試していないのでどんな感じか判りません。 Mercurial が使えないなど別物ではあるのですが、 Stash のスクリーンショットを見る限りではレビュー機能は BitBucket と同じ使い勝手になっていそうです。 お値段は1ヶ月あたりスタバのコーヒー二杯分くらい (50人なら約500円/人月, 500人なら約180円/人月) なので、帝国ホテルのコーヒーが高いと感じる人は Stash も検討してみるといいかもしれません。

このブログに乗せているコードは引用を除き CC0 1.0 で提供します。