kkamegawa's weblog

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

Windows TerminalにPowerShell Coreを追加する

issueも出ているので、賞味期限は短いブログになるはずです(笑)。

Windows Terminalの初期プレビューが公開されました。Windows 10 1903を入れておかないといけませんが、ビルド環境がなくてもストアからインストールできます。

www.microsoft.com

ANK以外の環境だと日本語周りとかうまく動かない点も多いようですが、ぼちぼち使っていきます。インストールすると、Ubuntu(WSL1), cmd.exe, Windows PowerShellの三つの環境がプリインストールされています。PowerShell Coreも入れたいなぁ、と思ったので、Settingsを起動、jsonファイルを編集します。

(追記)
どうもPowerShell Core 6.2.xを入れていれば最初から認識されるようです。私は更新さぼってて6.1.1のままだったのでこの技が必要になりました。Terminal入れるまえに更新するといいようです。 (/追記)

余談ですが、settingsで単なるjsonが開くとは知らなかった&jsonを関連付けしていなかったので、結構困りました。VS Codeでもなんでも関連付けておいてください。

profilesセクションの配下に以下の設定をコピペします。フォントサイズはちょっと大きめに変えました。

        {
            "acrylicOpacity" : 0.5,
            "background" : "#012456",
            "closeOnExit" : true,
            "colorScheme" : "Campbell",
            "commandline" : "pwsh.exe",
            "cursorColor" : "#FFFFFF",
            "cursorShape" : "bar",
            "fontFace" : "Consolas",
            "fontSize" : 16,
            "guid" : "{574e775e-4f2a-5b96-ac1e-a2962a402336}",
            "historySize" : 9001,
            "icon" : "ms-appx:///ProfileIcons/{574e775e-4f2a-5b96-ac1e-a2962a402336}.png",
            "name" : "PowerShell Core",
            "padding" : "0, 0, 0, 0",
            "snapOnInput" : true,
            "startingDirectory" : "%USERPROFILE%",
            "useAcrylic" : false
        },

迷ったのがguidとiconでこれどこからとってくるんだろうと思ったら、GitHubの別のissueに載ってました。Windows 10に登録されているiconのms-appxのURLそのままでいいようです。

f:id:kkamegawa:20190623133822p:plain

これでPowerShell Coreも起動します。Settingsに登録すると、アイコンは即時反映されますが、起動はしないようなので、Terminalsを再起動してから使ってください。

github.com

もうちょっといっぱいプロファイルにいれてよ、というissueは立っています。あと、PowerShell Coreをscoopで入れている人はこれやっても認識しないというissueもたっています(scoop使ってないので、確認していません)。

github.com

見てわかる通り、guidの値はこのissueからもらってきました。

Scott Hanselman氏のブログもご参考に

www.hanselman.com

Azure PipelinesでAzureのREST APIを呼ぶ

これはAzure DevOpsアドベントカレンダー19日目の記事です。

qiita.com

というちぇんわさんの無茶ぶり読者からのご質問があったので、簡単にやってみました。

Azure Pipeline task to call Azure REST API

難しいことはなくて、Azure PipelinesにPowerShellタスクを追加して、普通にPowerShellでのREST API呼び出しているだけです。もちろんアクセストークンなんかはこんな生書きしてはいけません(笑)。variablesか、Libraryに入れておくのが望ましいです。

一つ悩ましいとすれば「どうやってAzureのトークン取るの?」ということですが、今回の場合、AzureのREST APIのリファレンスには"Try It"というボタンがついているので、そこから持ってきました。

例えばVirtual Machinesの一覧を取るAPI。

docs.microsoft.com

このトークンの権限はちょっと調べてないですが、同様のことはAzure-CLIでもできます。Try Itからサインアウトしてもキーは使えていました。

docs.microsoft.com

qiita.com

ただまぁどうしてもRESTじゃないといけないということはあると思いますが、簡単にやるならAzure PowerShellタスクやAzure-CLIタスク使うとこの辺の面倒全部見てくれる(Login-AzureRmAccountコマンドレット不要)ので、そっちのほうがいいんじゃないかなと思いました。

docs.microsoft.com

docs.microsoft.com

多要素認証設定とSkype for Businessへのログイン

今月末ですが、VSTS/TFSお悩み相談会をやる予定です。

tfsug.connpass.com

今回は実験的にリモート枠を用意してSkype for Businessを使ってみます。Skype for Businessを普段使っていない、ゲストの人もブラウザだけでアクセスできます。最近はZoomも人気だそうですね。100人参加者までなら無料でいけるのか…今回だめだったら次は考えてみます。ゲストの方はこちらもどうぞ。

snow-white.cocolog-nifty.com

で、自分で会議を作ろうとしたところ、Skype for Businessにログインできません。

Skypeログイン失敗
Skypeログイン失敗

ちょっと前まではできていたのに、macOS/Windowsどちらもだめ。Webスケジューラーで予約はできるので、ライセンス的に問題なし。

support.office.com

どうにもならなくなったので、サポートに聞いてみます。サポートはテナントの全体管理者だけだったかな?しか使えないので、気を付けてください。少なくとも一般ユーザーではサポートを使えません。聞くときに気を付けること。

  1. 発生している環境(OS, クライアントソフトのバージョン)
  2. 発生タイミング
  3. やったこと
  4. 異なる回線で発生するか(これ重要。企業ネットワークだと全貌を知るのは難しいので、モバイル回線やフレッツなどのプレーンな環境で切り分けしておくとベター)
  5. トラブルシューティングログ(Skypeの場合は%localappdata%\Microsoft\Office\16.0\Lync\Tracing。もちろんクライアントの設定必要)

support.office.com

私の場合、いろいろ聞かれたのですが途中でExchangeに先端認証を設定していたことを思い出し、聞いたらSkypeも同期させてます?と聞かれてやってないことを思い出しました。

で、設定を確認されたのですが、ここからが大変。案内されたマニュアルは多要素認証を使っていない手順。

answers.microsoft.com

どうしたものかと思っていたら、これでよかったです。

Import-Module SkypeOnlineConnector
$skypesession = New-CsOnlineSession

Credential パラメータを使わなければ認証画面が表示されるので、そこで入力すれば多要素認証のウィンドウが表示されるというだけでした…一瞬多要素認証外さないといけないのかと思っていたので、かなり焦りました。

Skype PowerShellモジュールログイン。文字化けはご愛敬
Skype PowerShellモジュールログイン

import-pssessionコマンドレットでSkype Onlineに接続できるので、あとはかずあきさんの超すごいエントリーにあるように以下のコマンドレット一発で同期設定が完了します。最大24時間かかるときいていましたが、ぼっちテナントということもあり、5分後にはSkype for Businessへログインができるようになりました。

Set-CsOAuthConfiguration -ClientAdalAuthOverride Allowed 

※:ExchangeモジュールみたいにClickOnceで飛んできてほしい。インストールするのめんどくさい。

サポートの方ありがとうございました。

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