誰でもできる!VSTSとSlackの超簡単な連携方法

[Visual Studio Advent Calendar 2016](http://qiita.com/advent-calendar/2016/vs) 10日目の記事です｡

この記事では､[Visual Studio Team Services](https://azure.microsoft.com/ja-jp/services/visual-studio-team-services/)(VSTS)とSlackの超簡単な連携方法について､超簡単に説明していきたいと思います｡

バージョン管理には､皆大好きGitではなく､Team Foundation Version Control(TFVC)を使用します｡
私自身､Git(というかGitHub)派なのですが､仕事ではTFVCを使用しています｡
Microsoft謹製ということもあり､結構便利な機能があるのですが､イマイチ普及していない感が強いです｡
その為､日本語の情報がそれほど多くないので､少しでも誰かの助けになればという思いと､自身の備忘録も兼ねて､今回はTFVCを使い､説明していきます｡
Gitで管理したい場合は､2日目担当の @ohke さんの記事をご覧ください｡
[Visual Studio Team Servicesでチームプロジェクトをスタートする](http://ohke.hateblo.jp/entry/2016/12/02/004955)

文章力にあまり自信が無いので､超雑な説明になるかもしれませんが､超余裕で見逃してください｡

# 前提
- Microsoftアカウントを取得している｡
- Slackのチームを作成している｡
- Visual Studioを使用している｡

# 環境
- Windows7 64bit
- Visual Studio 2015 Community

※Visual Studio 2013でも同様の手順で設定できます｡

# 最終目的
本記事の最終目的は､ソースコードの変更をチェックインした際に､その旨をSlackへ通知することです｡
他にも色々設定できるのですが､この記事を最後まで読んで頂ければ､応用でなんとかなるはずなので､個人的に一番利便性を感じた｢チェックイン通知｣をご紹介します｡

# 手順
## VSTSにチームプロジェクトを作成する
[VSTS](https://azure.microsoft.com/ja-jp/services/visual-studio-team-services/)にログインして､新規プロジェクトを作ります｡
![create_pj.png](https://qiita-image-store.s3.amazonaws.com/0/74711/79e0d12a-25ab-e79c-9132-7284f96e72e3.png)

｢Project name｣に任意の名前を入力(本記事ではDemoとします)
｢Version control｣は､恐らくデフォルトでGitになっていると思うので､TFVCに変更してください(MSもGitを推奨しているのでしょうか...)
![create_pj_dialog.png](https://qiita-image-store.s3.amazonaws.com/0/74711/204e0bdf-ac4f-c44b-effe-443bbd59f941.png)

｢Create project｣をクリックすると､プロジェクトが作成されます｡
場合によっては少し時間がかかりますが､正常に作成されると､以下のようなダイアログが表示されます｡

![create_pj_dialog2.png](https://qiita-image-store.s3.amazonaws.com/0/74711/fb9b0691-4f75-5af8-3220-dd8e99145b8a.png)

｢Navigate to project｣をクリックして､ポータル画面を開きます｡
![web_portal1.png](https://qiita-image-store.s3.amazonaws.com/0/74711/135c321f-f44b-3eb8-2b28-79858d22edcd.png)
何をそんなに歓迎されているのかはわかりませんが､このダイアログは無視して構いません｡

｢Open in Visual Studio｣をクリックして､Visual Studioを起動します｡
![web_portal2.png](https://qiita-image-store.s3.amazonaws.com/0/74711/13effb7d-2485-d325-9a24-c2ddbb777838.png)

## VSでプロジェクトを作成する
上記手順でVisual Studioを起動すると､VSTSで作成したチームプロジェクトに紐付いた状態になっていると思います｡
ご自分の環境に合わせて､必要であればマップするパスを変更してください｡
![vs1.png](https://qiita-image-store.s3.amazonaws.com/0/74711/ac0a3805-2302-62f8-f284-25ddd00eaa6d.png)
問題なければ｢マップと取得｣をクリックしてください｡

正常に完了したら､ソリューションを新規作成します｡
![vs2.png](https://qiita-image-store.s3.amazonaws.com/0/74711/4e0516af-3797-5146-1462-7ce409f1a4c0.png)

適当なアプリを作成します｡
｢ソース管理に追加｣にチェックが付いていることを確認して｢OK｣をクリック
![vs3.png](https://qiita-image-store.s3.amazonaws.com/0/74711/6bd54adb-5dfd-b869-e238-aabbba1d3636.png)

## プロジェクトをチェックイン
｢チームエクスプローラー｣→｢保留中の変更｣をクリック
作成したプロジェクトをVSTSにチェックインします...
### その前に
Gitではコミットする際に､コメントの記載は必須ですが､TFVCでのチェックインは必須ではありません｡
コメントをせずにチェックインしてしまう(されてしまう)と､後から履歴を見たときに非常に困るので､コメントの記載を必須に設定します｡
｢チームエクスプローラー｣→｢設定｣→｢ソース管理｣をクリック
![vs4.png](https://qiita-image-store.s3.amazonaws.com/0/74711/86db7d92-d3a8-8e2f-6afe-839732360a4e.png)

｢ソース管理の設定｣ダイアログの｢チェックインポリシー｣タブを選択し､｢追加｣ボタンから､｢変更セットのコメント ポリシー｣を選択して｢OK｣をクリック
![vs5.png](https://qiita-image-store.s3.amazonaws.com/0/74711/ceaa80c1-eeed-b19c-0e49-96feacf35d64.png)
必要に応じて､その他のポリシーも設定してください｡

チェックインポリシーを設定すると､｢保留中の変更｣でコメントの記載を求められるようになります｡
![vs6.png](https://qiita-image-store.s3.amazonaws.com/0/74711/0356f111-212b-e576-de80-0be1dca64e85.png)
ただし､｢オーバーライド警告｣をクリックして､｢オーバーライドの理由を入力｣に何かしら入力してしまうと､チェックインポリシーを無視してチェックインできてしまいます｡
**特別な理由がない限り､絶対に使用しないようにしましょう｡**

## 今度こそプロジェクトをチェックイン
コメントを入力するとチェックイン可能になります｡
![vs7.png](https://qiita-image-store.s3.amazonaws.com/0/74711/2bad63f2-fb09-328f-f0ab-fbe665f3920b.png)
正しくチェックインできました｡

## Slackにチェックインを通知する
やっとSlackの登場です｡
ブラウザから､ご自身のチームにログインしてください｡

### SlackチームにVSTSアプリを登録
Slackのチームから｢Apps & integrations｣を選択
![slack3.png](https://qiita-image-store.s3.amazonaws.com/0/74711/2ec82416-1d77-b7ea-1d5e-02e66b9dfd63.png)

｢App Directory｣からVSTSアプリを検索
![slack4.png](https://qiita-image-store.s3.amazonaws.com/0/74711/8ffaf6d0-e3d1-8a53-e1fe-c7e981ed6903.png)

｢Add Configuration｣をクリック
![slack5.png](https://qiita-image-store.s3.amazonaws.com/0/74711/e077d9af-7e5d-4299-d479-c093515e6abe.png)

｢Post to Channel｣に通知を流したいチャンネルを設定
予め｢checkin｣という名前でチャンネルを登録しておきました｡
![slack7.png](https://qiita-image-store.s3.amazonaws.com/0/74711/17ba35d9-3986-b6f6-5fa0-defb9001a6e2.png)

｢Add Visual Studio Integration｣をクリックするとWebhook URLが発行されるので､コピーします｡
![slack9.png](https://qiita-image-store.s3.amazonaws.com/0/74711/fa6e93ef-e5a2-a049-b3d8-f389a4dfa8ba.png)

### VSTSでSlackに通知する設定
VSTSのポータル画面を開き､｢歯車アイコン｣→｢Service Hooks｣→｢Create subscription｣をクリック
![web_portal3.png](https://qiita-image-store.s3.amazonaws.com/0/74711/8fd0fb6e-af7e-40d4-ff58-49a8b213d505.png)

左のメニューから､｢Slack｣を選び｢Next｣
![web_portal4.png](https://qiita-image-store.s3.amazonaws.com/0/74711/613ae66f-9ec2-ba68-fd7b-e68d52792808.png)

Triggerを設定します｡
｢Trigger on this type of event｣で｢Code checked in｣を選び､｢Under path｣には作成したプロジェクトのパスを設定します｡
正しく設定できたら｢Next｣
![web_portal5.png](https://qiita-image-store.s3.amazonaws.com/0/74711/eeaf9785-c315-c3fd-aa0f-ddf677a2fc72.png)
※他にもトリガーを設定できますが､ビルド､デプロイ系はAzureオンリーっぽい?

Actionを設定します｡
｢Slack Webhook URL｣に先程取得した｢WebHook URL｣を貼り付けます｡
正しく通知されるかの確認のため､｢Test｣ボタンをクリックします｡
![web_portal6.png](https://qiita-image-store.s3.amazonaws.com/0/74711/4ac29d16-d5dc-b9f6-87ea-65eb114c8de0.png)

このダイアログが表示されれば問題なく連携できています｡
![web_portal8.png](https://qiita-image-store.s3.amazonaws.com/0/74711/e4623eed-a165-6094-dd85-fe58a810513b.png)

Slack側も見てみましょう｡
![slack10.png](https://qiita-image-store.s3.amazonaws.com/0/74711/9f6d0916-fafa-796b-7423-1cca785089d3.png)

問題なければポータル画面で｢Finish｣をクリックしてください｡
これで連携完了です｡
お疲れ様でした､超簡単でしたね｡

# チェックインして通知を確認する
実際にコードを変更し､チェックインしてみます｡
メッセージをコンソール出力してみます｡

```csharp
namespace DemoApplication {
    class Program {
        static void Main(string[] args) {
            Console.WriteLine("ロシアンルーレット寿司を頼んだあの人のことは絶対に許さない");
        }
    }
}
```
忘年会のシーズンですからね､仕方ないです｡
コメントを入れてチェックインします｡
![vs9.png](https://qiita-image-store.s3.amazonaws.com/0/74711/83da28da-dadb-c4f5-6918-43c404523ea5.png)

Slack側に通知が流れているか確認します｡
![slack11.png](https://qiita-image-store.s3.amazonaws.com/0/74711/1f7f99ca-ff0f-3a1e-bc1e-b4322479f566.png)
無事通知されました｡

変更点を確認します｡
｢changeset: 62｣の数字部分がリンクになっているので､クリックしてみます｡
すると､ポータル画面が開かれ､変更点のdiffを見ることができます｡
![web_portal9.png](https://qiita-image-store.s3.amazonaws.com/0/74711/636f3703-90fd-6ec6-9beb-2240c3909abb.png)

一々VSやVSTSでポチポチ操作する必要がないので地味に便利です｡

# 補足: コメントのフォーマット
私はコメントを以下のようなフォーマットで記載するようにしています｡

```text
変更クラス名
変更メソッド名
変更内容(箇条書き)
```
こうすることで､VSで履歴を表示した際に､｢どのクラス｣の｢どの機能｣を｢どう直した｣のかわかりやすくなります｡
![vs10.png](https://qiita-image-store.s3.amazonaws.com/0/74711/9fc4d7a3-6a8d-3a62-b8ee-a36c3dc9abdc.png)
何かの参考になれば幸いです｡

# 最後に
最後まで読んで頂いてありがとうございます｡
｢できるだけわかり易く｣と思ったらスクショだらけになってしまいました...
説明不足､間違った点があれば､遠慮なくご指摘ください｡

明日は11日目 @srndpty さんの[Unity開発に便利なVisualStudio拡張](http://q7z.hatenablog.com/entry/2016/12/11/001009)です!