kkamegawa's weblog

Visual Studio,TFS,ALM,VSTS,DevOps関係のことについていろいろと書いていきます。Google Analyticsで解析を行っています

VSTSやTFSをより便利に使う拡張機能

はじめに

marketplace.visualstudio.com

Visual Studio Team Services(VSTS)および、Team Foundation Server(TFS)を便利に使うための拡張機能が公開されています。大部分の拡張機能は無料で使えます。ただし、拡張機能が呼び出すサービスが有償になっているものがあるので、気を付けてください。サーバーを使うようなものは有償が多いですね。

marketplace.visualstudio.com

このTeams統合のように「Get Stated」としか書かれてない拡張機能は、クリックすると使い方のページへリンクがあるだけで、特にインストールすることなく使えます。同様の拡張機能にSlack, Office 365 Integrationがあります。

昔はユーザー拡張機能しかなかったけど、今はVSTS自身が提供しているというものも少なくありません。例えばKubernetesタスクは牛尾さんが作られたものが長く利用されていましたが、最近VSTS公式からも提供されています。

docs.microsoft.com

marketplace.visualstudio.com

標準のタスクはオープンソースになっているはずです。

github.com

どっちがいいか見比べるのはなかなか難しいと思いますが、便利なものを使ってください。

私のアカウントにもいくつか入れていますが、便利そうなものをピックアップして紹介します。もちろん私が見てないだけのものもあるので、よさそうなものがあったら、ぜひ教えてください。

コード系

marketplace.visualstudio.com

コード検索機能を提供します。TFSはErastic Searchを使っているので、VSTSもおそらくそうだろうと思います。

ビルド とリリース

Package Management(有償)

marketplace.visualstudio.com

6人以上が使う場合は有償になります。

npm, maven, nugetのプライベートフィードをサポートします。開発(スプリント)期間中は特定のパッケージで固定したいという要望はよくあります。オリジナルソースでlatestをとってくると開発者が自動的に更新してしまうということが防げます。もちろん外部に公開できないパッケージを管理するときにも便利です。

Replace Tokens

marketplace.visualstudio.com

ビルド時にソースコードの特定の場所を書き換えたいという要望はたまにあります。例えば、ソース中にGitのコミットハッシュを埋め込んでおいて、改ざんやバージョン検知に使います。そんな希望をかなえてくれる拡張機能です。

SonarQube

marketplace.visualstudio.com

ソース実行時に静的解析したい場合、別のSonarQubeサーバーを呼び出して、ビルド結果に表示できるようになります。

marketplace.visualstudio.com

自分でSonarQubeサーバーを動かしたくない人向けにSonarCloudというものもあります。拡張機能は無償ですが、SonarCloudは有償です。

ストアへリリース

Apple, Google, Microsoftの各ストアへアプリをリリースする拡張機能も用意されています。

marketplace.visualstudio.com

marketplace.visualstudio.com

marketplace.visualstudio.com

marketplace.visualstudio.com

ストアじゃないけど、PowerShell Garallyへの発行をサポートします。

LaunchDarkly

marketplace.visualstudio.com

Feature Flagをサポートする拡張機能です。拡張機能自身は無償ですが、サービスは有償です。

Pester unittest build task

marketplace.visualstudio.com

PowerShellのUnit Testを実行するPasterをビルド時に呼び出します。テスト結果はVSTSが解釈できるXML形式になっているので、ビルド結果概要にも表示されます。

SQL Serverデプロイ

marketplace.visualstudio.com

Visual Studio Enterpriseに含まれるReadyRollをサポートする拡張機能です。データベースの変更点、デプロイスクリプトがビルド結果概要に表示されます。

Apache Tomcat

marketplace.visualstudio.com

Tomcatも対応してます。私自身はTomcatへのデプロイは使ったことないですが、更新されているようなので、大丈夫でしょう、たぶん。

GitHub Tool

marketplace.visualstudio.com

GitHubへのリリースするときはこれが強力だと思います。

IncrediBuild

marketplace.visualstudio.com

VSTSのビルドの弱点の一つはやや非力(Azure VMでいえば、Standard D2s v3レベル)なことです。ビルドのパイプラインを分割することはできますが、重いビルドタスクは早くなりません。

そんな時IncrediBuildを使えば、重いソリューションファイルのビルドを複数のマシンで並列実行できるようになります。IncrediBuildそのものは有償なので気を付けてください。

VSTSで使ったことはないのですが、おそらくプライベートエージェントじゃないと使えないだろうとは思います。

VSTS Chromium Build Task

marketplace.visualstudio.com

Chromeがヘッドレス化したので、UIテストとか非常にやりやすくなりました。ただ、Chromeのポータブル版というのはまだなかったはずで、インストールが必要になるのがネックでした。

このタスクはオープンソース版のChromiumを使って自動テストするためのものだそうです。

Post Build Cleanup

marketplace.visualstudio.com

VSTSが提供するビルド環境は実行時きれいにされているはずですが、そうはいっても残したくない、という事情はあると思います。

TFSでも同じでこちらは明示的にきれいにされるタイミングがビルドを実行した後、(確か)過去5回分はディスク上に残っています。機微情報がディスクにあると困る、という場合はこれを使ってください。

ただ、消してしまうと、ビルド後のトラブル調査がやりにくくなるので、conditional taskでデバッグ実行時はこのタスクを実行しないなどの工夫が必要になります。

StyleCop Runner Build Task

marketplace.visualstudio.com

ソースコードの書式が期待通りになっているか確認するStyleCopを呼び出します。masterブランチへのCIビルドではなく、ブランチポリシーなどで実行するのがいいでしょう。

Ansible

marketplace.visualstudio.com

Ansibleを使うための拡張機能です。現在Windowsサーバーは管理できないので、Linux用ですね。WindowsではDeployment Groupsがあるので、そちらで、という感じでしょうか。

コラボレーション系

Contributions Graph

marketplace.visualstudio.com

GitHubにある、草(Activity Graphが緑色だから)がVSTSにもほしい、という話はよく聞きます。そんな願いをかなえる拡張機能です。

VSTS CLI

marketplace.visualstudio.com

TFS/VSTSのコマンドラインツールです。Visual Studioに組み込まれているtf.exeコマンドはWindows専用なので、クロスプラットフォーム向けには今後こちらが押されていくと思います。

全部の操作ができるわけではない(APIも非公開のものが多い)ですが、tf.exeとちがって、引数の補完機能もあるので、こちらが便利ですね。

オープンソースなので、バグや貢献はGitHubでどうぞ。

他サービスとの連携

Microsoft Flow

marketplace.visualstudio.com

VSTSのイベントによってFlowを使って他サービスとの連携をします。便利だとは思うのですが、VSTSのAPIがどうもそれっぽくないというか、もう一つかませないと使いづらいかもしれません。

Project Integration

marketplace.visualstudio.com

TFSやVSTSはMS Project Serverとの連携をサポートしなくなりました。代わりにこの拡張機能を使ってください、ということだそうです。

BitBucket, Jenkins, GitHubとの連携

docs.microsoft.com

GitHub, Jenkinsはソース取得元、リリース用のartifact、BitBucketはソース取得元として使用できるようになりましたので、拡張機能はいりません。

計画系

Delivery Plans

marketplace.visualstudio.com

複数のチームがある場合、「隣のチームがいつ何をリリースするのか」という情報共有は大変になります。Delivery Planはそういう複数のチームのスプリントを可視化してくれます。

複数のチームがあるような環境ではとても便利です。

Analytics(現在プレビューのため無償)

marketplace.visualstudio.com

バーンアップ、バーンダウン、ベロシティなどの各種ウィジェット、OData Endpoint、Power BIとの統合といった機能を提供します。

Power BIに関しては今のところ作業項目だけのようです。

Test系

Test & Feedback

marketplace.visualstudio.com

これはTFS/VSTSではなく、ブラウザーにインストールする拡張機能です。VSTS/TFSでチーム開発しているWebサイトのここがおかしいようなところがあったら、すぐに開発チームにフィードバックとして登録できます。

開発チームはフィードバックが全部終わったら、みたいなリリースゲートをリリースに仕掛けておけば「フィードバック全部終わったかな」ということをいちいち確認する必要はありません。

Edge用の拡張機能はcoming soonのままもう2年くらいたっている気がするんですが…。

VSTS/TFSを使ってなくても、画面キャプチャ機能としても使えます。以前書いたのでこちらを読んでください。

kkamegawa.hatenablog.jp

kkamegawa.hatenablog.jp

Test Manager(有償)

marketplace.visualstudio.com

これはVisual Studio Enterprise/Testサブスクリプションか、月ぎめのサブスクリプションがないと使えませんが、テスト管理には便利です。

スプリント単位でのテストを管理して、どのくらい消化したか、ブラウザーでテストステップを見ながら実行して、どこでどういう失敗したのかということがわかります。

また、環境ごとのテストケース管理もできるので、例えば、Windows 10のEdge / Firefox / Chromeといったブラウザーごとにテストの管理もできます。自動テストもサポートしていますが、それはおいおい紹介します。

Offline Test Execution

marketplace.visualstudio.com

いつでもVSTSにつながればいいのですが、そうもいかない環境もあります。そんな時にテストケースだけでもみたい、という場合、この拡張機能を使えばTest Managerで管理しているテストケースをExcelに出力して、テスト実行後またインポートすればVSTS側にも反映されます。

Code Coverage Widget

marketplace.visualstudio.com

すぐにわかりますよね。ビルド定義のコードカバレッジの状態をウィジェットでダッシュボードに表示するものです。

その他

Contribution Guid

marketplace.visualstudio.com

サードパーティーのVSTS拡張機能を使うとき、いくつかのVSTSのアカウントに関する情報を入れることがあるかもしれません。そういう情報を簡単に表示するための拡張機能です。

docs.microsoft.com

実際どんな情報が表示されるか、という点に関してはこちらに載っています。

AWS Tools

marketplace.visualstudio.com

AWSを使う方はどうぞ。

Shell exec task without file

(追記)
marketplace.visualstudio.com

忘れてた。Linux/macOS限定ですが、これも便利です。Windowsのコマンドプロンプトからのインラインタスクはバッチファイルを用意することなく複数行の処理がかけるので、ちょっとした処理でもバッチファイルをレポジトリに登録する必要がありませんでしたが、bash shellタスクではワンライナーしかできませんでした。牛尾さんが作られたこのタスクはその助けになります。

ちなみにPowerShellタスクもあるのですが、こちらはインラインでは確か500byteくらいまでです。どうしても長いタスクを書きたくて、製品グループにはたびたび要望が出るのですが拒否されます。私も要望出したことがあります…。

docs.microsoft.com

VSTSのビルドタスクで使用するAppleの証明書を切り替えたい

こんな質問を見かけたので、考えてみました。実はコメントでdownload secure fileタスク使って必要なファイルをダウンロードするしかないのかなぁ、と書いたのですが、conditional taskを使えばもっときれいにできることを思いついてしまいました。

conditional taskについては以前書いたので、こちらを見てください。

kkamegawa.hatenablog.jp

やり方はそう複雑ではなく、Install Apple certificationタスクを二つ登録して、それぞれのCustom conditionにVariableの値を評価するというやり方です。こんな感じ。

f:id:kkamegawa:20180606063242p:plain

VariableのApplecertificateに"production"と書かれていたときだけ実行する。

f:id:kkamegawa:20180606063240p:plain

VariableのApplecertificateに"demo"と書かれていたときだけ実行する。

f:id:kkamegawa:20180606063241p:plain

Variablesに"Applecertificate"を登録して、右端のSettable at queue timeにチェックを入れます。このチェックがあると、手動実行時にVariableの値を任意で指定できます。ここでは空欄にしていますが、デフォルトの値を決めておけばCIで回すときには指定した値が使われます。

あるいはREST APIを使って、ビルド指定してもいいかもしれません。

docs.microsoft.com

これでビルド実行時Applecertificateの値に一致するほうの証明書をインストールします(証明書持ってないので、ここから先は画面がありません)。

Visual Studio Team Services 2018/5/30の更新

Visual Studio Team Servicesのリリースノートの翻訳を行いました。オリジナルはこちらから読んでください。

docs.microsoft.com

今回の目玉としてはリリース進行状況がかなりグラフィカルでリッチな見栄えになっていることですね。ちょっと前から使っていますが、見栄えはいいです。問題点としてはリリースゲートでエラーが出たときのログが旧ビューでしか見えない点でしょうか。フィードバックされているので、そのうち直ると思います。

pull requestのポリシーの上書きはサービスを運営している場合や、承認者が上司で不在がちとなっている場合にしばしば発生するでしょう。お互い信頼しているような組織では非常に便利だと思います。

プライベートエージェントの並列度のライセンスが緩和されたので、注意事項にあるように、並列処理ビルドのキュー待ちにならないようにプライベートエージェントを使っている場合は気を付けてください。Account Setting → Build and Release → Resource limitsで確認できます。

ではまた三週間後。

Translate to Japanese to VSTS release notes from h ...

書籍レビュー:PowerShell実践ガイドブック

ちょうど読みたかったPowerShell実践ガイドブックのレビュワーをマイナビ出版さんが募集されていたので、応募したところ、見事当選しました。シェルに引っ掛けて貝殻が表紙になっているので、貝殻本だそうです。

貝殻本(と呼んで欲しいと書かれてた)とインサイドWindowsが同時に来た!

私のバックグラウンド

Windows PowerShellは1.0のころから注目していて、公私ともにぼちぼち使っていました。バッチファイルがどうも嫌だったんですね。単純に並べるだけならまだしも、制御文を考え出すとちょっとつかいたくないな、と。

ほんとうはC#がよかったけど、当時はC#スクリプティングもなかったし、似たような構文でかけるかも、ということでPowerShellという名前になったころからぼちぼち使い始めました。

第一章でPowerShellとどう付き合っていくか、という分類でいえば、「.NETのクラスライブラリを簡単に呼び出したい(&クラスライブラリの挙動確認をしたい)」あたりが近いでしょうか。

Linuxでbashでそこそこのシェルスクリプト書いてプロダクションとして使ったことがありますが、どうしてもなじめなかった。まさに書かれているように、=とかifの後などに空白入れちゃいけないなどの、ルール(?)になじめなかった。とはいえ、これはほかの人がWindows(PowerShell)に移ってきても同じだと思いますので、どっこいどっこいでしょう。

よかったところ

特に1,2章が圧巻でした。PowerShell Coreとは何なのか、また何故Windows PowerShellをメンテナンスフェーズにして、新しいPowerShell Coreを作ることにしたのかという事情やBash、コマンドプロンプトとの違い、検索TIPSやデバッグを丁寧に書かれていて、ここだけで本書の実に半分近くを占めています。

PowerShellなんて昔やったよ!という方が今のPowerShellを勉強しなおすために読み直すのもいいと思います。実際、私も忘れていたところや、あいまいな知識のままだったところ、PowerShell 4.0以降で追加された機能をもう一度参照できてとても勉強になりました。やっぱり本をまとめて読むのはいいですね。

わかっているけど、構文忘れたときはWebでの検索もいいのですが、全くゼロベースの知識から始めるときはこうやってちゃんと挙動や仕様を逐一まとめてくれた本はとても助かります。

また、検索のノウハウやデバッグの基本なども書かれているのは非常にいいと思いました。こういうの教えてもらわないといつまでも無駄な時間を使いますしね。特に「メッセージを英語で」検索するの重要です。本書でも書かれていますが、英語圏には圧倒的なリソースがあるので、解決に至るまでの時間も短くなります。

読み方

順序だてて書かれているので、読みやすくはあるのですが、それでもボリュームがある本なので、すでにWindows PowerShellを使いこなしている方であれば、1章を軽く見るだけで、2章,4章を読めばいいかなと思います。

これからPowerShellを始めるんだけど、という方はまず1章,2章でいいでしょう。少しずつ練習して、少し疑問が出てきたり、エラーをもっとちゃんと処理したい、よい書き方を学びたいという方は3章飛ばして、4章読んでから自分のスクリプトを改造するのもいいんではないでしょうか。

もっと書いてほしいところ

PowerShellといえばやはりMSによるスクリプティングのシステム管理を想定しているので、今はPowerShell CoreベースのDSC実装がないことによる運用がなかったのは(著者も書かれていましたが)もっと読みたいところでした。今後DSCの実装が出てきたときに改めて第二版や分冊といった形で出してもらえるといいかなと思います。

とはいえ、ないものをねだっても仕方ないので、今ならAnsibleなんかもあっても面白いかもしれないですね(ベータはあるのかな…)。

個人的にPowerShellに期待しているところといえば、REST使った外部WebAPIをたたくことによる自動化と、WinRM(これはWindows PowerShellですが)による複数マシンの制御なので、そういった本が別にあってもいいかなと思います。

MSが作っているのに、PowerShell Coreの活用はAWSのほうが先行しているという何とも皮肉な図ですが、AzureはWindows PowerShellようにリリースしているモジュールをそのうち合わせてくるのでしょうか。

ちょっと気になったところ

長いスクリプトは動かしてないので、その部分の正誤はわからないですが、少し気づいたところなど。次の版で直してもらえたらいいかなという程度で、本書の良さを損なっているわけではありません。

82ページ

コマンドプロンプト(MSDOS)
コマンドプロンプトはMSDOSではないですね。その後ではちゃんと「DOSではない」と書かれているので、あえてそう書かれているのかもしれませんが。あと、Windows PowerShellはメンテナンスフェーズと書かれているのに、エクスプローラにあるというのはちょっと説得力が弱いかなぁと思いました。

コマンドプロンプトのおそらく内蔵コマンドに関しては強化されることはないかもしれませんが、CUIを動かすシェルとしての強化はWSLと連携して続いていますしね。

132と136ページ

132ではSYNTAX(たぶんPowerShellの表示結果から)だが、136ページではシンタックスとカタカナ読みになっているのはわざと?

190ページ

void型を使うと、処理結果を戻り値のないことを表現できます
→少しへんな日本語

191ページ

「配列の節で説明しているので」
→ここに限らないのですが、後半では章レベルになるものの、参照が書かれているのですが、前に戻ってみるときに探さないといけないので、ちゃんと節番号で書いてもらえると助かります。

218ページ

リスト2-244に変数だけあって結果がない

222ページ、232ページ

「あえて一節を設けて」
→2.7なので、書くなら「一項」?

245ページのリスト2-292

PowerShellの実行結果ではなく、dotnet coreになってる。たぶんリスト2-291が間違い(実行できないソースのまま掲載)して、ずれてる。

268ページ

モジュールを任意の方法で読み込んだり、自動的な〜
→だりが一つしかない

322ページ

リスト3-69の前のところと文のつなぎがよくわからない

3.4の認証のところ

Windows PowerShellには証明書を使った認証もあるので、その言及があってもよかったかなぁ。

495ページ

初期値の説明がですます調(ほかはである調)

495ページその2

メソッドの説明の「記述できます、」の句点誤り

547ページ

5.1.6の内容は例外の再スローを避ける話なのに、タイトルがちょっと違う気がします。最初タイトルだけ見て内容とあわなくて?となったけど、ソース見て理解できました。

567ページ

Get-process のtypo

PowerShell実践ガイドブック クロスプラットフォーム対応の次世代シェルを徹底解説

PowerShell実践ガイドブック クロスプラットフォーム対応の次世代シェルを徹底解説

PowerShell実践ガイドブック ~クロスプラットフォーム対応の次世代シェルを徹底解説~

PowerShell実践ガイドブック ~クロスプラットフォーム対応の次世代シェルを徹底解説~