kkamegawa's weblog

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

2018年振り返り

今年もGoogle Analyticsを使ったランキング生成でTOP10を出してみます。

  1. Windows 10英語版にオフラインで言語パックを追加する
  2. Word 2016の游明朝Light 12ptで行間が不正に広い(修正されました)
  3. Visual Studio Team Servicesに接続して開発する(6日目)
  4. Windows Server 2012のWSUSをPowerShellで管理する。
  5. Windows 10のbash on Windowsを試す
  6. Visual Studio Team Servicesを会社で使う場合の考慮事項
  7. bitnami Redmine(Windows版)のメール送信設定ではまるところ
  8. Visual Studio Team Servicesを構築する(1日目)
  9. Windows SDKアンインストールは余裕を持って
  10. Windows 10に.NET Framework 3.5を追加する

去年とあまり変わらない(笑)。VSTSあらため、Azure DevOpsを会社で使う場合の考慮事項とか、構築とか、接続するところとかはやはり人気がありますね。最初が詰まるとどうしようもないですし。

TFS 2017で出した、2018本は85%くらい準備はできているのですが、ちょいちょい調整していて、まだ出してないです…冬休みに進捗を少しでも出したいなと。

年明け早々、Azure DevOpsで二回お話しします。どちらも内容は同じになる予定(とはいえその場の雰囲気で多少変わります)なので、無理してどちらにも参加していただく必要はありません。

jazug.connpass.com

jazug.connpass.com

Azure DevOpsのセキュリティ難しいとかわからないとか言われることが多いので、その辺をちょっとお話ししようと思います。

リリースノートの翻訳がランキングに入ってないのが若干不思議なのですが、中身がGistだからかなぁ…。

今年はAdvent Calendarをひとりで書くというチャレンジはやめたのですが、予想以上に多くの方が埋めてくれてうれしかったです。割と使われているんだなあという感じでした。また来年もやる予定です。

qiita.com

コミュニティ活動はぼちぼちできる範囲で続けていきますので、イベントなどのお声がけはお気軽に。

ではまた来年もよろしくお願いします!

Lenovo ThinkPad X1 Extreme買った

PC乗り換えの機運

初代Surface BookがCore i5(Skylake)なのはともかく、メモリ8GB/ストレージ256GBがいい加減しんどくなってきたので、乗り換えることにしました。選定にあたってはいろいろ考えました。

  • 最低RAM 16GB乗せられる
  • フルHD以上(やっぱHiDPIみちゃうとねー)。3:2にはこだわらない
  • 512GB以上のストレージ
  • 可能ならば自分でいろいろいじれる
  • dGPUはできれば、というくらい。
  • 13でも15インチでも余りこだわりはない
  • 軽さはあまり重要視しない(この時Surface Goを別途譲ってもらう話がついていたので)
  • 英語キーボード必須

発注

ということで、消去法でLenovo X1 Extremeとなりました。

  • Core i7 8750H(6 Core/12 Threads)
  • 32GB RAM
  • 512GB SSD
  • Windows 10 Pro
  • Lenovo ペン
  • スマートカードリーダー
  • 4K液晶

実は梅田ヨドバシのLenovoコーナーでいろいろ教えてもらって、持ってみてこれならいけそうということでX1 Extremeにしました。ありがとうございます。

私の場合はたまたま安い時期でしたが、たまに通常セールよりも安いセールを選ぶといい感じの値段になりますが、店頭でもそん色ないくらいに値引きやおまけがあるようです。Webショッピングが不安だという方は店頭で相談しながらカスタマイズモデルを買うのもいいでしょう。

Lenovoは納品まで割と長めに見積もる(特に米沢モデルではない場合)ようで、店でもWebでも3-4週間といわれていましたが、2週間くらいで届きました。

USB-C関係のケーブルはまだ買っていません(HDMI端子あるからいいかな…)。miniDisplayポートはもう終わってしまったようで、以前使っていたmini DisplayPort関係のケーブルが軒並み使えなくなってしまいました。

メモリは今Amazonで見てもさほど変わらないし(+1-2000円かどうかというくらい)、BTOで積んでもらいました。

買うときの謎

f:id:kkamegawa:20181230100434p:plain

選択肢の注意点でこんなものが出ているのですが、マニュアル見ても、Lenovoコーナーの人に聞いても、なぜこの理由が出ているのかさっぱりわかりません。ペンを充電するUSB-Cのケーブルは比較的充分な長さがあり、さらにはHDMIコネクタがあるので、干渉するとも思えないのです。とりあえず買わなかったのですが、そのうち注文しようかなと思っています。

到着

f:id:kkamegawa:20181227114201j:plain

外箱。意外と軽いです。

f:id:kkamegawa:20181228064518j:plain

一緒に購入したペンと、電源。売り場で実際に見せてもらっていましたが、思ったよりは軽いですね。ただ、これくらいあるならSurface BookのようにUSB(USB-Cでもいい)の口を用意してもらってもいいんじゃないかなと思います。

f:id:kkamegawa:20181228065206j:plain

広げたところ。Bookが13インチだったので、ほぼ一回り大きい。けど、底面積がでかいので、軽く感じます。これが13インチだったらかなり重く感じたと思います。

感想

いつものThinkPadですね。ThinkPadは都合3台目(X61Tablet/T440p/X1 Extreme)ですが、T440pのタッチパッドがちょっと変わって使いづらくなったのに気づいて、改めてからはいい感じです。キーボードもいつも通り。

SSDつけるとき、裏蓋外そうとしたのですが、T440pと違って、結構固くて苦労しました。コツをつかんでしまえばなんて来ないのですが。ねじを緩めても外れないのは親切でいいですね。ただ、SSDのねじが小さい割に硬くて結局NVMe0につないでいるSSDを外すのはあきらめました。シンボリックリンクや、入れられるものは1TBのDドライブに入れてしのごうと思います。

起動順を変えた後でリカバリーしてしまい、CドライブでNVMe0だけど、後ろについている、という変な状態になっていますが、Windowsはまぁいい感じで動いてくれているので、気にしないことにします。

ちなみにCドライブとしてプリインストールされているSSDはIntel製のものでした。

CPU使いだすと、ファンは結構いい勢いでまわります。気になる人は気になるでしょう。CPUのスペックは2.2GHzですが、タスクマネージャーで見る限り、Turbo Boostのおかげで4GHzくらいまでよく行ってます。

後はマイナー機種の定めか、液晶保護フィルムないのが痛いかなー。まぁ、Bookもなしで使ってたし、気にしないことにします。

Windows Helloは指紋と顔両方やってます。慣れるともうパスワード打てないですね。Bookではたまに顔認証失敗していましたが、ExtremeではBookよりも認証が早くなっているような気がします。

HP製のSSD

SSDは1TBまで選べますが、結構高かったので、前から気になっていたHP製のSSDを買いました。

HP 1TB SSD M.2 EX920シリーズ NVMe 1.3/3D TLC/DRAMキャッシュ搭載/5年保証

ただ、これ失敗したなと思ったのは引っ越し用のツールや、セキュアイレースのためのツールが今のところないんですね。日本ではPrincetonさんが扱っていますが、ここにも出ていないようです。将来的に人に譲るとか考えている人は今のところ買わないほうがいいでしょう。

トラブル

リカバリーメディア作って、一度リカバリーしてみると結構しんどい。また、リカバリ後に起動時にPWMTR64V.DLLのロードに失敗しましたというエラーが出ますが、この方法では治らず、探しまくって、結局以下の方法で直りました。

  • デバイスマネージャーでシステムデバイスにあるLenovo Power Managerを選択
  • 右クリックで「ドライバー」タブにある「ドライバーの更新」
  • 「コンピューターを参照してドライバーソフトウェアを検索」
  • 「コンピューター上の利用可能なドライバーの一覧から選択します」
  • Lenovo Power Managerを選択して「次へ」

これで再起動後、エラーは出なくなるはずです。

セットアップ

そんなに入れるものはないのですが、

  • Visual Studio 2017/Code
  • Adobe Creative Cloud
  • Office 365 ProPlus
  • Git/WinSCP/PowerShell関係

リカバリーメディアで復元すると、1803の5月状態になります。出荷時はIntelドライバーの問題で1809がブロックされていましたが、各種ドライバーを更新すると1809のインストールが可能になります。

Lenovo devices tested for Windows 10 version 1809 (October 2018) - JP

性能

6core 12Threadsはどのくらいかと思って、手持ちの一番大きいC++のプロジェクトでビルドしてみると、デスクトップのSkylake(Core i7-6700)/16GB RAM(ソースはSATA SSD上)で一緒によーいどん!でビルドすると、デスクトップは2分40秒くらい、X1 Extreamは2分20秒くらいと、約20秒くらいX1 Extream のほうが早く終わりました。参考程度ですが、早いですね。

これでもう少しだけ調整したら、Bookを売却する予定です。これでまた3年くらいは戦えそうです。

Azure DevOps一年の振り返り

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

qiita.com

はじめに

今年はまだ少しありますが、Azure DevOpsの一年で印象深い出来事や機能強化を振り返ってみようと思います。

ブランド変更

今年はなんといってもこの話でしょうか。DevOpsという時流に乗ったキーワードをブランド名にしてしまうことはいろいろな問題もありますが、結果的には今まで知らなかった人たちにもリーチできて、トータルではよかったのかなとは思います。Azure DevOps Projectと区別しづらいという、錯覚しやすいのはどうかなとは思います。

東京で開催するローンチイベントは2回とも満員御礼、大阪でも同様で、今までのTFSUG(Team Foundation Server Users Group)でやっても、きても30人くらいが精いっぱいだったのですが、ブランド変更は大きかったんだなぁとは思います。1/19は私も東京でしゃべるので、よろしくお願いします。

jazug.connpass.com

jazug.connpass.com

現在の最大の問題は、略称がいまいち決めづらいことだと思います(そこか)。英語圏ではAzDev(Azureの略称がAzとかいわれる)などをみかけます。さすがにADOは英語圏でも冗談半分の略称っぽい。

UIの刷新

水平方向から垂直方向のナビゲーション方向へドラスティックに変わりました。中身も日々変わっていっており、「あれ、こうだっけ?」って感じです。クラウドサービスの宿命ではありますが、UIに依存するようなコンテンツが作りづらいのは全世界共通の悩みのようです。

自分は割と慣れてしまいましたが、それでもまだ「どこだっけ?」と探すこともあります。とくにAzure BoardsでバックログごとのタスクをカンバンにするUI表示するときは少し手間がかかる感じです。

以前のUIはかなり遅かったのですが、新しいUIになって応答は良くなった気がします。

UIといえば、Azure Tests配下はほとんど変わっていませんが、これから少し手が入ってほしい気がします。

GitHubとの連携

6月にGitHubを買収してからより統合の方向に進んでいっていますね。ぱっと思いつくだけでもいくつかあります。

  • GitHub/Azure DevOpsのOSS向け10並列無制限ビルドの提供
  • Azure Boardsとの連携
  • GitHubのPull Request連携強化
  • GitHubのReleaseタスク公式提供

GitHubのCEOになったNat氏がRedditで言ってましたが、そのうちGitHubアカウントでAzure DevOpsサインアップ、もしくは招待できるようになってもおかしくないのかもしれません。今まではMSアカウントをどうやって作ってもらうのかが問題の1つでもありましたし、組織ユーザーには組織のメールアドレスでMSアカウントを作れなくなっていますし。

YAMLビルド定義の提供開始

私自身はまだあんまり使ってないのですが、競合のCIサービスと同様にYAMLファイルでビルドパイプラインの定義ができるようになったのも大きいですね。それまではビルド定義の編集にwork itemを関連付けることができなくて、困っていました。個人的にはビルド定義変えるタスクとかも用意して、作業として管理したいのです。フィードバックしたのですが、意見はまっぷたつという感じでした。

YAMLになればコミットで履歴が取れるようになるので、便利ですね。自分がやってなかった理由の1つはIntelliSenseの支援がなかったことですが、VS Codeの拡張機能、Azure DevOpsのエディターでもIntelliSenseが効くようになったので、ぼちぼち使えるかなぁとは思います。

REST API 5.0

今まで .NETベースのオブジェクトモデルでのAPIが提供されていましたが、クライアントにアセンブリが必要だとか、.NET Standard 準拠じゃないから .NET Coreはどうするのみたいな話があって、いまいち使いづらいものでした。ツール作ったことありますが、どうもわやくちゃになってしまってまとまりづらくて、苦労しました。

今はREST APIの拡充とともにPythonベースのAzure-CLIにも機能が増えて、ぼちぼち使えるようになってます。まだ全機能使えるようではないみたいですが、自分がやりたいことはたぶんできそうという感じです。

Git機能の拡大

三年くらい前、Gitの投資が加速し始めたころは「TFVCはまだまだ投資続ける」といっていました。さすがにもうほとんどメンテナンスでしょうかね。巨大なソフトでGitレポジトリを複数にわたって構築していると、レポジトリ追いかけるの大変になっていくので、慣れてないうちはTFVCでもいいのかなとは思います。

単一レポジトリだと大変だ…というときにはVFS for Git使う感じでしょうかね。私はまだ使ってないんですが、docs.microsoft.comのPR出すドキュメントをオンラインで書くのはそろそろつらくなってきたので、検討してみようかと思っているところです。

機能単位でフォルダーを切っていれば部分ごとにチェックアウトできるのはTFVCの大きな利点なのですが、慣れてない人はそもそもきれいに切れないって問題もあるので、悩ましいですね…。

GitHubもAzure DevOpsも両方そこそこ使いますが、GitHubさすがに先行しているだけあって、いろいろよくできてると思います。

Azure Boardsの強化とサービス化

Azure Boardsになる前からですが、複数のチームになると、機能をいつ、どのチームがなんの機能をリリースするという情報を視覚化するのは難しい話でした。Boardsの拡張機能にあるDelivery Plansはそういうチームにお薦めしています。

後はクエリですね。結構高度なクエリが書けるので、チームごとの共通クエリ作っておけばみんなが助かると思います。

GitHubのラベルは非常に使いやすいですね。ピンとこないラベルを思い付きで作って後悔するなんてことが起きないように…Azure DevOpsでもタグで同じようなことはできますが、Area PathとIteration Pathがあるので、割と間に合っている感じですが、うまく使うと便利です。

ライセンスの変更

主にビルド関係ですが、大きく変わりました。OSS向けの無制限10並列ビルド(macOS/Windows/Linuxいずれも)、プライベートリポジトリでは240分/月までだった無償枠が1800分/月までになったことなどでしょう。

240分は確かに競合と比べても少々微妙で、たとえば .NET CoreのASP.NET Coreテンプレートから作っただけのプログラムであっても、Microsoft hostedエージェントではビルドに3-4分程度かかってしまいました。これでは7-80回くらい試行しただけで終わってしまいそうです。

ただ、Unityで作るゲームやリッチコンテンツ向けには10GBというストレージ、2CPU(Windows/Linux)という制限は少々きついように思います。そして、そもそもWindows Serverなので、UnityやUWPのビルドはちょっと大変です。Self-hostedエージェント使えということなのかもしれないですが、別途課金すればより性能の高いサーバー使えるとか、ストレージ増やせるようにするとかあってもいいかなぁと思います。

後は、Dockerコンテナーのキャッシュですかね。MSが提供しているものの一部は格納済みになっているようですが、pull遅いですしね…それもあって、MSインフラのACRをデフォルトにするのかもしれないです。

Azure Artifactsの強化

Upstreamが増えましたね。Artifactsは使いはじめて、まわるようになるまではちょっと難しい機能の1つなのですとくにエンタープライズでは更新のスケジュール決めて、統制したいというニーズはあると思うので、自前でNuGet/maven/npm用のサーバーを用意しなくていいのは便利だと思います。

Azure PipelinsでビルドしたartifactsをArtifactsへアップロードできるようになったりとか、Debug Symbolサーバーも非常にうれしいけど、知られていない機能だと思います。

今までコンパイルしたデバッグシンボルをちゃんと管理しようとするのはほんとにつらいというか、大変だったので、Symbol Server機能はもっと知られてもいいと思うんですが、ほぼVisual Studioからしか使われない(はず)のが原因かなぁ。この変のプロトコルとかオープンになってたっけ?なったら実装しそうな人はいそうだと思います。

Goodby Reporting, welcome Analytics

VSTS時代にもPower BIを使った集計ができたのですが、正式にAnalyticsサービスができて、こちらに移行となりました。まだWork Item関係しかないのですが、Azure DevOps Server(旧TFS)のレポートにあったビルド、テスト、コードコミット関係のデータも取れるようになるといいなと思います。

オンプレミスのAzure DevOps Server(旧TFS)もそのうちSQL Reportingから移行するそうです。

フィードバック先の変更

今までuservoiceで機能要望、developer communityでバグ報告、という切り分けだったのですが、わかりづらいということで、developer communityに一本化されました。要望、バグなどはdeveloper communityにどうぞ。

英語で報告するのは…という場合、言ってくれればお手伝いします(そんなに得意なわけじゃないけど)。TwitterでたまにAzure DevOpsの日本語ツィートをエゴサーチしてるので、見かけたらいろいろコメントしてます。

大規模障害

Azure DevOpsサービスは機能が多いこともあって、時々サービス低下が起きているように見えると思います。今年の事後報告書が出るくらいの大規模障害は3回だったかな…と思ったら4回ですね。

Postmortem: Azure DevOps Service Outages in October 2018 – Service Blog – Azure DevOps

Postmortem: VSTS 4 September 2018 – Service Blog – Azure DevOps

Postmortem: Global VSTS availability issues – 22 May 2018 – Service Blog – Azure DevOps

うち、一度はAzure DNSが死んでしまって、間接的に影響を受けました。

2016 年 9 月 15 日に発生した DNS の問題について – Japan Azure IaaS Support Blog

データセンターの物理的な障害はいましばらくの間あきらめるとして、前半にあったソフトウェアの更新ミスによる大規模障害は今後減っていくとうれしいですね。

事後報告が出ないような特定のリージョンだけで発生した問題や、特定の機能の障害は今後信頼性を上げてほしいと思います。

来年はどうなるでしょうか。

Brian の引退

これは大多数の方には関係ないのですが、VSS(Visual Source Safe)の時代からTFS2018までずっと開発サーバーを統括していたBrian Harryが家庭の事情で一年のサバディカル休暇に入って、トップがNat氏になりました(その後GitHub CEOを兼任)。今年3月のGlobal Summitが最後のイベントだったようです。Nat氏は良く知られているように、OSSをベースとしたスタートアップを複数成功させて手腕には定評があります。

ちょっとずつですが、いろいろ変わってきてるなぁと思った一年でした。

来年はオンプレミス版のAzure DevOps Serverが正式版になり、みんなに垂直方向のUIが使えるようになります。できれば本ちゃんと出したい…。

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