Repolode
Cysharp

Cysharp/ConsoleAppFramework

Source Generatorで解析・ルーティングコードをコンパイル時に生成する、依存ゼロ・アロケーションゼロ・AOT対応のC# CLIフレームワーク。

スター
2,234
フォーク
130
未解決の Issue
2
最終コミット
昨日

これは何?

ConsoleAppFrameworkは、コマンドラインアプリケーションを構築するためのC#ライブラリです。属性や実行時リフレクションに依存する代わりに、ConsoleApp.Runに渡されたラムダ式やメソッドを解析し、引数の解析とコマンドのディスパッチに必要なコードをコンパイル時に生成します。その結果、フレームワーク自体への実行時依存がないアプリケーションとなり、アセンブリサイズを小さく保ち、Native AOTとの互換性も確保できます。

.NET 8とC# 13を対象とし、同期・非同期コマンド、複数階層のネストしたコマンド、コマンドエイリアスに対応しています。オプション名はデフォルトでlower-kebab-caseになり、オプションの説明とエイリアスはXMLドキュメントコメントから取得します。ヘルプとバージョンの出力は文字列定数として生成されます。

さらに、CancellationTokenによるCtrl+C処理、フィルター(ミドルウェア)パイプライン、終了コード管理、DataAnnotationsによる検証、コマンドクラスの依存性注入、グローバルオプション、ISpanParsable<T>またはJSONによる解析も備えています。

主な機能

  • 01実行時依存なしで、引数解析とコマンドのディスパッチに必要なコードをコンパイル時に生成します。
  • 02Native AOTに対応し、リフレクションとボクシングを回避します。
  • 03CancellationTokenを通じてCtrl+CとSIGTERMを処理し、安全にシャットダウンできます。
  • 04コマンド実行を囲むフィルター(ミドルウェア)パイプラインを提供します。
  • 05オプションエイリアスを含むヘルプテキストを、XMLドキュメントコメントから生成します。
  • 06DataAnnotationsによる検証と、コマンドクラスへの依存性注入に対応しています。

ユースケース

  • Native AOTバイナリとして公開する、小さく高速に起動するCLIツールの構築。
  • 依存性注入を使い、大規模な.NETコマンドラインツールをネストしたコマンドに整理する。
  • 長時間実行タスクをCtrl+Cで安全にキャンセルできる、社内向けのバッチ形式ツールの作成。

クイックスタート

  1. 1

    NuGet パッケージをプロジェクトに追加します

    dotnet add package ConsoleAppFramework
  2. 2

    Program 内でラムダまたはメソッドを使って ConsoleApp.Run を呼び出します

使う前に知っておきたいこと

  • .NET 8 以降が必要です。.NET 8 のプロジェクトでは、C# 13 の言語バージョンを明示的に設定する必要があります。

収録されている特集

トピック

よくある質問

ConsoleAppFramework とは?
Source Generatorで解析・ルーティングコードをコンパイル時に生成する、依存ゼロ・アロケーションゼロ・AOT対応のC# CLIフレームワーク。 ConsoleAppFrameworkは、コマンドラインアプリケーションを構築するためのC#ライブラリです。属性や実行時リフレクションに依存する代わりに、ConsoleApp.Runに渡されたラムダ式やメソッドを解析し、引数の解析とコマンドのディスパッチに必要なコードをコンパイル時に生成します。その結果、フレームワーク自体への実行時依存がないアプリケーションとなり、アセンブリサイズを小さく保ち、Native AOTとの互換性も確保できます。
ConsoleAppFramework は無料で使えますか?ライセンスは?
ConsoleAppFramework は MIT ライセンスのオープンソースです。商用製品で使う前にライセンス条件を確認してください。
ConsoleAppFramework は今もメンテナンスされていますか?
活発にメンテナンス中。ConsoleAppFramework の最終コミットは 2026年11月6日 です。
ConsoleAppFramework は何に使えますか?
Native AOTバイナリとして公開する、小さく高速に起動するCLIツールの構築。 依存性注入を使い、大規模な.NETコマンドラインツールをネストしたコマンドに整理する。 長時間実行タスクをCtrl+Cで安全にキャンセルできる、社内向けのバッチ形式ツールの作成。
ConsoleAppFramework のインストール方法は?
NuGet パッケージをプロジェクトに追加します: dotnet add package ConsoleAppFramework Program 内でラムダまたはメソッドを使って ConsoleApp.Run を呼び出します
ConsoleAppFramework はどこで入手できますか?
ソースコードとインストール手順は GitHub にあります:https://github.com/Cysharp/ConsoleAppFramework

概要はプロジェクトの README をもとに AI が生成しています。GitHub の数値は毎日更新されます。

関連プロジェクト

構文ハイライト、IntelliSense、NuGet パッケージのインストール、実行中プロセスへのアタッチに対応したクロスプラットフォームの C# REPL。

3360+2 今週125C#MPL-2.0更新 2 か月前

.NETからコマンドラインプロセスを起動するライブラリ。柔軟な設定、stdin/stdout/stderrのパイプ接続、非同期キャンセルに対応。

5010+2 今週285C#MIT活発にメンテナンス更新 3 日前