初めに
近年.NET CoreやUnityの存在によっていろいろなものがC#で書けるようになってきています。
こうなってくるとコマンドラインツールもC#で書きたくなるのは自然なことです。
元々コマンドラインツールをC#で書くこと自体は簡単だったのですが問題は配布方法です。
ビルド成果物を直接渡す方式だとそもそも渡すのがめんどくさい、パスを通すのがめんどくさいなどの問題があります。
最近では.NET core グローバル ツールというものがあってある程度配布の問題は解消されています。
ただし、.Net Coreグローバルツールの配布にはnugetにアップロードする必要があり手軽さがありません。1
元々ソースをgithubで管理しているのでgo get
のようにgithubから直接ダウンロードできたほうが嬉しいです。
そこで dotnet-git-tool
というgo get
ライクにツールを取得できるツールを作成したのでその紹介です。
事前準備
以下を行っておく必要があります。
- .NET Core 2.2 or .NET Core 3.0のインストール
- gitのインストール
- $HOME/.dotnet/toolsへのパスを通す
インストール
以下のコマンドで簡単にインストールできます。
$ dotnet tool install dotnet-git-tool -g
使い方
github上にホストされたyaegaki/botsayをインストールする場合を例に解説します。
インストールは以下のコマンドで行います。
$ dotnet git-tool install github.com/yaegaki/botsay
You can invoke the tool using the following command: botsay-z
Tool 'botsay-z' (version '1.0.0') was successfully installed.
正常に終了するとbotsay-z
コマンドが使用できるようになっています。
もし使用できない場合は$HOME/.dotnet/tools
にパスが通っているかどうか確認してください。
(Windowsの場合は%HOMEDRIVE%%HOMEPATH%\.dotnet\tools
)
$ botsay-z hello
hello
__________________
\
\
....
....'
....
..........
.............'..'..
................'..'.....
.......'..........'..'..'....
........'..........'..'..'.....
.'....'..'..........'..'.......'.
.'..................'... ......
. ......'......... .....
. _ __ ......
.. # ## ......
.... . .......
...... ....... ............
................ ......................
........................'................
......................'..'...... .......
.........................'..'..... .......
........ ..'.............'..'.... ..........
..'..'... ...............'....... ..........
...'...... ...... .......... ...... .......
........... ....... ........ ......
....... '...'.'. '.'.'.' ....
....... .....'.. ..'.....
.. .......... ..'........
............ ..............
............. '..............
...........'.. .'.'............
............... .'.'.............
.............'.. ..'..'...........
............... .'..............
......... ..............
.....
リポジトリの中の特定のフォルダにあるプロジェクトを指定してツールをインストールすることもできます。
yaegaki/botsayリポジトリには動作は同じで名前だけ違うbotsay-xyz
というツールが含まれています。
botsay-xyz
をインストールするには以下のコマンドを実行します。
$ dotnet git-tool install github.com/yaegaki/botsay/botsay-xyz
You can invoke the tool using the following command: botsay-xyz
Tool 'botsay-xyz' (version '1.0.0') was successfully installed.
インストールしたツールのアップデートはdotnet git-tool install
の代わりにdotnet git-tool update
を使用することで行うことができます。
インストールしたツールを削除する場合は標準のdotnet tool uninstall -g
を使用します。
以上がdotnet-git-tool
の基本的な使用方法です。
最後に
作成したばかりのツールなので色々とバグってるかもしれませんが何か見つけたらissueの登録をしていただければと
おまけ: MessagePack-CSharpのmpcをインストールする
# -f オプション: パック可能でないプロジェクトを強制的にパックする
# --any-sdk オプション: リポジトリ内のglobal.jsonに書かれた対象sdkを無視する
$ dotnet git-tool install github.com/neuecc/MessagePack-CSharp/src/MessagePack.UniversalCodeGenerator -f --any-sdk
You can invoke the tool using the following command: mpc
Tool 'mpc' (version '2.0.163-beta') was successfully installed.
$ mpc
mpc arguments help:
-i, --input=VALUE [required]Input path of analyze csproj
-o, --output=VALUE [required]Output file path
-c, --conditionalsymbol=VALUE
[optional, default=empty]conditional compiler
symbol
-r, --resolvername=VALUE [optional, default=GeneratedResolver]Set resolver
name
-n, --namespace=VALUE [optional, default=MessagePack]Set namespace root
name
-m, --usemapmode [optional, default=false]Force use map mode
serialization
-
nugetのアップロードはそこまで面倒なわけではありませんが、githubから直接ダウンロードに比べればやはり手間です。また、名前の付け方なども気を付けなければならないため小さなツールを配布するには向いていない印象です。 ↩