この投稿は、Atlassian User Group Tokyo Advent Calendar 2016の25日目です。
Bitbucket.org と拡張 (統合)
Bitbucket は、Atlassian Connect による柔軟な拡張が行えます。これらのほとんどは、簡単に適用でき、設定も容易になっています。
拡張機能の閲覧と適用
拡張機能の閲覧は以下の手順で行えます。
右上の自分のアカウントのアバターをクリックして、[統合] をクリックします。
すると、非常に多くの統合機能が閲覧できます。カテゴリでフィルターしてみるとよいでしょう。
使って見たい機能があったら、[追加] ボタンをクリックするだけで適用することができます。適用時に権限について聞いてくることがほとんどですのでご注意ください。
適用したアドオン機能は、アカウントの設定か、リポジトリごとの設定にて詳細な設定を行えるものが多いです。
↓ アカウントの設定に現れているアドオンの設定画面
この例では、Bitbucket で Docker を活用した継続的インテグレーションとデプロイメントを行える「Bitbucket Pipelines」 (詳しくはこちらも参考に) とグループチャットの HipChat と連携して通知や、HipChat でプルリクエストの一覧を管理できる「Bitbucket for HipChat」 (詳しくはこちらも参考に) が示されています。
↓ リポジトリの設定に現れているアドオンの設定画面
この例では、「Bitbucket Pipelines」のリポジトリごとの設定と、Bitbucket Issue Tracking をタスクボードとして可視化できる「BucketBord」 (詳しくはこちらも参考に)、そして HipChat との連携の設定が示されています。
Bitbucket プルリクエスト ガイドライン
プルリクエスト
プルリクエストは、Bitbucket が持っている機能です。レビュアーの指定などが行えて、コードレビューとマージを明確に迅速に簡素に行えるため、この機能を活用した開発フローを採用しているチームが増えています (GitHub フロー、フィーチャーフローと呼ばれる開発スタイル)。
ただし、せっかくの機能でもレビュアーによってレビューのポイントが異なっていたり、レビューの仕方が人に依存しすぎたり(例えば、コードコメントを使ってコードに直接スレッド形式でレビューディスカッションをするにしても粒度や求めるものが人によって差異がありすぎるとスレッドが間延びしすぎてしまい、第三者がみるとなんだかよくわからなく、ナレッジとして活用できない。。。なんてことはよくあります)することがあります。
最初はそれでもコードレビューをするべきですが、ある程度成熟してきたらそれらをガイドラインとして明示すべきです。ただ、それが社内標準など大きな枠組みであったり、ツールと連動していなく、他のドキュメント管理や文書を閲覧しなければならなかったりすると結局ガイドラインは形骸化していってしまいます。
Pull Request Guidelines を使おう
「Pull Request Guidelines」は Atlassian が提供する Bitbucket の拡張機能です。これを適用すると、プルリクエストのレビュー画面にガイドラインへのリンクが出現し、そこからいつでもガイドラインを確認しながら、レビューを行うことができます。
「Pull request guidelines」というリンクがそれです。このリンクをクリックすると、
ガイドラインがポップアップされます。ガイドラインは、大項目と項目が設定でき、また、項目には、詳細な文書を記述しておくことができます。
項目をクリックすると、詳細な文書を閲覧できます。また、項目の右側にあるをクリックすると、「確認した」とマークがつきます。
ガイドラインを書こう
ガイドラインは、もちろんチームによって作ることができます。方法は、CONTRIBUTING.md
ファイルをリポジトリに作成するだけです。
CONTRIBUTING.md
ファイルの内容は、Markdown と同じ形式で。
# --- 大項目
## --- 項目
説明文書
という書式であれば OK です。
上記の画面では、
# レビュー ポイント
## サイクロマティック複雑度
必要以上に複雑なコードになっていないか?入れ子構造の複雑さはコードバグに直結します。
と記述されています(一部抜き出し)。
まとめ
Bitbucket.org には多くの拡張機能があります。これらを活用してよりよいチーム作りに役立ててください。
今回は、ツール機能とは単に自動化することだけではないということも示したかったので、プルリクエストのガイドラインを提供するアドオンを紹介してみました。