銀の光と碧い空

クラウドなインフラとC#なアプリ開発の狭間にいるエンジニアの日々

MVP Summit のハッカソンで.NET Core CLIの拡張を作りました

MVP Global Summit 2016に参加して来たのですが、今年は木曜に行われるハッカソンまで参加してきました。ツアーで行くと木曜の朝出発するスケジュールなのでずっと参加できなあったのですが、今年は自分で予約したので参加できました。10個くらいのテーマがあって、その中から好きなものを選んでハッカソンする形式で、だれがどんなものを作ったかがブログにまとまっています。

blogs.msdn.microsoft.com

集合写真は最後に取ったらしく、日のあるうちにその日の宿のシアトル市内まで帰りたっかた私はちょっと早く帰ったので写っていません。ハッカソンは16時過ぎまであったのですが、16時にMicrosoft本社の構内にあるバス停から路線バスに乗って1時間弱でシアトル市内に着きます。日の入りが16時半ごろなのでつく頃にはかなり暗くなっていました*1

私が選んだテーマは.NET Core CLIの拡張だったのですが、これを選んだのは私だけのようで、ボッチハッカソンになりました。ほかのテーマでは、やはり人気はXamarinでした。作成したのは、.NET Core CLIを拡張した"dotnet add" コマンドです。使い方はリンク先のGIF画像でどうぞ。csproj対応の.NET Core 1.0 preview 3以降のCLIが必要です。

github.com

Visual Studioで開発していると気づきづらいのですが、Visual Studio Codeで開発しているとクラスファイル一つ追加するにも空ファイルを追加してusingやらnamespaceやらクラス宣言やらを手入力する必要があります。yo generator aspnet を使えばいいのですが、わざわざnodejsセットアップするのもねえということで作ってみました。とはいえ、CLI拡張のPoC的な意味合いが強く、本来であればオレオレ拡張というよりSDK本家に組み込んでほしい機能です。

github.com

.NET Core CLIの拡張そのものについては、このリポジトリのフォーク元のリポジトリを見ると解説してあります。

github.com

こちらのリポジトリではMSBuildのタスクを拡張して、CLIから呼べるようにする拡張のサンプルもあります。注意点としては、CLI拡張はNuGetパッケージとして作成し、参照する側のプロジェクトでそのNuGetパッケージを追加するのですが、用意されたスクリプトだとビルドしなおしても古いバージョンがキャッシュに参照されたまま更新されないので、キャッシュを消す必要があります。

rm ./nupkgs/*
rm $env:USERPROFILE\".nuget\packages\dotnet-add"

また作っていてどうすればいいかまだ分かっていないこととしては、

  • 拡張そのものがNuGetライブラリを参照する場合の追加の仕方
  • Workspace情報の参照の仕方(add拡張の例でいえば、namespaceをプロジェクトのdefaultNamespace+相対フォルダで自動生成したいが、defaultNamespaceをどうやって取得するか)

あたりになります。

余談ですが、お昼ごはんは「ハッカソンらしく、Unhealthy なピザだぜー(意訳)*2」ということでピザだったのですが、なんとピザ窯が敷地の外にやってきて焼きたてを食べることができました。写真を取り忘れたので、ほかの方のツイートをはっておきます。

*1:本社のあるレドモンド郊外からシアトル市内まで$2.75。シアトル市内から空港まではLinkで$3

*2:別に他のものがHealthyというわけでもない