Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationEventAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
13
Help us understand the problem. What are the problem?
Organization

ConsoleAppFrameworkを試してみる

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に書いてあるまんまをコピペします。

Program.cs
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 ファイルの ConsoleAppFrameworkVersion を変更します。

<PackageReference Include="ConsoleAppFramework" Version="2.0.0" />

dotnet restore でパッケージの依存関係を復元します。
問題なく復元されたら、OKです。

感想

まだ動かしただけなので、わかっていませんがかなり簡単に導入できました。
引数をパースしたり、helpを作ったり意外とやろうとなると面倒なので、非常にありがたいですね!

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
13
Help us understand the problem. What are the problem?