コンソールにテーブルを追加する - Spectre コンソールシリーズ
Spectre.Consoleは、美しいコンソールアプリケーションの作成を支援する強力な.NETライブラリです。 プレーンテキスト出力の代わりに、構造化されたレイアウトを構築したり、色を使用したり、プログレスバーやインタラクティブなプロンプトを表示することもできます。Spectre Console シリーズでは、Tim Corey がこのライブラリを最大限に活用する方法を、実践的なレッスンで開発者に紹介します。
彼のビデオ"Adding Tables to Your Console - Spectre Console Series"では、Tim は Spectre.Console のテーブルに焦点を当てています。 テーブルは、構造化されたデータを整列、パディング、ボーダー、スタイルで表示するためのコア機能です。 ティムのウォークスルーを詳しく見て、この機能の使い方を正確に理解しましょう。
Spectre.Consoleを使い始める
冒頭(0:00)で、Tim は Spectre.Console によって視覚的に魅力的で情報量の多いアプリケーションを作成できることを説明します。 Spectre.Console という NuGet パッケージとして配布されます。 で簡単にインストールできます:
// dotnet add package spectre console
dotnet add package Spectre.Console// dotnet add package spectre console
dotnet add package Spectre.Consoleこのライブラリをインストールすると、コンソールアプリケーションで情報を表示するのが非常に簡単になります。 Timはまた、さらなる例に興味がある人のために、ビデオで提供されるドキュメントとソースコードのリンクを指摘しています。
最初のテーブルの作成
Timは0:35からコーディングを始めます。Tableオブジェクトを作成しています:
var table = new Table();var table = new Table();次に、AddColumnで3つの列を追加します:
table.AddColumn("First Name");
table.AddColumn("Last Name");
table.AddColumn("Age");table.AddColumn("First Name");
table.AddColumn("Last Name");
table.AddColumn("Age");これが基本的な構成です。 彼は、各列は後で独自の幅、整列、スタイルを持つことができると説明しています。
次に、AddRowで行を追加します。 Tim at 1:06によると、行を追加するには3つの方法がサポートされている:
1.IRenderableオブジェクトのparamsリスト(パネル、別のテーブル、あるいはチャートのようなネストされたアイテム用)。
2.文字列のparamsリスト(最も一般的なもの)。
3.IEnumerable
彼はまず2番目の選択肢を示し、こう付け加えた:
table.AddRow("Tim", "Corey", "46");
table.AddRow("Sue", "Storm", "23");table.AddRow("Tim", "Corey", "46");
table.AddRow("Sue", "Storm", "23");これで、テーブルに2行のデータが入ります。 3:26 で Tim は、ターミナルにテーブルのような IRenderable を表示するには、(WriteLine ではなく)AnsiConsole.Write(table) を使わなければならないことを視聴者に思い出させます:
AnsiConsole.Write(table);AnsiConsole.Write(table);彼がプログラムを実行すると、コンソールには、ヘッダーと行が自動的に整列された、きちんとフォーマットされた表が表示されます。 わずか数行のコードでも、Spectreはコンソール出力をよりプロフェッショナルに見せます。

テーブルの整列と展開
4:00では、Timが画面上のテーブルの位置をコントロールする方法を示しています。 例えば:
table.Centered();table.Centered();これにより、コンソールウィンドウの中央に表全体が表示されます。 彼は、この設定は列ではなく、テーブル全体に影響すると説明しています。 表を右寄せまたは左寄せにすることもできます。 デフォルトは左です。

そして、5:01からtable.Expand()を実演し、テーブルをターミナル・ウィンドウの幅いっぱいにする。 いったん拡大すると、テーブルが利用可能なスペースをすべて使ってしまうため、センタリングは効果がありません。 デフォルトは折りたたまれたテーブルです。

境界線を追加してターミナル サポートを理解する
次に、Timは5:21に枠線を加える:
table.Border(TableBorder.Rounded);table.Border(TableBorder.Rounded);彼はVisual Studioのコンソールでアプリを実行し、角が丸くなっていないことに気づきました。 5:54に、彼はWindowsターミナルに切り替えて再実行している。
レンダリング機能は使用している端末に依存するとティムは説明する(5:59)。 基礎となるシェルは出力を提供するだけですが、ターミナルはどのスタイルを表示できるかを決定します。 Windows ターミナルは丸囲み文字をサポートしています; Visual Studioの統合コンソールにはありません。 色、マークアップ、斜体、下線、太字などのスタイルも同様です。
彼は7:01で、Visual Studioの外のDeveloper Command Promptでさえ、別のターミナルを使用しているため正しくレンダリングされることを示している。 これは、プログレスバー、長時間実行タスク、テーブルなどの Spectre の機能を試す場合に注意すべき重要なポイントです。
行区切り文字の追加
ティムはまた、行と行の間に区切り文字を表示することで、わかりやすくなると指摘しています:
table.ShowRowSeparators();table.ShowRowSeparators();これにより、各行の間に水平線が引かれ、大きな表でも情報をスキャンしやすくなります。特に、多くの出力を表示したり、引数を動的に処理したりするCLIツールを構築している場合に便利です。
列レベルのスタイリング:パディング、幅、整列
Spectre.Consoleテーブルの強みは、各カラムを個別にカスタマイズできることです。 8:02、ティムは最初のコラムを修正する:
table.Columns[0].PadLeft(5).PadRight(5);table.Columns[0].PadLeft(5).PadRight(5);このため、テキストの両側にパディングが追加されます。 次に、2列目の幅を固定に設定します:
table.Columns[1].Width(15);table.Columns[1].Width(15);最後に、そのコラムの内容を右寄せにする:
table.Columns[1].RightAligned();table.Columns[1].RightAligned();彼が9:10に再びプログラムを実行すると、1列目がパディングされ、2列目が固定幅に設定され、コンテンツが右寄せになっているのがわかる。 ヘッダーテキストでさえ、これらの設定を尊重しています。 Timは、幅はピクセルではなく、文字で測定されることを指摘している(8:42)。
パディング、アライメント、固定幅といった小さな工夫が、コンソール・アプリケーションをより読みやすくします。 Spectreの色、マークアップ、パネルと組み合わせることで、GUIに近く感じられながら、完全にコンソールで動作するアウトプットを作成できます。

IEnumerableから行を追加する
9:25で、TimはIEnumerable
var person = new List<Text>
{
new Text("Bilbo"),
new Text("Baggins"),
new Text("111")
};
table.AddRow(person);var person = new List<Text>
{
new Text("Bilbo"),
new Text("Baggins"),
new Text("111")
};
table.AddRow(person);これは、コレクションを使用して別の行を挿入します。 Timは、このオプションは日常的なコードでは"あまり役に立たない"とコメントしているが、ファイルからのデータ、ユニットテストフレームワーク、対話型プロンプトなど、別のソースから動的に行を生成する場合はサポートされている。

まとめ
動画の最後(9:59)で、ティムはこうまとめています:Spectre.Console のテーブルは、情報をすっきりと構造化された方法で表示するための大きな力を与えてくれます。 テーブルの整列、幅、ボーダーのスタイルを制御し、行のセパレータを追加し、列にパディングを適用し、パネルやその他のレンダラブルを埋め込むこともできます。
このライブラリはモダンなCLIデザインに大きくインスパイアされているため、表だけでなく、長時間実行するタスクの進捗インジケータ、チャート、太字、斜体、下線、色(青や緑のテキストなど)などのマークアップもサポートしています。 Tim は、ドキュメントを確認し、例を試して、Spectre がコンソール出力をどのように魅力的にするかを確認するよう視聴者に勧めています。
ティム・コーリーのステップ・バイ・ステップのデモンストレーションに従うことで、Spectre.Console がいかに最小限の労力で美しいコンソール・アプリケーションを構築できるかがわかるでしょう。 NuGetパッケージをインストールし、APIを探索し、今すぐプレーンなコンソール出力を構造化され、スタイル化された表示に変換してください。

