VBでwebapiするdotnetテンプレートをnuget化する

dotnet テンプレートができたので、nuget からダウンロードできるようにする。

Visual Basic で ASP.NET MVC Core する | Moonmile Solutions Blog
http://www.moonmile.net/blog/archives/9206

これをテンプレート化して nuget.org に入れるのだが、以下が参考になる。

NuGet クイックスタート | nupkg をつくる – secretbase.log
http://cointoss.hatenablog.com/entry/2017/03/15/071926
dotnet new のカスタム テンプレートを作成する | Microsoft Docs
https://docs.microsoft.com/ja-jp/dotnet/core/tutorials/create-custom-template
NuGet パッケージの作成方法 | Microsoft Docs
https://docs.microsoft.com/ja-jp/nuget/create-packages/creating-a-package

dotnetテンプレートを作る

色々はまるのだが、以下なフォルダ構造になるらしい。

+ src
 + Moonmile.WebapiTemplate.VB
  - Moonmile.WebapiTemplate.VB.nuspec
  - nuget.exe
 + content
  + .template.config
   - template.json
  - Moonmile.WebapiTemplate.VB.vbproj
  - *.vb 群
  • テンプレートとなるフォルダは「content」になる。
  • テンプレートの設定ファイル(template.json)は、「.template.config」フォルダ内に置く。
  • nuget のための Moonmile.WebapiTemplate.VB.nuspec は、コンテンツのひとつ上になる。

Moonmile.WebapiTemplate.VB.vbproj なフォルダで、Console プロジェクトなどを作ってテンプレート化することになる。

.template.config/template.json

{
    "$schema": "http://json.schemastore.org/template",
    "author": "Tomoaki Masuda",
    "classifications": [ "Web", "WebAPI" ], 
    "name": "ASP.NET Core Web API via Visual Basic",
    "identity": "Moonmile.WebapiTemplate.VB",         
    "groupIdentity":"Moonmile.WebapiTemplate",
    "shortName": "webapivb",                   
    "tags": {
      "language": "VB",         
      "type":"project"
    },
    "sourceName": "Moonmile.WebapiTemplate.VB",
    "preferNameDirectory":true  
  }
  • identity は、nuget でしているするときの名前になるハズ
  • sourceName で *.vbproj と同じ名前にしておくと dotnet new -name で指定したときにプロジェクト名を同じにあわせてくれる

この状態で nuget pack すると、*.nupkg を作ってくれる。nuget pack はプロジェクトファイルを指定しなくても、*.nuspec と名前を合わせておけば大丈夫らしい。

<?xml version="1.0"?>
<package >
  <metadata>
    <id>Moonmile.WebapiTemplate.VB</id>
    <version>0.1.0</version>
    <title>WebAPI project by Visual Basic</title>
    <authors>Tomoaki Masuda</authors>
    <owners>Tomoaki Masuda</owners>
    <licenseUrl>https://github.com/moonmile/dotnet-template-webapi-vb</licenseUrl>
    <projectUrl>https://github.com/moonmile/dotnet-template-webapi-vb</projectUrl>
    <iconUrl>http://moonmile.net/</iconUrl>
    <requireLicenseAcceptance>false</requireLicenseAcceptance>
    <description>
      Creates Web API project by Visual Basic.
    </description>
    <releaseNotes>
      sample version.
    </releaseNotes>
    <copyright>Copyright moonmile solutions</copyright>
    <tags>WebAPI VB</tags>
    <packageTypes>
      <packageType name="Template" />
    </packageTypes>
      </metadata>
</package>

ローカルで *.ngpkg をインストールする

できあがった *.ngpkg ファイルを dotnet new コマンドでインストールする。

dotnet new -i Moonmile.WebapiTemplate.VB.0.1.0.nupkg

こんな風に、自前のテンプレートが追加されていれば ok

アンインストールは、ID である Moonmile.WebapiTemplate.VB を指定すればok.

dotnet new -u Moonmile.WebapiTemplate.VB

nuget にアップロードしたものを取り込む場合は、ID で大丈夫

dotnet new -i Moonmile.WebapiTemplate.VB

試しにプロジェクトを作ってみる

dotnet new webapivb -lang vb -n web

どうやらデフォルトがC#に固定らしく、-lang で言語を指定しないとだめっぽい。

プロジェクトができたら、vscode や visual studio でコーディングができる。

当然のことながら、さっくりと dotnet run ができる。

テンプレートコードとnuget

moonmile/dotnet-template-webapi-vb: dotnet new tamplete create WebAPI by Visual Basic.
https://github.com/moonmile/dotnet-template-webapi-vb
NuGet Gallery | Moonmile.WebapiTemplate.VB
https://www.nuget.org/packages/Moonmile.WebapiTemplate.VB

まあ、普通ならば web api は C# で作るだろうし、F# のような関数型だと C# との違いも明確になるのだけど VB だといまひとつ文法が冗長なだけで手を出しても意味がないような気がしないでもない。このあたりは、単純に好みの問題かな。VBA や VBScript とかうまく融合できればいいのだけど。

おまけ

実は、dotnet new コマンドで取り込むのはC#/VBなどのプロジェクトじゃなくてよい。ファイルを取り込むことができるので、Excel を読み込ませることもできる。試しに Excel 方眼紙を dotnet new で作るパターン

https://www.nuget.org/packages/Moonmile.Excel.Hougan/

install すると、

dotnet new -i Moonmile.Excel.Hougan

こんな風に Excel 方眼紙プロジェクト?を作ることができる。

dotnet new excelhougan -lang Excel 
カテゴリー: 開発, NET Core, VB パーマリンク