textual-builder について
Textual Builderは、Textualによるターミナルおよびブラウザー向けTUI開発を支援するスキルです。テーマ別のリファレンスや開発指針、カードゲームのテンプレートを提供します。
主な機能
- 01Textualアプリ構成のリファレンス
- 02ウィジェットとレイアウトのガイド
- 03CSSスタイルとテーマの資料
- 04キーボード・マウス・イベント処理
- 05インタラクティブなカードゲームテンプレート
活用シーン
- 01新しいTextual TUIアプリの構築
- 02アプリのレスポンシブなレイアウト設計
- 03キーボードとマウスの操作実装
- 04テンプレートを使ったカードゲームの試作
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ ypares/ agent-skills --skill textual-builderインストール後、Claude Code で/textual-builderを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
assets/card-game-template/app.pyapp.tcssREADME.mdreferences/basics.mdinteractivity.mdlayout.mdstyling.mdwidgets.md詳細
Textual Builder
概要
このスキルは、モダンな Web にインスパイアされた API でターミナルおよびブラウザベースのアプリケーションを作成するための Python フレームワークである Textual を使用して、洗練されたテキストユーザーインターフェース(TUI)を構築するのに役立ちます。リファレンスドキュメント、カードゲームのテンプレート、および Textual 開発のベストプラクティスが含まれています。
クイックスタート
基本的な Textual アプリ
from textual.app import App, ComposeResult
from textual.widgets import Header, Footer, Label
class MyApp(App):
def compose(self) -> ComposeResult:
yield Header()
yield Label("Hello, Textual!")
yield Footer()
if __name__ == "__main__":
app = MyApp()
app.run()
カードゲームテンプレート
カードゲームのプロトタイピングには、テンプレートをコピーしてください:
cp -r assets/card-game-template/* ./my-game/
cd my-game
python app.py
テンプレートには以下が含まれます:
- 表向き/裏向きの状態を持つインタラクティブな Card ウィジェット
- プレイヤーのカード用の Hand コンテナ
- ターン管理を備えたプレイエリア
- カードの選択とプレイのためのキーバインディング
- カスタマイズ可能なスタイリング
カスタマイズガイドについては assets/card-game-template/README.md を参照してください。
リファレンスドキュメントを読むべきタイミング
このスキルには包括的なリファレンスファイルが含まれています。タスクに応じて読み込んでください:
references/basics.md
読むタイミング: アプリ構造のセットアップ、リアクティブ属性の使用、マウントの処理、ウィジェットのクエリ、またはメッセージ/イベントを扱う場合。
内容:
- アプリ構造と compose メソッド
- リアクティブ属性とウォッチャー
- マウントと動的なウィジェットの作成
- ウィジェットのクエリ
- メッセージ、イベント、カスタムメッセージ
references/widgets.md
読むタイミング: ボタン、入力欄、ラベル、データテーブルなどの UI 要素を追加する場合、またはカスタムウィジェットを作成する場合。
内容:
- 表示ウィジェット(Label、Static、Placeholder)
- 入力ウィジェット(Button、Input、TextArea、Switch)
- 表形式データ用の DataTable
- レイアウトコンテナ(Container、Grid、Horizontal、Vertical)
- カスタムウィジェットの作成
- Header/Footer
references/layout.md
読むタイミング: レイアウトを設計する場合、ウィジェットを配置する場合、グリッドシステムを使用する場合、またはレスポンシブなサイジングを扱う場合。
内容:
- レイアウトの種類(vertical、horizontal、grid)
- グリッド設定(セルのスパン、行/列のサイジング)
- 配置とコンテンツのポジショニング
- ウィジェットを画面端にドッキング
- サイジング(fixed、relative、fractional、auto)
- スペーシング(margin、padding)
- スクロール
references/styling.md
読むタイミング: CSS スタイルを適用する場合、テーマ設定、ボーダーの追加、またはウィジェットの外観をカスタマイズする場合。
内容:
- CSS ファイルとセレクター
- 色(名前付き、16 進数、RGB、テーマ変数)
- ボーダーとボーダースタイル
- テキストスタイルと配置
- 不透明度とティント
- スタイル付きテキスト用の Rich マークアップ
- 疑似クラス(:hover、:focus など)
references/interactivity.md
読むタイミング: キーボードショートカットを実装する場合、マウスイベントを処理する場合、ユーザー操作に応答する場合、またはインタラクティブな動作を作成する場合。
内容:
- キーバインディングとアクション
- 動的なバインディングの更新
- マウスイベント(click、hover、enter、leave)
- キーボードイベント
- フォーカス管理
- ウィジェット固有のメッセージ
- カスタムメッセージ
- 通知とタイマー
一般的なワークフロー
新しい TUI アプリの作成
- 基本的なアプリ構造から始める(クイックスタートを参照)
- レイアウトを設計する(
references/layout.mdを読む) - ウィジェットを追加する(
references/widgets.mdを読む) - CSS でスタイリングする(
references/styling.mdを読む) - インタラクティブ性を追加する(
references/interactivity.mdを読む)
カードゲームのプロトタイピング
- カードゲームテンプレートをコピーする
- ゲームのカードプロパティに合わせて Card ウィジェットをカスタマイズする
- アクションメソッド内のゲームロジックを変更する
- メッセージハンドラーにゲーム固有のルールを追加する
app.tcssでカードとレイアウトをスタイリングする
インタラクティブな機能の追加
BINDINGSでキーバインディングを定義する- アクションメソッド(
action_*)を実装する - ウィジェットメッセージ(
on_button_pressedなど)を処理する - 状態管理にリアクティブ属性を使用する
- ウォッチャーで UI を更新する
ベストプラクティス
- 段階的な開発: シンプルに始めて、段階的に複雑さを追加する
- リアクティブな状態: UI に影響する状態には
reactive()を使用する - CSS の分離: スタイルはインラインではなく
.tcssファイルに記述する - ウィジェットの再利用: 繰り返し使うコンポーネントにはカスタムウィジェットを作成する
- メッセージのバブリング: メッセージの伝播を制御するには
event.stop()を使用する - 型ヒント: IDE のサポートを向上させるために適切な型ヒントを使用する
- ID とクラス: クエリとスタイリングには意味のある ID/クラスを使用する
インストール
pip install textual
# or
uv pip install textual
現在のバージョン: v0.86.0+ (2025 年 11 月時点、最新は v6.6.0)
リソース
references/
オンデマンドで読み込まれる包括的なドキュメント:
basics.md- コアコンセプトとアプリ構造widgets.md- ウィジェットのカタログと使用方法layout.md- レイアウトシステムと配置styling.md- CSS とテーマ設定interactivity.md- イベント、バインディング、アクション
assets/
card-game-template/- インタラクティブなカード、手札、ターン管理を備えたカードゲーム用の完全なスターターテンプレート
公式ドキュメント
このスキルで扱われていないトピックについては、以下を参照してください:
- https://textual.textualize.io/ (公式ドキュメント)
- https://github.com/Textualize/textual (GitHub リポジトリ)