リストから項目を選択する - Spectre Console シリーズ
Spectre Console は、.NET 用の強力な NuGet パッケージで、開発者は、プレーンで静的なテキストプログラムではなく、対話型のコンソールアプリケーションを構築できます。 最も便利な機能の 1 つは、Spectre コンソールの選択プロンプトです。このプロンプトを使用すると、ユーザーがスクロールしてキーボードで直接選択できるオプションのリストを表示できます。 これにより、コンソール入力の信頼性が高まり、ユーザーフレンドリーで、手動で回答を入力するよりも視覚的に洗練されたものになります。
動画"Selecting Items from a List - Spectre Console Series"では、Tim Corey がこの機能の具体的な使い方を紹介しています。 この記事では、彼の説明をステップ・バイ・ステップで追っていきます。 これは、独自 for .NETコンソールアプリで選択プロンプトを作成し、カスタマイズする方法を学ぶのに最適な方法です。
レッスンの紹介
0:00から、TimはSpectre Consoleを使うことで、開発者はC#のコンソールアプリを視覚的に魅力的で情報量の多いアプリケーションに変えることができると説明します。 彼の一連のビデオでは、ライブラリを10分ごとに説明し、説明の中でソースコードをリンクしています。
このレッスン(0:18)では、Timはユーザーにリストから選択肢を選んでもらい、キーボードを使ってそのリストをナビゲートする方法に焦点を当てます。この"質問と回答"パターンは、モダンでインタラクティブなコンソールアプリを構築するためのバックボーンです。彼はまた、自分のチャンネルを購読し、iamtimcorey.comを訪れて、より多くのトレーニングリソースを得るよう、視聴者に注意を促しています(0:27)。
選択プロンプトの作成
0:34では、Timがアプリケーションでよく使うプレースホルダー名のリストを示しています。 好きな果物"の例であれば、リンゴ、バナナ、オレンジといった果物のリストでも構いません。 彼は、ユーザが選択する答えを格納する文字列型の変数を設定します:
string favoriteName;string favoriteName;
そして0:57から、Timは前のレッスンで扱った基本的なプロンプトから、完全なSelectionPrompt関数に移行します:
favoriteName = AnsiConsole.Prompt(
new SelectionPrompt<string>()
.Title("Which is your favorite placeholder name")
.AddChoices(names)
);favoriteName = AnsiConsole.Prompt(
new SelectionPrompt<string>()
.Title("Which is your favorite placeholder name")
.AddChoices(names)
);彼は、SelectionPromptにはタイトルが必要であり、彼の場合は "Which is your favorite placeholder name "であると説明している(1:13)。もし好きな果物を尋ねるのであれば、タイトルを "Which is your favorite fruit "に変更するだろう。
テキスト(1:24)を Spectre Console のスタイルで装飾することができますが、このレッスンでは、例えば青、緑、グレーなどの色を使用し、選択プロンプト自体に焦点を当てています。
1:39で、Timは.AddChoices()を呼び出して選択肢を追加しています。 選択肢は、果物、数字、オブジェクト、あるいは"検索"機能の結果など、何でも構いません。
最後に、1:55 から、Tim は Spectre Console のマークアップラインを使って、選択した項目をユーザーに表示します:
AnsiConsole.MarkupLine($"Your favorite name is [red]{favoriteName}[/].");AnsiConsole.MarkupLine($"Your favorite name is [red]{favoriteName}[/].");これは、インラインマークアップを使用して、選択された答えを赤で色付けしていますが、コンソールのテーマで必要であれば、青や緑を使用することもできます。
選択プロンプトの実行
Timは2:34にコードを保存して実行します。コンソールが表示します:
名前または果物のリスト。
矢印キーで上下に移動できます(2:41)。
- Enterキーを押して項目を選択してください。
Timが"Sue Storm"を選択するデモを行います(2:50)。 Enterを押すと、リストが消え、コンソールが出力されます:
Your favorite name is Sue Storm.Your favorite name is Sue Storm.これが果物のリストだったら、こうなるでしょう:"あなたの好きな果物はバナナです "または "あなたの好きな果物はリンゴです"。
長いリストを扱う
次にティムは、よくある問題である"長いリスト"を取り上げます。 3:13では、表示項目を制限するためのPageSizeプロパティを紹介しています:
.PageSize(4).PageSize(4)彼は(3:19)、4つは機能を示すために意図的に小さくしていると説明している。 一度に表示される項目は限られています。 リンゴ、バナナ、オレンジ、マンゴー、パイナップルなど、大きな果物のリストがあった場合、PageSizeを使用すると、コンソールが延々とスクロールするのを防ぐことができます。
ユーザーをガイドするために、Timは3:34にグレーでMoreChoicesTextメッセージを追加しています:
.MoreChoicesText("[grey](Move down to reveal more choices)[/]").MoreChoicesText("[grey](Move down to reveal more choices)[/]")このテキストでは、ユーザーが下に移動して、より多くの選択肢を表示できることを伝えています。 これは、リストのサイズが大きく、エラーや混乱のリスクを冒す代わりに明確なヒントが欲しい場合に特に役立ちます。
ロングリストの動作を実演する
ティムは4:08から再びプログラムを実行する:
最初に表示される選択肢は4つだけです。
グレーのメッセージには、"下に移動すると、さらに選択肢が表示されます"(4:13)と書かれています。
下にスクロールすると、その他の項目が表示されます。
- 上にスクロールすると、最初のものが再び表示されます(4:20)。
Timは(4:25)これは大きなリストに理想的で、コンソールを延々とスクロールする必要がないと指摘しています。 一度に10個か15個を表示し、残りはユーザーにページをめくらせるかもしれません。これは、一度に多くの出力でコンソールを圧倒する問題を解決します。
選択プロンプトがタイピングより優れている理由
4:38で、ティムはSelection Promptがタイピングよりも優れている理由を強調しています:
選択すると、リストは消えます(4:41)。
- 選択した答えはすぐに表示されます(4:45)。
彼はこれを(5:05)、ユーザーが "はい "か "いいえ "を入力しなければならなかった昔のプロンプトと比較している。SelectionPromptを使えば、これらの選択肢を直接提示し、ユーザーに矢印キーで選択させることができる。
ティムは(5:35)、プロンプトは入力を単純化し、コンソールアプリをよりインタラクティブにし、入力の問題に対する明確な解決策を提供するので、"本当にクールな追加"だと言う。
その他の用途と今後のトピック
Timは、このレッスンではリストから1つの項目を選択することについて触れています(5:43)。今後のビデオでは、ユーザーが複数の項目のオンとオフを切り替え、Enterキーを押して確定することができる複数選択プロンプト(5:39)を紹介する予定です。
彼はまた、リストには文字列、整数、果実、関数から返されるデフォルトのオプションなど、どのようなオブジェクトの型であってもよい(5:47)と述べている。 例えば、ユーザーに名前の代わりに好きな果物("リンゴ"、"バナナ"、"オレンジ")を尋ねることができます(5:55)。
Spectre Console の選択プロンプトでは、デフォルトの設定、必須回答の処理、選択後のアクションのカスタマイズも可能です。
結論
Tim は、これが Spectre Console で項目選択を実装する方法であり、コンソールアプリケーションでリストを処理するクリーンでユーザーフレンドリーな方法であることを再確認して、ビデオを(6:01)締めくくります。 選択プロンプトは、好きな果物、数字、オブジェクトのいずれを尋ねる場合でも、余分な入力やエラーを発生させることなく、洗練されたエクスペリエンスをアプリに提供します。
ティム・コーリーのビデオからの主な要点
Spectre Console の SelectionPrompt を使用すると、ユーザーは手入力の代わりに矢印キーでリストをナビゲートできます。
タイトル、選択肢、色(青、緑、灰色)、PageSize、MoreChoicesTextでカスタマイズし、より多くの選択肢を表示できるようにします。
項目を選択すると、リストが消え、選択した答えが表示されます。
短いリストにも長いリストにも最適で、コンソールのスクロールの問題を防ぎます。
あらゆるデータ型(文字列、数値、apple、banana、orangeなどの果物、またはカスタムオブジェクト)で動作します。
- Timは今後のビデオで、ユーザーが複数のオプションを切り替え、Enterキーを押して確定できる、複数選択プロンプトを取り上げる予定です。

