Go や Node.js 向けは見つけられたのですが、C# / .NET Core 向けは探しても見つからなかったので作りました。.NET Standard 2.0 なので .NET Core / .NET Framework の両方で動くはずです。
CoreFx の Console
ベースで書いていて、Windows / Linux / macOS で動くことを確認しました。
Windows 以外だとパフォーマンスが悪いですが、恐らく .NET Core 3.0 で改善されるはずです。
提供しているクラスは Prompt
だけなので、ちょいちょいとメソッドを呼び出せば動くようになります。詳細は GitHub の README を読んでもらえれば大体は分かると思います。
class Program { static void Main(string[] args) { var name = Prompt.Input<string>("名前", validators: new[] { Validators.Required() }); Console.WriteLine($"こんにちは, {name}"); var age = Prompt.Input<int>("年齢"); Console.WriteLine($"年齢: {age}"); var prefecture = Prompt.Select("都道府県", PrefectureList, pageSize: 5); Console.WriteLine($"都道府県: {prefecture}"); } }
現在は最低限必要そうなメソッドだけ実装してあって、その中でも主に使うのは Input
と Select
です。
サンプルコードを実行すると、以下のようなアプリケーションが出来上がります。
上のように Select
での表示件数が多い場合は ←→ でページの切り替えが出来ます。
入力値の検証を行う仕組みも実装してあるので、不正な値が入力された場合には独自のエラーメッセージを出せますが、設計を洗練させたい部分ではあります。
対話型で入力出来た方が便利なケースも多そうなので、メソッドはもう少し追加する予定です。
.NET Global Tool で利用する
Node.js と同じように .NET Core でも .NET Global Tool を使えば CLI なツールを簡単に配布と利用出来るので、このライブラリではその方向での活用も考えていました。
ドキュメントに従って適当なプロジェクトを作成して、NuGet パッケージを追加すれば使えます。
<Project Sdk="Microsoft.NET.Sdk"> <PropertyGroup> <OutputType>Exe</OutputType> <TargetFramework>netcoreapp2.2</TargetFramework> <PackAsTool>true</PackAsTool> <ToolCommandName>promptest</ToolCommandName> <PackageOutputPath>./nupkg</PackageOutputPath> </PropertyGroup> <ItemGroup> <PackageReference Include="Sharprompt" Version="1.0.1" /> </ItemGroup> </Project>
.NET Global Tool は開発とインストールが簡単なので、サクッと使えるのは便利です。
先ほどのサンプルコードをそのまま .NET Global Tool としてインストールして、動作を確認しておきました。
良くある npm init
のようなテンプレートからファイルを作成する場合に使えると思います。
思ったよりもコンソールの操作は難しかったですが、動くところまで実装出来たので満足しています。