端末UI部品の振る舞いを共通仕様に記述し、複数の言語やフレームワーク向けのコードを生成する仕組みが公開された。TUIKitは実装先ごとの定義を使ってプロンプトを作り、LLMエージェントにコード生成を担わせる。
部品の振る舞いをMarkdownの共通仕様に置く
GitHubが公開した端末UI部品の開発システム「TUIKit」では、各部品を言語に依存しないMarkdown仕様で定義する。仕様には振る舞いのテストが伴い、部品の動作を実装言語とは別に記述する。
部品仕様には、振る舞いやアクセシビリティ上の要件に加え、色などを役割で指定するデザイントークン、テスト、表示例を含める。実装先が異なっても、部品に求める条件の出発点は共通になる。
実装先の定義が共通仕様を各フレームワークへ対応付ける
共通仕様をコードに移す際は、実装先ごとの仕様が言語やフレームワークへの対応付けを定める。部品の条件と実装先固有の扱いを別々に記述する構成だ。
実装先には、GoのBubbleteaとLipgloss、TypeScriptのInkとReact、Bun上のTypeScriptによるOpenTUIとReact、RustのRatatuiとCrosstermが列挙されている。同じ部品仕様を、それぞれの実装先の定義と組み合わせる。
変更された仕様から生成用プロンプトを組み立てる
コンパイル用スクリプトは変更された仕様を検出し、指定された実装先向けに自己完結型のプロンプトを生成する。このプロンプトが、共通仕様と実装先の条件をコード生成工程へ渡す。
LLMエージェントはプロンプトを読み、対象のフレームワークに合わせたコードを生成する。TUIKitでいう「コンパイル」は、このエージェントによる生成を含む工程を指す。
生成コードと仕様の状態を分けて管理する
生成されたコードは、実装先ごとのdistディレクトリへ出力される。部品の仕様はそのまま残り、生成物とは別に管理される。
生成コードの動作を確認した後は、lockコマンドでコンパイル済み仕様のハッシュを記録できる。これにより、どの版の仕様をコンパイル済みとして扱うかが実装先ごとに残る。