dotnet new用のテンプレートを使う、作る
この記事はF# Advent Calendar 2017の6日目の記事です。 F#固有の話ではないですが、知っていると少し捗るかもしれない話をします。
dotnet new
コマンドでnugetに公開されたテンプレートを使う
dotnet new
は.NET Core SDKでテンプレートを用いてプロジェクトを作成するコマンドです。
https://docs.microsoft.com/ja-jp/dotnet/core/tools/dotnet-new?tabs=netcore2x
リポジトリはこちら:
https://github.com/dotnet/templating
標準でいくつかのテンプレートが搭載されていますが、dotnet new install
コマンドを使えばnugetに公開されているテンプレートをインストールできます。
テンプレートを探すには下記サイトが便利です(公式のwikiで紹介されていたサイト)。
たとえば、私を含む数名(?)で開発しているPersimmonのテンプレートはこんな感じでヒットします。
http://dotnetnew.azurewebsites.net/template/Persimmon.Templates/Persimmon.FSharp
テンプレートを作る
テンプレートの構成や設定は公式のwikiをみるのが一番です。
https://github.com/dotnet/templating/wiki/%22Runnable-Project%22-Templates
プロジェクトファイルは言語にあわせて用意します。
F#の場合は.fsproj
ですね(と申し訳程度のF#要素を挟んでおく)。
設定のうちshortName
は実際にdotnet new
コマンドで使うので名前を吟味したほうが良いでしょう。
あとは、groupIdentity
が同一でtags
のlanguage
が異なるテンプレートが登録されていると-lang
オプションで言語選択できるようになります。
あと、複数言語のテンプレートを用意したいプロジェクト向けとして、1つのnugetパッケージには複数のテンプレートをほうり込めます。 これに関しては具体例をみたほうが早いので、nunitのリポジトリをとりあげておきます。
https://github.com/nunit/dotnet-new-nunit
テンプレートをnugetで公開する
いつものごとくnuspecを書くわけですが、テンプレート用のパッケージであることを明示するためにmetadata
タグ下にpackageTypes
を追加します。
<?xml version="1.0" encoding="utf-8"?> <package xmlns="http://schemas.microsoft.com/packaging/2010/07/nuspec.xsd"> <metadata> ... <packageTypes> <packageType name="Template" /> </packageTypes> </metadata> <files> <file src="..\templates\**" target="" /> </files> </package>
ファイルはテンプレートを置いているディレクトリ下のコードを全部取り込んでも問題ないことがほとんどだと思います。
おわりに
CLIで完結するのでテンプレートを作るハードルがそこそこ低いです。 publicなものに限らず社内NuGetに放り込んで運用することも可能…なはずなので、覚えておいて損はないと思います。