IRONSOFTWAREHOME

画面上でデータをライブ修正 - Spectre Console シリーズ

画面上でのライブデータ変更 - Spectre コンソール シリーズ

Tim Corey

9 分 17 秒

Spectre.Consoleは.NETライブラリで、白黒のコマンドラインをはるかに超える美しいコンソール・アプリケーションを作成できます。彼のビデオ"Modifying Data Live On-Screen - Spectre Console Series"では、Tim Corey が Spectre Console のライブ表示機能を実演しています。 この機能により、コンソールアプリケーション内で、進捗状況や更新データをリアルタイムに画面に表示することができます。

この記事では、ティムのビデオを順を追って見ていき、彼がそれぞれのことをどこで行い、どのように説明しているかを紹介します。

ライブ表示の紹介

Timはまず、Spectre.Consoleについて説明し、それがどのようにコンソールアプリを視覚的に魅力的にするかについて説明します。 このシリーズでは、各レッスンが短い例題となっており、説明の中にソースコードがリンクされています。

このレッスンでは、リアルタイム更新のために画面上の既存のデータを修正するライブ表示機能の使い方に焦点を当てていると説明しています。 ティムはまた、視聴者が購読し、iamtimcorey.com を訪問して、より多くのトレーニングリソースを得ることを奨励しています。

データのための新しいテーブルを作成する

Timは、タイトル、レッスン、時間の列を持つ新しいテーブルをすでに作成したことを示しています。 このテーブルは、APIから引き出されたコース情報をレンダリングするために使用されます。

また、コース名、レッスン数、コースの長さ(時間単位)を強くタイプしたプロパティを持つCourseInfoと呼ばれるレコードタイプを紹介しています。 これは、APIの構造を反映し、強くタイプされた方法でテキストを簡単に出力することができます。

後で合計を表示できるように、表はフッターを表示するようにしました。 ティムは、このレイアウトは、美しいコンソール・アプリケーションのためにSpectreがサポートしている多くの任意ウィジェットの1つであると述べている。

ライブ表示の開始

Tim は、AnsiConsole.Live(table).StartAsync(...) メソッドを使用してライブ表示を開始します。 彼は、非同期でない Start() 関数もあり、長時間実行タスクを待つ必要がない場合に便利であることを指摘しています。

彼は自分のコードを非同期コンテキストでラップし、新しい行が到着するとコンソールを更新できるようにしています。これは、画面をクリアすることなく出力を再描画する現在の端末の機能を示しています。

データを取得して進行状況を表示する

ライブコンテキスト内で、Timは、サンプルAPIが31のコースをリストしているため、1から31までのintインデックスを使用してforループを記述します。 各インデックスに対して、ヘルパークラスメソッドを呼び出して API データを取得します。

このヘルパーは生のJSON文字列を強く型付けされたCourseInfoオブジェクトに変換します。 Tim は意図的に API を一度に 1 コースだけ呼び出し、バルクで呼び出さない方法と、コンソール環境で長時間実行タスクをシミュレートする優れた例である進行状況をライブ表示する方法を示しています。

彼は、もしリクエストが1つだけなら、URLの/iを削除することもできたが、"時間をかけて入ってくるものを示すために "複数の呼び出しを行なっていると述べている。

行を追加し、出力を更新する

返された各CourseInfoインスタンスで、Timはtable.AddRow(...)を呼び出し、コースのタイトル、レッスン数、時間単位での長さを持つ新しい行を作成します。 彼は、$フォーマットで文字列補間を使用し、文字列でない値を変換するために必要に応じて.ToString()を呼び出します。

これは、Spectre がどのように動的に行を更新できるかを示すために、各パスの新しい行でテーブルをレンダリングします。 また、変換について明示することで、型の不一致のような潜在的な問題をキャッチすることも実演しています。

カスタムフッターとランニングトータル

次のTimは、カラムにカスタムフッターを追加する方法を示しています。 彼は、table.Columns[0].Footerを設定して、これまでにダウンロードされたコースのカウントを表示します。 2つ目と3つ目の列も同様ですが、今回はすべてのコースのレッスン数と合計時間を合計します。

こうすることで、ユーザーは、レッスンの回数と累積時間を一目で確認することができます。 これは、Spectreのコントロールを使用して、ライブデータと一緒に値の合計を表示する実例です。

ティムはウィンドウを簡単に"固定解除"し、数字が大きくなるにつれて完全なレイアウトを見ることができるようにしました。 フッターは、ボーダー、マークアップ、テーマと同様に、Spectreが提供する組み込みスタイルの一部であると説明しています。

各アクションの後にコンテキストをリフレッシュする

ティムは、ライブ表示に関する"重要なこと"を強調しています。 これにより、端末が実際に新しいデータで出力を再描画することが保証されます。 これがないと、ライブセッションが終了するまで、行やフッター、あるいは異なる色が表示されません。

デバッグと例外処理

彼が最初にコードを実行したとき、ティムはIndex Out of Range例外にぶつかりました。 彼は、列のインデックスを数え間違えて(0,2,3ではなく0,1,2です)、それを修正しました。

これは、Spectre.Console であっても、エラーを検出し、インデックスと引数が正しいことを確認する必要があることを優しく思い出させるものです。

ライブ表示を実際に見る

Timは修正されたコードを実行し、行が追加され、合計が更新され、フッターに合計値が表示される様子をライブで表示します。

1,652レッスン"、"403.5時間"、"全31コース"のデータが流れ込んできます。 これはまさに、Spectre Console のライブ表示を現在のターミナル内のダッシュボードのように感じさせるアクションです。

フッターだけに集中する

変更を見やすくするため、ティムは行を追加するコードをコメントアウトし、フッターだけが更新されるようにしています。 これは、データをスクロールしなくても、ライブで合計を追跡できることを示しています。

また、Spectreは数字が大きくなると(例えば9から10へ)列幅を自動的に調整することにも言及している。 これは、ライブラリの幅とフォーマットの自動検出の小さいながらも強力な例です。

Beyond Tables - 任意のウィジェットとテーマ

ティム氏は、ライブ表示は表に限らないと説明する。 パネル、ユーザー入力のプロンプト、あるいは棒グラフのような任意のウィジェットに適用できます。 テキストを更新し、異なる色でハイライトし、カスタムの色分けされたテーマを適用したり、スピナーを追加したりすることができます。

彼は、テーマに合わせて青、緑、灰色などのスタイルを変更でき、ネストされたレイアウトやウィジェットを扱うこともできると述べています。 この柔軟性こそが、Spectreが他のエコシステムのリッチなコンソールツール(中にはPythonで書かれたものもある)に"大きくインスパイアされ"ながら、.NET向けに調整されている理由です。

非同期 vs. 同期のライブ表示開始

Timは、彼がなぜasyncバージョンを使用したかを明らかにしています:APIコールを待っていたからです。 更新が非同期でない場合は、awaitなしでStart()を呼び出すことができます。

この選択により、長時間実行するタスクに対しても応答性を損なわない美しいコンソールアプリケーションを構築することができます。

結論

彼のビデオでは、Tim がどのようにして Spectre Console のライブディスプレイを作成し、コンソール内でデータを更新、集計、およびリフレッシュできるかを示しています。

これは、ユーザー入力を促したり、ウィジェットを追加したり、異なる色やカスタムカラーコーディングされたテーマを使用してダッシュボードを作成するための素晴らしい基盤となります。 テキストを簡単に出力し、マークアップを使用し、パネルやツリーのようなコントロールを作成できるSpectreの機能と組み合わせることで、ターミナル内でダイナミックな.NETアプリを構築できます。

Tim のデモでは、Spectre.Console を使用すると、ダッシュボードだけでなく、ライブ更新テーブル、スピナー、その他のウィジェットも作成できることを示しています。 これは、プレーンなコンソールをリアルタイムのインタラクティブなツールに変える実践的な例であり、ユーザーに"ハッピーコーディング"と伝える良い方法です。

Earn More by Sharing What You Love

Do you create content for developers working with .NET, C#, Java, Python, or Node.js? Turn your expertise into extra income!

Let's Stay in Touch!

Join our newsletter, you’ll get exclusive access on article updates. We value your privacy

Key in blue circle

無料の30日間トライアルキーをすぐに入手してください。

Your trial license will be sent to your email address

制限なし。100% ロック解除済み。クレジットカード不要。

bullet_checkedクレジットカードやアカウントの作成は不要です。制限なし。100% ロック解除済み。クレジットカード不要。
  • Logo Aetna
  • Logo NASA
  • Logo GE
  • Logo Porsche
  • Logo USDA
  • Logo Qatar
Join Millions of Engineers who’ve tried IronPDF
義務のない相談を受ける
下記のフォームを記入するか、sales@ironsoftware.comにメールしてください。
あなたの詳細は常に守秘されます。
世界中の数百万人のエンジニアから信頼されています。
ライセンスはより安く
あなたの無料30日間の試用キーをすぐに入手。
クレジットカードやアカウントの作成は不要です。