ターミナルでの実行

text runで同じダッシュボードをターミナルの全画面で実行します。

この章のアプリはコンソールで動作しています。⌘⌥JCtrl+Shift+J⌘⌥KCtrl+Shift+K⌘⌥Cで開き(先に開発者向け機能を有効化)、試してください。
章の動画を見る3:31

この章の内容

  • `text run`
  • `q` で終了
  • 独自のCLI
  • 相違点

text run は同じアプリをターミナルで実行します。レイアウト、コンポーネント、キーマップ、ルートハンドラーを共有し、出力には %c CSSスパンの代わりにトゥルーカラーANSIを使います。

text run

スクリプトを追加して実行します。

package.json+2-1json
  "scripts": {    "dev": "text dev",    "build": "text build",削除:    "start": "text start"追加:    "start": "text start",追加:    "tui": "text run"  },
bun run tui                        # render ./app at /bun run tui -- --path /deployments # start on another route

text run は app/ 内のすべてのファイルをインポートし、インメモリーの履歴でApp Routerをマウントして全画面に描画します。<Link>、useRouter()、notFound()、redirect() はそのまま動作し、同一オリジンの fetch("/api/…") 呼び出しはプロセス内でルートハンドラーを実行します。Ctrl+C で終了し、スクロールバックを復元します。Bunが必要です。

q で終了

ターミナルユーザーは q での終了を想定しています。useApp().exit() はアプリをアンマウントしてターミナルを復元します。ブラウザーではコンソールアプリをアンマウントします。

app/layout.tsx+3tsx
追加:import { useApp } from "@textjs/app";export default function RootLayout({ children }: { children?: ReactNode }) {追加:  const app = useApp();  useInput((e) => {    if (e.key === "backspace") router.back();追加:    if (e.input === "q") app.exit();  });

独自のCLI

単一のコンポーネントには renderToTerminal を使います。App Routerを使わずに1つの要素をマウントし、fetch("/api/…") がルートハンドラーに届くのは text run での実行時のみなので、コンポーネントにデータを渡します。

cli.tsxtsx
import { renderToTerminal } from "@textjs/app/terminal";import { Table } from "@textjs/app";import { DEPLOYMENTS } from "./lib/deployments";const columns = [{ key: "commit", header: "Commit" }, { key: "project", header: "Project", width: 10 }];const app = await renderToTerminal(<Table columns={columns} rows={DEPLOYMENTS} autoFocus />);await app.waitUntilExit();

bun cli.tsx で実行します。DeploymentsPage は行データを取得するため、text run が必要です。

相違点

ターミナルは再描画が速く(約15fpsに対して最大60fps)、ドッキングされたコンソールではなくウィンドウに合わせてグリッドのサイズを調整します。画像にはURLではなくピクセルデータが必要です。このダッシュボードを含め、それ以外はすべて同じコードです。

試す

これは章の終わりに完成するAcme Deploysで、DevToolsで動作しています。パッドをクリックして、以下のキーを使います。

▼ 09 · ターミナルでの実行

コンソールを開く

⌘⌥J
CtrlShiftJ
⌘⌥K
CtrlShiftK
⌘⌥C

アプリはDevToolsに描画されます。まずSafariの「設定」→「詳細」で「Webデベロッパ用の機能を表示」をオンにします。 次にここをクリックして、Enterを押します。

デスクトップで開く

このアプリはDevToolsのコンソールに描画されるため、デスクトップブラウザーが必要です。

クイズ

2問

すべての問題に回答すると章を完了できます。

アプリをターミナルで実行すると何が変わりますか?

 

アプリ自身を終了するにはどうしますか?