kkamegawa's weblog

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

プログラマ的にWindows 10 Anniversary Updateのうれしいところ

10個あるかな、と思ったのですが、今のところ思いついたものをあげてみました。うーん、まだあるはずなんですが。とりあえず、つらつらと書いてみます。Inkとかは純粋にプログラマ向けとしてどうかなーと思って、あえて入れていません(ぉ)。

他にもお気に入りの機能があれば紹介してください。

Docker互換のコンテナ

言わずと知れたこれですね。Docker for Windowsを使えば現在でも使えます。

docs.docker.com

ただ、こちらはHyper-VでLinux仮想マシン(初期で2GB )が動くので、少しメモリがきつい。なによりもWindowsで動くコンテナであればWindowsネイティブの機能を使うことになります。

msdn.microsoft.com

コマンドはdockerコマンドで共通のようです。PowerShellコマンドレットも用意されるようですが、基本はdockerコマンドで、詳細な情報を見たいときはPowerShellという住み分けになるようです。

MAX_PATHが260バイトの制限から解き放たれる

実は今までもファイル名のprefixに\\?\とつけて、UnicodeでコンパイルしたWin32アプリケーションであれば、64KBまでのパスを使えることができました。しかし、ExplorerがWindows 95時代からのANSIモードで動いていたり、世の中MAX_PATHが260バイトという決め打ちで動いていたり、.NET FrameworkもWindows 95とかを引きずっていた都合上、最大パスは260バイトまで、となっていました。

Anniversary Update以降、グループポリシーでEnable NTFS long pathsを有効に設定すれば、Win32アプリケーションでも有効になります。もちろん、MAX_PATHが260と決め打ちしているような大多数(99.9999%くらい?)のアプリケーションに長いパスを与えると即死、もしくはバッファオーバーフロー起こすので、十分評価してからにしましょう。

betanews.com

Desktop ConverterでWin32/.NETアプリケーションの簡単展開

既存の.NETアプリケーションやWin32アプリケーションにUWPのガワだけかぶせて、ストアでより簡単に配信ができるようになるというDesktop Converterです。間違えないで欲しいのは、あくまでも「ストアに公開できるようになる」というだけで、「UWP化される(mobileやXBoxで動くようになる)わけではありません

ただし、何でもかんでもコンバートできるわけではなく、制限があります。特にVisual C++ランタイムと.NET Frameworkが限られるので、古いVCランタイムを使っているアプリケーションの場合、一度移行してから、ということもあるので、注意してください。

Convert your desktop application to a Universal Windows Platform (UWP) app

UACで特権昇格が必要なアプリや、他のアプリと連携する(AppDataに書き込む)ようなアプリがダメ、というのはややきついものの、大多数のアプリケーションでは問題無いでしょう。ただし、その前にインストーラーでインストールされるようなアプリケーションでなくてはなりませんが。

インストーラーがないようなアプリの場合、コンテナ使うしかないですかね。

ネットワークが高速化

ネットワークは門外漢ですが、Linuxなどではすでに対応している新しいRFCもしくはドラフトの規格に対応しているそうです。TFOとかは素人目に見ても頻繁にopen/closeするようなサーバにアクセスする場合の高速化が見込まれると思われます。

blogs.technet.microsoft.com

PowerShell (WMF 5.1)

WMF 5.1 リリース ノート (プレビュー)

Bashに持って行かれた感がありますが、Windows における自動化、スクリプトでの運用管理を行いたい場合はWMF(PowerShell)なのは変わりません。いろいろ聞かれましたが、Bashは(今のところ)Windows 10を開発者モードに変更しないと使用できません。つまり、Bashは管理者がシステム管理のために使うのではなく、あくまでも開発者向けのツールセットの一部となっています。

PowerShellはWindowsクライアントおよびサーバの管理、自動化のためのものです。

PowerShell 5.0 にあったバグや、高速化、PowerShell DSCをはじめとした機能強化が盛りだくさんです。

.NET Framework 4.6.2

先ほどWin32アプリケーション向けの長いファイル名を扱うようにする設定を紹介しましたが、.NETの場合はapplication manifestに指定することにより、プロセス単位で制御することが可能です。

<?xml version="1.0" encoding="utf-8" ?>  
 <configuration>
  <runtime>
    <AppContextSwitchOverrides value="Switch.System.IO.UseLegacyPathHandling=false;Switch.System.IO.BlockLongPaths=false" />
  </runtime>
</configuration>

.NET Coreおよび、.NET Framework 4.6.2がインストールされたWindows 10 Anniversary Update(1607)で有効だそうです。

blogs.msdn.microsoft.com

長いファイル名の他にもモニタごとのDPIを認識するようになったとか、新しい暗号化に対応したとか、着実な強化が行われています。

blogs.msdn.microsoft.com

Bash on Ubuntu on WindowsでツールセットがLinux共通に

//Build 2016での話題は間違いなくこれだったでしょうね。cygwinとかもまぁいいのですが、なんとなくもどかしさを感じていました。PowerShellのすべてがオブジェクトになるというのは.NETなどの相互運用で大変便利です。

しかし、他のプラットフォームの方に使ってもらおうとする場合、そのへんが足かせにもなっていました。移行のためにコマンドレットにエイリアスを登録されているものもある(lsやwgetとか)のですが、結局オプションが違うから使わないんですよね。

あと、長いファイル名の扱いも、UnicodeアプリであったとしてもWindowsだから260バイト固定とかになっているものも少なからずあり、困っていました。node.jsもしばらく困ったなぁ…。

しかしそんな時代もさようなら。パスさえ少し考慮すればUbuntuで動いているものがまぁ大体動くようです。もちろんまだ実装されていないシステムコールや実装されないであろうシステムコールもありますが、コマンドラインの開発用ツールセットは割りと動くようですね。

blogs.msdn.microsoft.com

詳細な仕組みなどは上記のブログで。もしも困る場合はGitHubにissueをたててみればいいようです。

github.com

UWPアプリのバックグラウンド実行サポート

通知ではなく、バックグラウンドで実行したいような場合よさそう?

blogs.windows.com

VSTSの新ビルドで単体テスト結果を確認する

ASP.NET MVC(.NET Framework 4.6)のプロジェクトをVisual Studio Team Servicesでビルドしたいとします。作成したデフォルトのビルド定義には単体テストを実行するタスクがあり、有効にしています。

f:id:kkamegawa:20160316220108p:plain

しかし、ビルドしても、このようにテスト結果が表示されません。もちろんローカルでは表示されます。これはどういうことでしょうか?

f:id:kkamegawa:20160316220110p:plain

原因はvstestに指定するターゲットフレームワークの指定がFramework4(.NET 4)になっているからじゃないかな、と思います。ビルドタスク内のTestのAdvanced Execution OptionsのOther Console Optionsに"/UseVsixExtensions:false /Framework:framework45"と指定してください。

f:id:kkamegawa:20160316220109p:plain

こんな感じ。/UseVsixExtensionsはVSIXの拡張機能を使用しない、という指定です。コンソールで実行するテストのときあっても意味がないので無効化しています。

f:id:kkamegawa:20160316220111p:plain

ビルド後、単体テスト結果やカバレッジ結果が正しく表示されるようになりました。この指定はRun Settings Fileに指定したテスト構成ファイルでもできるはずなのですが、リポジトリに追加するのも面倒なので、実行時引数に指定しています。

VSTest.Console.exe のコマンド ライン オプション

VSTSの新ビルドにゲートチェックインが追加

先日のVSTSの更新で新ビルドシステムでもやっとTFVCのゲートチェックインが復活しました。やってみましょう。

f:id:kkamegawa:20160226065549p:plain

ビルド定義のTriggersにGated Check-inがあるので、これを有効にします。フォルダ配下で特定の範囲にチェックインが行われた場合、対象にすることができます。

f:id:kkamegawa:20160226065545p:plain

ゲートチェックインが有効になると、ビルドを開始するとこのようにメッセージが出るようになります。以前と同じですね。

f:id:kkamegawa:20160226065548p:plain

ビルドが失敗するとチェックインが拒否されます。

f:id:kkamegawa:20160226065550p:plain

こんな風にビルド結果も失敗したと出てきます。余談ですが、ここ数日Test Resultsがアップロードできなくて、こんな風にテスト結果が可視化されず、すごく悩んでました…たぶんVSTS側の問題だったんでしょう。

f:id:kkamegawa:20160226065546p:plain

しかし、ビルド履歴はSucessのままです。これは直近のチェックインが成功したビルドステータスをもとに表示しているためです。

f:id:kkamegawa:20160226065547p:plain

チェックイン履歴を見ても、今日のチェックインは行われておりません。これでTFVCでも安心して実行できますね!

Visual Studioのテスト、リファクタリングについて喋ってきました

TFSUGのイベントでVisual Studio Online,Team Foundation Serverが提供するテストおよび、Visual Studioが提供しているリファクタリング機能について喋ってきました。リファクタリング、テストに加えて概要で3つになります。概要は前回からの差分でよかったんですが、2つ資料作るのしんどい…さらに、人生で一日三コマもしゃべるのは初体験で偉い疲れました…。ブログかいてなかった理由は殆どこの準備に忙殺されていたからです。

セッション資料はいかにまとめてコレクションにしています。最初の概要はまぁどちらでもいいです。今回はUpdate1で追加される機能を差分にしています。50分じゃ無理なので、前回からいくつか端折っています。

テスト機能は結構需要が高いようですが、使いこなしとなるとかなり難しい。SCVMMと絡めないまでもWinRMを使っての自動テストとなるとハードル高くなります。個人的にはまずこんなところを目指さなくても、とりあえずスプリント(それが無理ならリリース)単位でやるべき要件をまとめてテストケースを管理し、要件と関連付けることでどんなテストをどのくらい消化したか、というところから始めるだけでまずは十分というか、投資対効果として結構ペイする思います。

さすがにExcelなり、他のツールでもいいですが、テストケースを作っていないところはないでしょうし、Excelでスクリーンショットをとってエビデンス貼り付けてメールを送っているところも山盛りあるでしょう。

メールだと埋もれたり、対応をまたまとめたりといったことがほんとに手間です。そういう開発に直接関係ないようなところはどんどん任せてしまいましょう。というか、任せすぎてしまうとSIerのやることがなくなるから、やらないんじゃないかと勘ぐってしまうくらいですw。

今回はメインで使っているThinkPadの調子が絶不調に伴い、Macでやろうとしたら特定の場所に立つとプロジェクターがブラックアウトするというトラブルもあって偉いご迷惑をお掛けしました。また、時間配分もぐだぐだですいません(__)。Test Managerはいろいろデキる子なので(大変ですけど)、これをきっかけにしてでも使ってもらえればと思います。

かけるようなことは今後書いてみましょうかね…。