LoginSignup
10
4

More than 3 years have passed since last update.

.NET Core製のツールをgithubから簡単にインストールできるdotnet-git-toolの紹介

Last updated at Posted at 2019-09-06

初めに

近年.NET CoreUnityの存在によっていろいろなものがC#で書けるようになってきています。
こうなってくるとコマンドラインツールもC#で書きたくなるのは自然なことです。

元々コマンドラインツールをC#で書くこと自体は簡単だったのですが問題は配布方法です。
ビルド成果物を直接渡す方式だとそもそも渡すのがめんどくさい、パスを通すのがめんどくさいなどの問題があります。
最近では.NET core グローバル ツールというものがあってある程度配布の問題は解消されています。
ただし、.Net Coreグローバルツールの配布にはnugetにアップロードする必要があり手軽さがありません。1

元々ソースをgithubで管理しているのでgo getのようにgithubから直接ダウンロードできたほうが嬉しいです。
そこで dotnet-git-tool というgo getライクにツールを取得できるツールを作成したのでその紹介です。

yaegaki/dotnet-git-tool

事前準備

以下を行っておく必要があります。

  • .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の登録をしていただければと:bow:

おまけ: 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

  1. nugetのアップロードはそこまで面倒なわけではありませんが、githubから直接ダウンロードに比べればやはり手間です。また、名前の付け方なども気を付けなければならないため小さなツールを配布するには向いていない印象です。 

10
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
10
4