kkamegawa's weblog

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

VSTSのビルドタスクは定期的に面倒見よう

ちょっとあまり更新していないのですが、コミュニティサイトのビルドとデプロイをVSTSでやっていたわけですよ。で、サイトそのものを更新してない(技術的には.NET 2.0初期レベル)ので、VSTSに移行して、最初にデプロイしてからまったく更新していませんでした。

今回、ちょっと事情で二年ぶりにサイト移行しなくてはならなくなって、ビルド定義をcloneしたところ…エラーでまくり(笑)。

f:id:kkamegawa:20180402214434p:plain

上が新しいサイトにデプロイするためのビルド定義、下が二年少し前にビルド(とデプロイ)した時のビルド定義です。この時はまだリリース機能がなかったので、ビルド定義内でデプロイも書いています。

赤棒グラフが山盛り出ていることからわかる通り、再度デプロイできるようにするまでに結構時間がかかりました。

f:id:kkamegawa:20180402214436p:plain

2年前のビルド&デプロイのためのビルド定義がこちら。簡単ですね。VSでビルドして、テスト実行してそのままAzure Web Appにデプロイしています。しかもこのタスク、非推奨になってますw。動かしていないのがよくわかりますね。

f:id:kkamegawa:20180402214435p:plain

で、こちらがどうにかこうにかビルドできるようにしたビルド定義。非推奨タスクを残しているのは、ちょっと比較のためです。

  • NuGetリストアをVS内での実行が非推奨になったので、タスク追加
  • SonarQubeで静的解析するようにした(これは別の仮想マシンを使ってます)
  • テストが謎の失敗するようになったので、タスクを一時無効化
  • Azureデプロイタスクを結局やめ(リリース機能にします)。
  • artifactsをちゃんと保存するように
  • まだないですが、SQL Databaseのdacpacもデプロイ追加
  • copy & publishタスクがなくなったので、artifactsをstagingにコピーするタスクを追加

いや、当時はぎりぎりのスケジュールで(ってそれは今もなんですが)移行していたので、ほんとに適当にやっていたのですが、今見ると雑に作った&2年たつと変わったなぁ、と思わされます。ちなみにソースは一切変えていません。

クラウドサービスは本当に日進月歩なので、この手の機能はリリースしないまでも定期的にビルドなりしてパイプラインがちゃんと動くかどうか確認したいところです。

皆様も放置したビルドパイプラインありませんか?

Dell アンバサダープログラムのNew XPS 13がやってきた

はじめに

#このエントリーはDellアンバサダープログラムから提供された機材を使用しています。

dell-ambassador.com

DELLさんのアンバサダープログラムでNew XPS 13を一か月かしてくれるということで申し込んだら、あたってしまいました(^^)。期間は一か月(そののち返却)ということですが、割と好き勝手にできるし、DELLの最新鋭の機材を集中して触る機会なんてないので、ありがたく使わせてもらいます。

スペック比較など

私はSurface Book(初代)のCore i5/8GB RAMモデルを使っています。並べて撮った写真。

f:id:kkamegawa:20180325190323j:plain

Surface Bookは13インチ程度ですが、New XPSは超狭額縁ということもあって、かなり小さく感じます。さらに、Surface Bookはバッテリーをキーボード部分に持っていることもあって、結構大きいです。

重さもXPSは1.21kg、Bookは1.5kgとあまり違わないようで、かなり違います。大きさは小さいけど、キーボードピッチは十分あるので、あまり変わらない感じですね。もちろん日本語キーボードなので、普段が英語キーボードの私はかなり戸惑うのですが。

第八世代のCore i7プロセッサーなので、4コア8スレッドはいいですね。PhotoShipとか早くてよさそう。

4Kモニタ16GB/512GBストレージモデルが提供されているのですが、同じスペック買おうと思っても買えないですよね?(オンラインショップ)そういうのを貸してもらえるのはうれしいのですが、いざ買おうと思っても、買えないのは困ります。

(追記)
Twitterで買えるはず、と教えてもらいました。BTO直接だとわかりにくかったですが、最初にノートのトップページでスペック絞るところから始めると確かに買えます。ただ、うちにきている黒筐体はないようで、ローズゴールドしか出てきませんでした。黒がいいんだけどなー。

モニター

4Kモニタータッチモデルが来たのですが、さすがにきれいです。Bookもきれいだと思っていたけど、2年の進歩はすごいですね。小さい13インチなので、初期状態の画面拡大率は300%でした。これは大きいので、200%にしたのですが、200%だとすこーし小さいかなぁ。

Windowsセットアップ

新しいアカウントを作ってみました。

f:id:kkamegawa:20180325191946j:plain

New XPS 13は顔認証と指紋認証が使えるようですが、今回は顔認証を選んでみました。いろいろ言われている通り、キーボードとの接合部分にカメラがあるので、下から見上げられる感じでちょっと違和感がありますね。でも、認証に支障はないようで、Bookと同程度に高速にHelloで認証が行われます。

どうせならActive Directoryに入れようと思ったのですが、残念ながらHomeエディションだったので、無理でした(残念)。Hyper-Vも使えないので、16GBがちょっともったいないですね。

そのほかOffice 365, Visual Studioなどを入れているところですが、内蔵のKiller Wirelessアダプターがちょっと調子良くないのか、全然スピードでない…。これはIntelのWirelessアダプターがいいなぁ。選べるときは必ずIntelにしています。

USB-C

USB-Cが3つ端子として用意されていて、充電も使うので、事実上2つのみですね。とはいえ、右からも左からも充電できるのはストレスがなくていいですね。充電以外にも一本何かついていたようですが、とりあえず使わない予定。一度セッションやる予定があるのですが、さすがにそのためにUSB-CとHDMI変換ケーブル買うのはなぁ。

macもそうだけど、USB-Cにするとこの辺の再購入が大変です。

わからない現象

タッチパッドは高精度なものなので、ちゃんとスワイプでアプリやデスクトップを切り替えられるのは大変いいです。が、まだBookに勝てないなぁ。インストール中しばしば全く反応しなくなることがあって、往生しました。

一度スリープさせると復帰したけど、UACの暗転状態で何もキーが効かなくなって、ほんとに焦りました。この辺はまだ成熟していないんでしょうか。ファーム更新もあったようだけど。

(追記)
その後、インストール中にタッチパッド操作してみたのですが、やはり負荷がかかるようなシーンではタッチパッドがついてこなくなります。この辺はThinkPadやSurface Bookに遠く及んでいません。改良に期待します。

左/右クリックも位置が決まっているようで、ちょいちょいストレスです。Bookの場合、大体左にあれば左クリック(Macbook Proも同じ)でそれが染みついているので、つらい。

総合的なまとめ

WiFiがちょっと遅いように見えるのと、上に書いた謎の現象が出なくなるのであれば、いいマシンだと思います。

軽いし、dGPUが必要ない方であれば、ファーストチョイスとして充分お勧めできると思います(ローズゴールド以外の16GB/512GBストレージが買えるのであれば)。対抗するのはThinkPad X1 CarbonかT480sでしょうかね。

デバッグに便利な拡張機能RevDeBug

はじめに

RevDebugという会社から「RevDebugってツールあるんだけど」と案内が来たので、試しに使ってみました。ProfilingTime Machineデバッグ情報の共有とかはチーム開発するときに便利そうです。

.NET Core 2.0以降や.NET Framework 4.5以降のサポートだそうです。既知の問題もちょっとあるのでこれに該当する人は少し待ちましょう。

Requirements for RevDeBug

  • いくつかのC# / VB.NET 15.0構文をサポートしていない
  • ASP.NET Core/ASP.NET MVCのUnhandled exceptionsが記録されない
  • ASP.NET Coreのhttpリクエストが記録されない
  • References with aliases other than global are not supported.
  • アンチウィルスのAvastを使っている場合、デバッグが記録されないので、ホワイトリストに入れて

Value Prompts

Value Prompts

これは無償版でも使える機能ですね。いちいちローカルやウォッチウィンドウを開かなくても変数の上に現在の値を表示してくれます。OzCodeにも同じような機能があります。

Monitoring

Monitoring

すべての例外を一か所のウィンドウで確認する機能ですね。メニューのReDebugからExceptions/Searchを表示します。

Profiling

Profiling

  • 実行範囲の上位10メソッドを円グラフで表示
  • もっとも呼び出されている上位5メソッドを棒グラフで表示
  • エディタの行番号の隣に処理時間に応じて色付けされる
  • RevDeBugメニューのPerformanceをクリックすると、呼び出し回数、処理時間をまとめて表示するウィンドウが表示

結構便利そうですね。

Time Machine

Time Machine

IntelliTraceをもっと便利にしたTime Machineといえばいいんでしょうか。矢印記号をクリックすれば前後のステップに移動できます。State Dataを使って、現在ステップの状態も取れます。マルチスレッドなどでは便利そうです。

Call StackScope Stackでは任意の呼び出し元に移動できます。Scope StackはVisual Studioにない機能のはずなので、(やめたほうがいいけど)多段呼び出しになっているような場合はうれしいですね。

Session Recording

Session Recording

以前やったデバッグ、あれどうだったっけ?と思うことはないでしょうか?Session Recordingを使えば、デバッグの記録ができます。IntelliTraceでも同じような感じですね。まだ深く使ってないので、どちらが、とはいえないですが、これもやはり高速なディスク上に保存するといいと思います。これは単独で使うものではなく、どちらかといえば、次の共有機能とセットでしょう。

記録ファイルは%userprofile%の下、具体的には以下の場所に入っています。

%userprofile%\documents\RevDeBug\SolutionName\Recordings

Share your recordings and save them for later use by others

Share your recordings and save them for later use by others

最近Visual Studio Codeでは複数の端末間で同じコードのデバッグができるようになりましたが、時差があるような場所にいる人にデバッグを頼むとか、オフラインの場所ではそれも難しいですね。そんなとき、このSession Recordingで記録した情報を送れば環境によらず同じデバッグができます。特にマルチスレッド関係のデバッグは端末によっておきたり起きなかったりが発生するため、大変有用だと思います。

リモート環境でのデバッグ情報も保存して共有できるので、特にクラウド環境とかのデバッグ情報を共有するのは便利そうです。

そのほか

Kubernetisのコンテナーデバッグ、AzureやAWSでの.NET Coreアプリデバッグ、AWS Lambdaのデバッグなどもサポートしているようです。Lambdaで.NET Core使っている人はどうでしょう?

チュートリアル用のプロジェクトも公開されています。

VSTS / TFSのビルドエージェントのトラブル調査

VSTSではプライベートエージェント、TFSでは必ずビルドエージェントを用意します。ビルドやリリースのログでビルド中の状態はわかりますが、failedになって、コンソールのログで調べられない場合はどうすればいいでしょうか?

f:id:kkamegawa:20180319060923p:plain

基本エージェントをインストールしたフォルダの_diagフォルダにWorkerで始まるファイルがあります。ビルドに失敗した場合、まずはこのWorkerファイルを見てみましょう。

例外が出ていたらそこに何か載っています。

これだけではなく、失敗したビルドの詳細なログを出したい場合、Queue new build with diagnostics logsを選択します。

f:id:kkamegawa:20180319060922p:plain

すると、ビルドエージェントの環境変数system.debugとsystem.diagnosticsが自動的にtrueで設定されてビルドキューに入ります。

f:id:kkamegawa:20180319060924p:plain

通常よりも詳細なログが出るので、ビルドエージェントの内部動作や、独自に作ったビルドタスクのデバッグにも使えます。トラブルのときには設定してみてください。

注:TFSにはまだこの機能はないようですが、ビルド/リリース時の環境変数を指定すればいいだけなので、明示的に指定してみてください。

これらの環境変数はtrueに指定しなくても大体必要十分なログは出ているはずですが、どうしてもというときは試してみてください。