27日目。残り4日。もう安全策を取っている場合じゃない。
このチャレンジの終盤は、1日では到底無理そうなものに挑みたかった。ターミナルエミュレータはまさにそういうやつだ。ターミナルのふりをするWebのおもちゃじゃない。実際のシェルセッションを起動し、60fpsでレンダリングし、vimからhtopまで何でもこなす、本物のネイティブデスクトップアプリだ。
プロンプト#
“Tauri 2とRustを使ってターミナルエミュレータを作って”
これがコアの依頼。それ以外はイテレーションの中で生まれた。
どう作ったか#
これは大物だった。Watchfireが作業を19個のタスクに分解してくれて、そのすべてが必要だった。ターミナルエミュレータの構築は簡単じゃない。PTY管理、シェル統合、入力処理、レンダリングパフォーマンス、他にも考えもしなかったことが山ほどある。
タスクリストはこんな感じだった:
- 基本的なPTYサポート付きのTauri 2 + Viteプロジェクトをスキャフォールド
- タブの開閉、リネーム対応の複数タブ機能
- 水平・垂直の分割ペイン
- テーマ、フォント、シェル設定の設定パネル
- UIの磨き込み、スクロールバック、シェルの修正
- 自動リリースのためのGitHub Actions
- インラインAIコマンド提案
- 透明度、ブラー、ウィンドウクロームのビジュアル調整
- ターミナル出力内のクリッカブルリンクとスマート検出
- シェルプロファイルとクイックアクション
- 確認ダイアログ付きの危険なコマンド警告
- 長時間実行コマンドの通知
- リッチなCtrl+Rオーバーレイによるファジー履歴検索
- 履歴ファイルからのインラインゴースト提案
- クイックフィックスアクション付きのインテリジェントエラー検出
- 自然言語からコマンドへの変換
- コマンド説明とAI出力要約
- 折りたたみ可能なセクションによるブロックベースの出力グルーピング
- スマート機能の設定パネルと統合テスト
その後、CI/CDの修正が待っていた。TauriをmacOS、Linux、Windows向けにGitHub Actionsでビルド・署名させるのは、それだけで一つの冒険だ。3プラットフォームすべてのインストールスクリプトも。
出来上がったもの#

本物のターミナルだ。 シミュレーションじゃない。RustのポータブルPTYクレートを使って実際のシェルセッションを起動する。bash、zsh、fish、設定してあるものなら何でも。フルPTYサポートなので、vim、htop、対話型プロンプト、すべて動く。

WebGLアクセラレーション付きxterm.js。 レンダリングが速い。体感できるレベルで速い。スクロールバックは10,000行まで対応していて、もたつかない。WebGLレンダラーは標準のキャンバスアプローチと比べて本当に違いが出る。
タブと分割ペイン。 Cmd+Tで新しいタブ、Cmd+Dで垂直分割、Cmd+Shift+Dで水平分割。タブのリネームもできる。ペイン管理はモダンなターミナルから期待する通りに動く。

スマート機能ツアー付き。 アプリを初めて開くと、ガイドツアーでインテリジェント機能を紹介してくれる。

スマート機能には、コマンド履歴からのゴースト提案、Ctrl+Rでのファジー履歴検索、rm -rfやgit push --forceのような危険なコマンド警告、自然言語からコマンドへの変換が含まれる。




フル設定パネル。 フォントファミリー、フォントサイズ、カーソルスタイル、カラーテーマ。Dracula、Solarized、Monokaiなどが同梱されている。背景ブラー、透明度、シェル引数も設定できる。

スクロールバック内のコマンド検索。 Ctrl+Fで検索オーバーレイが開き、ファジーマッチングでターミナル履歴を検索できる。

ブロックベースの出力グルーピング。 長いコマンド出力は折りたたみ可能なブロックにグループ化される。コマンドが2,000行を吐き出して要点だけ知りたい時のための「出力を要約」ボタンもある。

picoも動く。 vimも動く。ターミナルが実行すべきものはすべて動く。なぜならこれはターミナルだから。

DockerのAIアシスタントも動く。 フルインタラクティブなTUIアプリケーションも問題なく動作する。


Claude Codeもこの中で動く。 このターミナルでClaude Codeを実行して、ターミナル自体のさらなる機能を構築した。これはかなり特殊なインセプション感があった。

インストール方法#
これはネイティブアプリであって、ウェブサイトじゃない。Vercelデプロイはなし。GitHubリリースページから最新版を取得するか、インストールスクリプトを使おう:
# macOS / Linux
curl -fsSL https://raw.githubusercontent.com/nunocoracao/Vibe30-day27-terminal/main/install.sh | bash# Windows (PowerShell)
irm https://raw.githubusercontent.com/nunocoracao/Vibe30-day27-terminal/main/install.ps1 | iexソースからビルドしたい場合はこちら:
git clone https://github.com/nunocoracao/Vibe30-day27-terminal.git
cd Vibe30-day27-terminal
npm install
npm run tauri devRust 1.77.2以上とNode.js 20以上が必要。
数字で見る#
- 19個のWatchfireタスク スキャフォールドからスマート機能統合まで
- Tauri 2 + Rustバックエンド ポータブルPTYで本物のシェルセッション
- WebGL付きxterm.js 高速レンダリング
- 6種類以上のカラーテーマ Dracula、Solarized、Monokaiなど
- CI/CDパイプライン GitHub ActionsでmacOS、Linux、Windows向けビルド
- インストールスクリプト 3プラットフォーム全対応
27日目の所感#
ターミナルエミュレータは本当に多くのレイヤーに触れる。RustでのPTY管理。Tauriを通じたRustバックエンドとJavaScriptフロントエンド間のIPC。パフォーマンスのためのWebGLレンダリング。CI/CDによるクロスプラットフォームビルドとコード署名。OSとアーキテクチャを検出するインストールスクリプト。
そしてその上にスマート機能を追加した。ゴースト提案、ファジー検索、危険なコマンド警告、AI統合。これらはギミックじゃない。テスト中にうっかり破壊的なコマンドを打った時、危険なコマンド警告が実際に役立った。
これがそもそも動くこと自体がすごい。Claude Codeを実行して自分自身のさらなる機能を構築できるほどうまく動くのは、また別次元の話だ。明日すぐにiTermを置き換えるつもりはないけど、「バイブコーディングしたターミナル」と「プロダクションターミナル」の差は、予想より小さかった。
30日中27日目。あと3日。
これは30 Days of Vibe Codingの27日目です。AI支援コーディングで30日間に30個のプロジェクトを出荷する挑戦をフォローしてください。







