.NET Core ツールとは
一言でまとめると Console App を Nuget Package 化したものです。詳細は以下に記載があります。
マニフェストファイルを作る
パッケージのバージョン管理を行うためのファイルを作成します。下記のコマンドを実行すると、
dotnet new tool-manifest
.config/dotnet-tools.json
が作成され、下記のような中身になっています。
{ "version": 1, "isRoot": true, "tools": { } }
tool をインストールしていくと、こちらの file に追加されていきます。
Strawberry Shake のツールを入れてみる
Strawberry Shake は .NET の GrapchQL Client SDK です。まずは以下のコマンドでインストールされているツールを調べます。
dotnet tool list パッケージ ID バージョン コマンド マニフェスト -----------------------------------------
上記のように何もインストールされていないことを確認します。この状態で下記コマンドを実行すると、
dotnet tool install StrawberryShake.Tools dotnet tool list パッケージ ID バージョン コマンド マニフェスト ------------------------------------------------------------------------------------------------------------------------------------- strawberryshake.tools 13.9.0 dotnet-graphql .config\dotnet-tools.json
インストールされました。version は執筆時 (2024/4/14) の最新の安定板の 13.9.0
となっています。install コマンドの構文はこちらにあります。
マニフェストファイルにも反映されました。
{ "version": 1, "isRoot": true, "tools": { "strawberryshake.tools": { "version": "13.9.0", "commands": [ "dotnet-graphql" ] } } }
update してみる
tool の version を上げるには update
を使います。まずは適当な version の tool をインストールします。
dotnet tool install --version 13.8.1 StrawberryShake.Tools dotnet tool list パッケージ ID バージョン コマンド マニフェスト ------------------------------------------------------------------------------------------------------------------------------------- strawberryshake.tools 13.8.1 dotnet-graphql .config\dotnet-tools.json
update をコマンドを使って version を上げます。
dotnet tool update --version 13.9.0 StrawberryShake.Tools dotnet tool list パッケージ ID バージョン コマンド マニフェスト ------------------------------------------------------------------------------------------------------------------------------------- strawberryshake.tools 13.9.0 dotnet-graphql .config\dotnet-tools.json
version は指定しなければ最新の安定板に更新されます。構文はこちらにあります。
downgrade したい場合に update
コマンドは利用できません。例えば version を 13.8.0
として 13.8.1 -> 13.8.0
の downgrade は出来ません。その場合はまず uninstall
コマンドを使い、13.8.0
をインストールする必要があります。
dotnet tool を自作してみる
ぜっかくなので dotnet tool を自作してみます。tutrial もあるので割と簡単に入門できます。
では、引数に受け取った文字列をコンソールに出力する tool を作ってみます。dotnet tool は Console App なので、Console App として project を作成します。
そして project file に以下を追加します。
<TargetFrameworks>net6.0;net8.0</TargetFrameworks> <PackAsTool>true</PackAsTool> <ToolCommandName>Toy</ToolCommandName> <PackageOutputPath>./nupkg</PackageOutputPath>
そして Program.cs を以下のようにします。
// See https://aka.ms/new-console-template for more information Console.WriteLine($"Hello! {string.Join(",", args)}");
この状態で run を実行します。
dotnet run "Hoge" "Fuga" Hello! Hoge,Fuga
すると以下のような出力になります。
では tool として利用できるようにしていきましょう。まずは dotnet pack
で NuGet 化させます。
dotnet pack
すると project file の PackageOutputPath
に指定したディレクトリ (今回だと nupkg
) に project 名と同じ名前の nupkg file が出来上がっているはずです。ではこれを別の prject に tool としてインストールしましょう。
dotnet tool install --add-source path-to-nupkg --version 1.0.0 {Package 名} dotnet tool list パッケージ ID バージョン コマンド マニフェスト ------------------------------------------------------------------------------------------------------------------------------------- toytool 1.0.0 Toy .config\dotnet-tools.json
--add-source
を使って NuGet Package の Source を明示的に指定しています。今回はローカルでの検証なので、参照パスを指定しています。
ToolCommandName
に指定したコマンド (今回だと Toy
) を使って tool を実行してみましょう。
dotnet Toy "Hoge" "Fuga" Hello! Hoge,Fuga
コンソールにパラメータが出力されます。意外と簡単ですね。