Jack of all trades

master of none. 多芸は無芸を地で行く、自作自演何でも屋。

Visual Studio OnlineでPull Request駆動開発

本エントリは Visual Studio Advent Calendar 2014 13日目対応のエントリです。

GitHubやらGitBucketでおなじみのPullRequestを活用した開発をVisualStudioOnline上でやってみようというお話です。

Visual Studio & Team Foundation Serverのソース管理で構成している場合でも、コードレビューの機能が存在しますがVisual StudioのエディションがPremium以上でないと使えないというハードルがあります。 http://msdn.microsoft.com/ja-jp/library/hh474795.aspx

そんな中、Visual Studio Onlineでは今年の6月に、オンプレミスのTeam Foundation Server 2013についてもVisual Studio 2013のUpdate4のタイミング(今年の11月)でPull Requestの機能がリリースされました。
※もちろんバージョン管理にGitを使用している場合のみ利用可能です。どんどんバージョン管理がGit一択になっていく…。

これによってVisual Studio 2013のProfessional以下のエディションでも(システムを利用した)コードレビューのサイクルを取り入れたチーム開発が可能になります。
※ちなみに現在着手しているお仕事では実際にこれでやってます。

前置きはこれぐらいにして、実際の手順について説明していきます。

1.前提(というか必要な下準備)

前提として、基本的なGitの使い方は押さえているものとして進めます。
差し当たり、下準備としてVSOnlineでバージョン管理にGitを選択したプロジェクトを作成する必要があります。
その上で、VSから作成したプロジェクトのGitリポジトリをクローンして、対象となるソースコードを コミット&プッシュしてmasterブランチを構成しておきます。
一通り準備出来たらVSのチームエクスプローラーのホームはこんな感じで表示されているかと思います。

f:id:sadynitro:20141213151607p:plain

2.新しい分岐の作成(ローカルブランチの作成)

下準備ができたところで、ローカルのmasterブランチを基に開発用のローカルブランチを作成します。
(実際の開発ではDevelopブランチを作成して、それに対して各個別の開発ブランチ(featureブランチ)を生やしていくのが一般的かなと思いますが、ここでは簡略化して進めていきます)
チームエクスプローラーの「分岐」画面で「新しい分岐」を選択し、作成するブランチ名(入力上段)と分岐元のブランチ名(入力下段、ここではmaster)を入力して「分岐の作成」をクリックするとブランチが作成されます。ここで「分岐のチェックアウト」にチェックを入れておくとブランチ作成と同時に、作成したブランチにスイッチしてくれます。

f:id:sadynitro:20141213151817p:plain

3.分岐の発行(ローカルブランチをリモートブランチにプッシュ)

作成したローカルブランチをリモートブランチにプッシュします(要は「git push origin "ローカルブランチ名"」)
リモートブランチへプッシュするタイミングは、同じブランチを複数人で突き回すのでなければ、ローカルブランチに変更を反映した後でも良いかと思います。

f:id:sadynitro:20141213151908p:plain

f:id:sadynitro:20141213151925p:plain

4.変更のコミット

開発用のローカルブランチでソースコードに変更を加えた後、チームエクスプローラーの「変更」画面からコミットを実行します。

f:id:sadynitro:20141213151945p:plain

5.コミットをリモートブランチにプッシュ

変更をコミットしたらチームエクスプローラーの「同期されていないコミット」画面からプッシュを実行してリモートブランチに変更を反映します。

f:id:sadynitro:20141213152021p:plain

f:id:sadynitro:20141213152033p:plain

6.PullRequestを作成する

ようやく実際にPull Requestを作成する段階まで辿り着きました…。
VSOnlineのWebポータルで対象のプロジェクトの画面を開き、「CODE」のメニューにある「Pull Request」画面を開きます。
そして、Pull Requestの画面左上にある「New Pull Request」をクリックします。

f:id:sadynitro:20141213152054p:plain

Pull Requestの作成画面で上部にある「Review Changes in」という箇所でマージ元ブランチとマージ先ブランチを選択します。 その後、「REVIEWERS」から、レビューしてほしいユーザーを選択し「Create Pull Request」をクリックします。

f:id:sadynitro:20141213152105p:plain

無事にPull Requestが作成されました!

f:id:sadynitro:20141213152119p:plain

7.コードレビュー→マージする

作成されたPull Requestの画面では、「Discussion」タブで対象の変更内容全般に対するコメントを入力したり「Code」タブで変更点のDiffを見ながらインラインでコメントを入れることもできます。このインラインが中々秀逸で、コメントに対する対応状況のステータスが入力出来たり、どのファイルに誰がどんなコメントを入れましたよというのを左側のツリーに表示してくれたりします。

f:id:sadynitro:20141213152135p:plain

コードレビューを実施した後、評価として承認または却下、はたまた保留であったり条件付きで承認など、割と細かい選択肢が用意されています。
一度差し戻してからの再レビューであったり、一旦はこれでいいけど今後要検討ね、など色々と捗ります。

f:id:sadynitro:20141213152154p:plain

レビューで承認されたらマージを実行します。このサイクルを繰り返していくことで、コードがクリーンな状態で開発を進めていくことができます。

f:id:sadynitro:20141213152209p:plain

f:id:sadynitro:20141213152217p:plain

いかがでしょうか。本来のPull Request機能とは少々違って、チーム開発におけるレビュープロセスを強く意識した作りになっているように感じます(VSOnlineだと基本的にPublicでなくてPrivateですし)
以前から多少触れているService Hooksを利用すればさらに捗ること間違いなし。
VisualStudioOnlineのServiceHooksその後 - Jack of all trades
Visual Studio Online と HipChatを連携する - きよくらの備忘録
是非ご活用いただければと思います。