MagicOnion で個人的に気になってる Cysharp さんからバッチ用のフレームワークがリリースさたみたいです。
とりあえず、ドキュメント読みながら hello world 的なものを動かしたいと思います。
環境
- os: macOSX Mojave
- macのdotnet: version 2.2.101
前と同じようにmacで開発していきます。
実装
とりあえずReadMeにある一番シンプルなコードを動かしてみます。
まず、dotnet
コマンドを使って新規プロジェクトを作成します。
$ dotnet new console
試しにちゃんと動くかdotnet run
で確認してみます。
問題がなければ「Hello World!」と表示されます。
$ dotnet run
Hello World!
次にパッケージを導入します。
の.NET CLIにあるものをコピペします。
$ dotnet add package ConsoleAppFramework --version 2.0.0
これ以外にも複数のパッケージを使うので導入します。
$ dotnet add package Microsoft.Extensions.Logging
$ dotnet add package Microsoft.Extensions.Hosting
また、今回のコードではasync
を使うので、C#のバージョンを7.1以上にする必要があります。
.Net CoreプロジェクトでC#のバージョンを変更する方法
こちらの記事を参考に.csproj
ファイルに<LangVersion>7.3</LangVersion>
を追加します。
7.3にしたのはsandboxにあるサンプルの.csprojで7.3が指定されていたからです。
最後にProgram.cs
を編集します。
これはReadMeに書いてあるまんまをコピペします。
using ConsoleAppFramework;
using Microsoft.Extensions.Hosting;
using System;
using System.Threading.Tasks;
// Entrypoint, create from the .NET Core Console App.
class Program : ConsoleAppBase // inherit ConsoleAppBase
{
static async Task Main(string[] args)
{
// target T as ConsoleAppBase.
await Host.CreateDefaultBuilder().RunConsoleAppFrameworkAsync<Program>(args);
}
// allows void/Task return type, parameter is automatically binded from string[] args.
public void Run(string name, int repeat = 3)
{
for (int i = 0; i < repeat; i++)
{
Console.WriteLine($"Hello My ConsoleApp from {name}");
}
}
}
あとはdotnet run
で実行します。
$ dotnet run -name "orange634nty" -repeat 5
Hello My Batch from orange634nty
Hello My Batch from orange634nty
Hello My Batch from orange634nty
Hello My Batch from orange634nty
Hello My Batch from orange634nty
ついでにpublishも試してみました。
$ dotnet publish --runtime osx.10.13-x64
# bin/Debug/netcoreapp2.2/osx.10.13-x64/publish/ にビルドされたものが出力される
$ ./bin/Debug/netcoreapp2.2/osx.10.13-x64/publish/console-app-framework-test -name "orange634nty" -repeat 5
Hello My Batch from orange634nty
Hello My Batch from orange634nty
Hello My Batch from orange634nty
Hello My Batch from orange634nty
Hello My Batch from orange634nty
こちらも問題なく動きます。
完成品はこちらのリポジトリに上げておきます。
おまけ
versionを上げる方法
csproj
ファイルの ConsoleAppFramework
の Version
を変更します。
<PackageReference Include="ConsoleAppFramework" Version="2.0.0" />
dotnet restore
でパッケージの依存関係を復元します。
問題なく復元されたら、OKです。
感想
まだ動かしただけなので、わかっていませんがかなり簡単に導入できました。
引数をパースしたり、helpを作ったり意外とやろうとなると面倒なので、非常にありがたいですね!