開発ストーリー

Ultenix 開発ストーリー

ターミナルは完成した道具だと思っていました。作り直すことになるとは思っていませんでした。色分けが破綻した日から、80日ぶんの記録です。

iTerm2 で足りていました

長く iTerm2 を使っていました。ウィンドウの分割がしやすく、軽く、プロファイルごとに背景の色を変えられる。 LLM が返事をしたときに macOS の通知を出すこともできました。不満はありませんでした。

普段4つ以上のプロダクトを並行して開発しています。だからプロダクトごとにターミナルの背景色を決めて、 色で見分けていました。青は API、緑はサイト、というふうに。しばらくは、それでうまくいっていました。

4分割されたターミナル。区画ごとに背景色だけが違い、名前もアイコンも無い
プロダクトごとに背景色を決めて、色で見分けていました。区画に名前は付きません。色だけが手がかりです。

色が、破綻しました

最初に崩れたのは、作業の都合で別のディレクトリへ移る必要が出てきたときです。 色はプロファイルに付いているので、中身が変わっても色は変わりません。青いペインの中で、別のプロダクトの作業をしている。 そうなると色は、もう何も教えてくれません。

次に、1つのタブを8分割しても足りなくなりました。2つ、3つとタブを行き来するようになると、 色の数が足りません。同じ色が別のタブにも出てきます。

そして、こう思う回数が増えました。

あれ、いまこのプロジェクトで何の作業やってたっけ。

特に一度寝て、日をまたいだときです。8枚のペインが並んでいて、どれも同じように何かを出している。 どれが何なのか、自分で書いたはずの色を見ても、思い出せない。

4分割されたターミナル。4枚とも同じ青で、中身だけがそれぞれ違う
色はプロファイルに付いています。中で別のリポジトリを見ていても、色は変わりません。4枚とも同じ青のまま、していることは違う。

足りなかったのは、色ではありませんでした

必要だったのは2つです。これはどのプロジェクトなのかと、ここで何をしていたのか。 色は前者の代わりにはなりますが、数が増えると足りなくなります。後者については、最初から何も答えていません。

だから Ultenix では、プロファイルにアイコンを付けられるようにしました。色より速く見分けがつきます。 背景に画像も置けるようにしました。実用の理由だけではありません。8枚に囲まれて何時間も過ごす場所なので、 気持ちが上がるほうがいい。

分割したペインは、別のタブへ動かせるようにしました。作業のまとまりは日によって変わるので、 あとから並べ直せないと、結局また分からなくなります。

8つに分割して同時に動かしている画面。ペインごとにアイコンと配色と背景が違う
いまの Ultenix。ヘッダにアイコンとプロジェクト名、そのペインでいま何をしているか。帯の色が状態で、入力中のペインだけ枠が出る。db のペインの ←api は、api から頼まれた作業であることを示しています。

もう1つ、言いにくい理由

iTerm2 に不満があったわけではありません。ただ、開いてワクワクすることはありませんでした。 いかにもエンジニアの業務ツール、という顔をしています。よくできた道具ですが、道具以上のものではない。

1日のうち最も長くいる場所なのに、そこが楽しくないのは、よく考えるとおかしい話です。 エディタには気に入った配色を入れるのに、ターミナルだけは黒いままだったりする。

だから Ultenix では、あらかじめ11種類のテーマを用意したうえで、色は1つずつ自分で決められるようにしました。 既製のものは出発点で、そこから先は好きにできます。背景には画像も置けて、それをペインごとに変えられます。 プロファイルにアイコンも付きます。 使っていて気持ちが上がる。それが作りたかったことの1つです。

飾りだとは思っていません。8枚に囲まれて何時間も過ごす場所の気分は、出てくるものに効きます。

用意してある11種類のテーマで、同じ画面を並べたところ
用意してある11種類。文字の色までテーマで変わり、明るいものも入っています。ここが出発点で、色は1つずつ自分で決め直せます。背景に画像も置けて、どちらもペインごとに変えられます。

作業を、止めない

もう1つ、ヘビーユーザーなら分かってもらえると思うことがあります。macOS 自体が不安定になる日があります。 何日も起動しっぱなしで、8枚に何かを走らせていれば、そういう日は来ます。

そのとき、再起動をためらう理由が「作業が全部消えるから」であってはいけないと思いました。 だから Ultenix は、再起動してもそれまでのペインの構成を戻します。そのうえで、 Claude Code のセッションを復活させる --continue を自動で投げます。

つまり、心置きなく再起動できます。戻ってくれば、さっきの続きから始められます。 この製品が言いたいことを一言にすると、あなたの作業を止めない、になります。

再起動のあと、8つのペインが順に戻っていく画面
再起動しても、配置はそのまま戻ります。Claude Code のセッションには --continue を自動で投げるので、さっきの続きから始められます。

並走が増えると、通知が主役になりました

いま私は、1画面を8分割して最低8ペイン、多いときは2画面で16ペインほどを同時に動かしています。 Ultenix を作る前には届かなかった数です。そこで実感したことがあります。 並走の数が増えるほど、通知の重要さが増します。

8枚を睨み続けることはできません。人は1つのことしか見られない。 だから、呼ばれたときに知らせてもらうしかない。画面を見張るのではなく、呼ばれるのを待つ形に変わりました。

横になっても、止めたくなかった

iPhone に出した理由は、もっと単純です。

長く続けていると、体がきつくなります。少し横になりたい。ベッドに行きたい。 でも、8台が走っている最中です。ここで机を離れると、全部そこで止まります。 返事を待ったまま、朝まで止まっていることもある。

休みたいのに、休むと止まる。それが嫌でした。

だから、寝転んだまま続けられるようにしました。呼ばれたら電話が知らせて、 そこで一言返せば、また走り出す。体を起こさなくていい。

遠隔操作がしたかったわけではありません。休んでいる間も、止めたくなかっただけです。

暗い部屋。ベッドで電話を見ている人。少し離れた机では、8分割の画面が光ったまま動いている
休んでいる間も、向こうは動いています。呼ばれたら、寝転んだまま一言返せばいい。
処理中・返事待ち・完了・待機の4つの印
返事待ちを見分けるのが要でした。LLM は返事を待っている間も、考えているときとまったく同じように前景に居続けます。

80日の記録

  1. 6月16日 作り始めた

    Tauri と xterm.js で土台を組み、その日のうちにタブ、ペイン分割、設定画面、そして「日本語で頼む」入力まで入れた。最初から AI を動かす前提だった。

  2. 同じ日 誰のために作るかで迷った

    AI の入口を非エンジニア向けに作り直し、その数時間後にエンジニア向けへ戻している。常時出しているバーにするか、呼び出す palette にするかも往復した。

  3. 7月29日 待っていることに気づいた

    「AI の応答待ちを通知(ベル / OSC 777 / 無出力検知)」。エージェントは走るだけではなく、止まってこちらに聞いてくる。並走が増えるほど、そこが効いてくる。

  4. 8月18日 外に出た

    見張るための道具になったのだから、机の前にいないときこそ要る。LAN の中の接続から始めて、iPhone のアプリまで作った。

  5. 9月3日 126 コミット、80日

    いまも毎日これで働いている。

自分のためだけに作ったわけではありません

普段、いろいろな方の AI 導入を手伝っています。そこでいつも同じことを言ってきました。 ターミナルを使えるようになると、作業は一気に速くなります、と。

ですが、うまくいきませんでした。IT のエンジニアではない方にとって、 ターミナルという画面そのものに、強い抵抗があります。黒い画面に文字だけが並んでいて、 何を打てばいいのか、打ったら何が起きるのか分からない。そこで止まってしまう。

もったいないと思いました。中で動いているエージェントは、その人の仕事をいちばん変えるものなのに、 入口の見た目だけで諦めてしまう。

だから Ultenix には、その方たちのための仕組みも入れました。 日本語で書けばコマンドになること。声でも頼めること。何手もかかる作業を1手ずつ案内すること。 そして、戻せない操作は必ず手前で止まること。知らないから壊す、という怖さを消すのが目的です。

これらは無料で使えます。有料にすると、いちばん必要な人に届かないからです。

画面のいちばん下にある、日本語で頼むための入力欄
いちばん下にこれがあります。コマンドを知らなくても、やりたいことを日本語で書けば動きます。
取り消せない操作の確認
そして、戻せないものは必ず手前で止まります。赤い帯が出て、下のチェックを入れるまで実行のボタンは押せません。

これから増えると思っていること

エージェントが賢くなるほど、一度に長く走るようになります。長く走るということは、 こちらに聞いてくる間隔が伸びるということです。

そうすると、人が待っている時間が増えます。待ち時間は死んだ時間なので、埋めようとする。 埋め方は1つしかありません。もう1台走らせることです。

だから並走は、これからもっと増えると思っています。 そのときに必要なのは、速いターミナルでも、賢いターミナルでもありません。 何台走っていても、呼ばれたことを見落とさない場所です。Ultenix はそのために作りました。

設計思想を読む →