使い方ガイドへスキップ
ink作者 Google Labs

Ink スキル。

Claude Code と Codex のための UI デザインスキル:JSON 仕様を Ink でインタラクティブなターミナル UI にレンダリングします。

  • Web & UI
  • ターミナル UI
google-labs-code/design.md · .agents/skills/ink/SKILL.mdSKILL.md
--- name: ink description: Ink terminal renderer for json-render that turns JSON specs into interactive terminal UIs. Use when working with @json-render/ink, building terminal UIs from JSON, creating terminal component catalogs, or rendering AI-generated specs in the terminal. --- ## Quick Start ## Spec Structure (Flat Element Map) ## Standard Components ## Visibility Conditions ## Dynamic Prop Expressions ## Event System
アップストリームファイルから読み込まれたフロントマターとセクション見出し(2026年9月14日)· 全9,805文字

01 できること

Claude Code と Codex における ink スキルの動作内容

概要、ワークフロー、出力。いずれもスキルの SKILL.md から読み取った内容です。

SKILL.md より2026年9月14日読取 · 実行記録ではありません

スキル自身の言葉で

このスキルは、JSON仕様をデータバインディング、表示制御、アクション、動的propsを備えたインタラクティブなターミナルコンポーネントツリーに変換するInkターミナルレンダラー @json-render/ink を扱います。zodを使ってInkスキーマからカタログを定義し、レジストリにカスタムコンポーネントのみを登録し、JSONUIProvider内でRendererを使ってレンダリングする方法、またはより高レベルなcreateRendererとstandardComponentsを使う方法を順に解説します。

読者は、ルートキーを持つフラットな要素マップ仕様形式、標準のレイアウト・コンテンツ・インタラクティブコンポーネントセット、状態とバインディング式、イベントシステムと組み込みのsetState、pushState、removeStateアクション、リピートリスト、useUIStreamによるJSONLストリーミング、プロバイダーの役割、主要なエクスポート、そして80〜120カラム幅などのターミナルデザインガイドラインについて学びます。

生成されるもの

  • JSON仕様からレンダリングされたインタラクティブなターミナルコンポーネントツリー。
  • 仕様作成のためにカタログから生成されたAIシステムプロンプト。
  • 再レンダリングを制御する、フレームワークに依存しないインメモリのStateStore。
プロンプト例を見る ↗

仕組み

  1. 01
    Inkスキーマからカタログを定義する

    @json-render/coreからdefineCatalogをインポートし、許可したいコンポーネントとアクション定義とともにInkスキーマを渡します。

  2. 02
    カスタムコンポーネントのみを登録する

    defineRegistryはカタログを受け取りますが、標準コンポーネントの実装はすでに組み込まれているため、カスタムのものだけがInk要素にマッピングされます。

  3. 03
    Rendererをプロバイダーでラップする

    JSONUIProviderは、状態・表示制御・アクション・フォーカスの各コンテキストをRendererに提供し、Rendererは仕様とレジストリを受け取ります。

  4. 04
    仕様をフラットな要素マップとして作成する

    仕様は最初の要素を指定するルートキーと、props、children、任意のイベントバインディングを持つ型付きノードのelementsマップを持ちます。

  5. 05
    式でpropsをバインドする

    どのprop値も、ハードコードする代わりに、レンダリング時に状態、リピートアイテム、条件、文字列テンプレートから解決できます。

  6. 06
    仕様を段階的にストリーミングする

    useUIStreamはAPIエンドポイントからJSONLパッチストリームを受け取り、spec、send、isStreamingを呼び出し元に公開します。

02 適合性を確認

ink スキルを使用するタイミング

この種の UI デザインが必要な場合は、Claude Code または Codex で ink スキルを使用してください。以下の適合性と制限は、スキル自身のファイルから引用されています。

適している場合

  • @json-render/inkを使ってJSON仕様からターミナルUIを構築するチーム向け。
  • 標準セットに加えて、独自のターミナルコンポーネントカタログを必要とするプロジェクト向け。
  • AI生成の仕様をブラウザではなくターミナル上でレンダリングする用途。
  • 入力、選択、トグル、確認プロンプトを備えたインタラクティブなターミナルフォーム。
  • APIエンドポイントから生成された仕様をターミナルへ段階的にストリーミングする。

境界を知る

  • これはブラウザやReact DOMレンダラーではなく、出力はInkターミナルコンポーネントツリーです。
  • 横幅の広い水平メインレイアウトは推奨されず、縦方向の構造が優先されます。

提供すべきもの

  • JSON specRendererにはspecオブジェクトが、それを解決する対象のレジストリと一緒に渡されます。
  • カタログcreateRendererはカタログモジュールから構築され、standardComponentsおよび任意のオーバーライドと共に展開されます。
  • コンポーネントの実装カスタムコンポーネントはdefineRegistry内でInk関数にマッピングされ、specからpropsを受け取ります。
  • カスタムコンポーネントのスキーマ各カスタムコンポーネントのエントリはzodオブジェクトでpropsを宣言するため、カタログは型安全な状態を保ちます。
  • 初期状態の値アクティブなタブなどの制御された状態は、stateプロパティとしてrendererに渡されます。

03 スキルの内部

inkスキルがClaude CodeとCodexに与えるルール

SKILL.md がエージェントに設定する 8 つの具体的な指示・既定値・制限 — 結果を変える部分です。

  1. レイアウトのデフォルトはRow

    flexDirection、padding、gapを使ったレイアウトにはBoxを使用してください。設定しない限りflexDirectionはrowになるため、column方向を期待している人には意外に感じられます。

  2. 双方向バインディングにstatePathは使用しない

    コンポーネントはバインディング用のstatePathプロパティを持ってはいけません。代わりに、フォームコンポーネントの自然な値プロパティにバインディング式を設定してください。

  3. NewlineはColumn Boxの内部でのみ使用

    Newlineコンポーネントは空行を挿入するもので、flexDirectionがcolumnであるBoxの内部に配置する必要があります。

  4. 80〜120列を想定したデザイン

    ターミナルの幅はおおよそ80〜120列であるため、メイン構造にはflexDirectionをcolumnにした縦方向のレイアウトを優先してください。

  5. 名前付きターミナルカラーを使用

    色は名前付きのターミナルパレットから選んでください:red、green、yellow、blue、magenta、cyan、white、gray。

  6. 外部ストアはPropsを上書きする

    StateStoreがStateProviderまたはJSONUIProviderに渡された場合、initialStateとonStateChangeは無視されるため、ストアが唯一の信頼できる情報源となります。

  7. グルーピングのためのborderStyle

    視覚的なグルーピングにはBoxのborderStyleプロパティを使用してください。選択肢としてsingle、double、round、boldがファイル名に記載されています。

  8. Tabsがmulti-viewレイアウトを制御する

    multi-viewのUIには、個別のspecをレンダリングするのではなく、Tabsを使用し、子コンテンツにvisible条件を付けてください。

04 実際に使う

Claude Code または Codex に ink をインストールする

npx skills add コマンドを実行し、エージェントで最初のタスクを実行して、結果をチェックリストで確認します。

Claude Code、Codex、または使用中のエージェントに ink を追加する

プロジェクトで実行してください。インストーラーが、どのエージェントに追加するかを尋ねます。

Terminal
npx skills add https://github.com/google-labs-code/design.md --skill ink

.agents/skills/ink/SKILL.md 用の汎用的な skills CLI 形式です。リポジトリによっては独自のパスが記載されている場合があります。

スキルに最初の UI デザインタスクを与える

スキル自身の用語で記述されています。角括弧の部分はご自身の内容に置き換えてください。

Starter prompt
Build a terminal dashboard spec for [project name] using the Ink schema. Use a Box with flexDirection column containing a Heading, a Divider, a Table of [rows], and a StatusLine. Add a Tabs component bound with $bindState to /activeTab, show each view through a visible condition, and wire a ConfirmInput to a setState action that flips /confirmed.

出典:SKILL.md をスキル自身の用語に沿って記述。

最初の結果を確認

SKILL.md 自体が正しい結果として示しているもの:

  • flatToTreeでフラットな要素マップを変換し、すべての要素がtreeに解決されることを確認してください。
  • バインディングが正しいパスを指しているか確認する際は、useStateValueで単一の値を読み取ります。
  • VisibilityProviderのステートドリブンなレンダリングに依存して、条件付きセクションが実際に切り替わることを確認します。
  • 外部ストアに書き込み、ターミナルが自動的に再レンダリングされることを確認します。
  • 双方向バインディングが$bindStateまたは$bindItem式を通じてuseBoundPropを経由していることを確認します。
  • ProgressBarの値が0〜1の範囲内にとどまっているか確認します。

OpenDesignではSKILL.mdリンクからinkをインポートします:Plugins → Add → Skill → Import from link、その後トップバーで選択します。

05 オープンソースで追跡可能

ソース、ライセンス、検証

このページの情報の出所と、最終確認日時です。

Repository
github.com/google-labs-code/design.md ブランチ main
スキルファイル
.agents/skills/ink/SKILL.md 検証時に記録されたコンテンツチェックサム。コミット 9bf8eae
License
Apache-2.0 LICENSE より
リポジトリスター数
27,894 GitHub スナップショットは 2026-09-14 に google-labs-code/design.md リポジトリ全体を対象に取得されました。ink の評価や使用数ではありません。
OpenDesign により検証済み
2026-09-14 ソースファイル、パス、ライセンステキスト、スター数を確認済み。OpenDesign 本体にはバンドルされていません(2026-08-28 確認)。このページには実行記録がありません。

SKILL.md の中身

  1. クイックスタートインポート、カタログの作成、カスタムコンポーネントレジストリ、そしてプロバイダーでラップされたRendererです。
  2. スペック構造(フラットエレメントマップ)ルートとelementsのJSON形式で、型付きノード、props、childrenを持ちます。
  3. 標準コンポーネントレイアウト、コンテンツ、インタラクティブコンポーネントを、そのイベント、バリアント、オプションと共に一覧化しています。
  4. 表示条件$state、eq、not、そして$andと$orコンビネーターを使ったvisible構文です。
  5. 動的プロパティ式$state、$bindState、$bindItem、$cond、$template、そしてstatePathを持たないというルールです。
  6. イベントシステムemitは名前付きイベントを発火させ、要素のonフィールドを通じてアクションにマッピングされます。
  7. 組み込みアクションsetState、pushState、removeStateは、statePathパラメータと共に自動的に処理されます。
  8. Repeat(動的リスト)repeatはstate配列をレンダリングし、children内で$itemと$indexが利用可能になります。
  9. ストリーミングuseUIStreamはJSONLパッチストリームからスペックを段階的にレンダリングします。
  10. プロバイダーStateProviderとActionProviderから、統合されたJSONUIProviderまで、6つのプロバイダーがあります。
  11. createRenderer(高レベルAPI)standardComponentsとすべてのプロバイダーを組み込んだカタログから、コンポーネントを作成します。
  12. ターミナルUIデザインガイドラインレイアウト、幅、borderStyle、色、見出し、タブ、スパークライン、チャートに関する規約です。
スキル自身による説明
「JSON 仕様をインタラクティブなターミナル UI に変換する json-render 用の Ink ターミナルレンダラー。@json-render/ink を使用する場合、JSON からターミナル UI を構築する場合、ターミナルコンポーネントカタログを作成する場合、または AI 生成の仕様をターミナルでレンダリングする場合に使用します。」

SKILL.md からの front-matter 説明。完全なファイルは約 9,805 文字です。GitHub で完全なファイルを読む。

06 インストールする前に

inkスキルに関する質問

回答は 2026-09-14 時点で読んだ SKILL.md に基づくもので、記録された実行結果によるものではありません。

スペックはどのような形をしていますか?

フラットなエレメントマップです。rootキーが最初の要素を指定し、elementsオブジェクトがすべてのノードをtype、props、children配列と共に保持します。

独自のステート管理を接続できますか?

できます。StateProviderまたはJSONUIProviderにStateStoreを渡すとコントロールドモードになり、その場合initialStateとonStateChangeは無視されます。

これはブラウザでレンダリングされますか?

いいえ。これはInkターミナルレンダラーであるため、結果はDOMツリーではなく、インタラクティブなターミナルコンポーネントツリーになります。

モデルが仕様を自動生成してくれますか?

はい。./server エクスポートはカタログをAIシステムプロンプトに変換し、useUIStream は結果として得られるJSONLパッチを到着順にストリーミングします。

Ink

実際の UI デザインタスクで ink を実行します。

OpenDesign をダウンロードし、SKILL.md リンクから ink をインポートして、上記のプロンプトを貼り付け、結果の前にプランを確認してください。

ターミナル
npx skills add https://github.com/google-labs-code/design.md --skill ink

OpenDesign デスクトップ版

ひとつのデザインシステムで、すべての制作物をブランドらしく

完全な Vibe Design Workspace で、同じブランドルールを Web サイト、スライド、操作できるプロトタイプ、ダッシュボード、画像、HTML 動画に展開できます。ローカルの Codex、Claude Code、Cursor などを接続して無料で制作しましょう。

  • Web、スライド、プロトタイプ、ダッシュボード、画像、動画
  • 140+ のデザインシステムと完全なテンプレート/スキルライブラリ
  • ローカル Codex と 21+ のコーディングエージェントを接続 · 無料
無料ダウンロード

macOS と Windows に対応