ハクソク

世界を動かす技術を、日本語で。

TUIsが再び注目される理由

概要

  • 現在、Terminal User Interfaces(TUI)が再評価されている状況
  • Windows、Linux、macOS それぞれのネイティブUI戦略の混乱と課題
  • Electronアプリの普及とその一貫性・ユーザビリティ問題
  • TUIの利点と現代UI設計への回帰の必要性
  • ユーザーインターフェース設計理論の重要性と今後の提言

TUIの復権とUIの多様化

  • **Terminal User Interfaces(TUI)**の再評価、即時フィードバックと自動化容易性が主な魅力
  • DHHのOmarchyに見られる3種類のUI:TUI、Webアプリ、ネイティブアプリの混在
  • 10年前のコードエディタ界隈でも、ネイティブからElectron系への移行と、vim/emacsへの回帰が発生
  • WindowsのGUI戦略の迷走、複数APIの乱立と一貫性の欠如
    • MFC, OLE, COM, ActiveX, Winforms, WPF, Silverlight, WinUIs, MAUIなどの歴史
    • 新層ごとに前世代の機能や一貫性が失われる傾向
  • LinuxのUI分裂は設計思想の違いによるもの
    • GTKとQtが主流、クロスプラットフォーム対応の試みも限定的
    • 異なるツールキット間でも見た目の一貫性はある程度保たれている
    • 膨大な組み合わせのテスト難易度から、ネイティブアプリ開発は敬遠されがち
  • macOSはかつて一貫したUI設計が特徴だったが、近年はガイドライン無視や一貫性の崩壊が進行
    • Fittsの法則無視やメニューの乱雑化など、使い勝手の低下

Electronアプリの課題と現状

  • Electronアプリはメモリ消費や一貫性のなさ、キーボード操作性の低さが問題
    • メニューやショートカットの非標準化、UI統合性の欠如
    • Slackなど一部は努力しているが、全体的には改善の余地大
  • 新規UIツールキットの試みも失敗傾向
    • GoogleのFlutter UIやZedのGPUIなど、OS統合性や市場規模の壁
    • 高速描画よりもOSとの連携や一貫性を重視する声

TUIの強みと現代的役割

  • TUIは高速、OS横断性、自動化容易性が特徴
    • X forwarding不要でリモート運用も簡単
    • AppleやMicrosoftの統一感喪失後、TUIが「最後の砦」として機能
    • ClaudeやCodexなど、コマンドライン中心の新世代ツールの台頭
  • アプリケーション間の一貫性が失われる中、TUIのシンプルさが再評価

良いUI設計への回帰と今後の提言

  • インターフェースは思考量を減らすことが最重要
    • チェックボックスやショートカットなど、直感的な操作性の重要性
    • 一貫した操作体験(例:Command+Cでコピー)がユーザー負担を減らす
  • UI設計理論(Nielsen, Norman, Johnsonなど)の学習必須化
    • ソフトスキル扱いせず、ソフトウェア工学カリキュラムの必須要素に
    • UIが不合理なプロジェクトは不合格とすべき
  • OS・ツールキット開発者への要望
    • 開発者が使いたくなるアクセシブルなツールキットの提供
    • 参入障壁の低減と長期的なプラットフォーム維持
    • クロスプラットフォームの絶対性は求めないが、選択肢としての価値
  • ElectronやTUIへの依存減少のための基盤整備の必要性

結論

  • UIの一貫性・使いやすさの回復が今後の最大課題
  • TUIの価値再認識とともに、良いUI設計への回帰が求められる
  • 開発者・ツールキット提供者・教育機関が一体となった取り組みが必要

Hackerたちの意見

それに関しては、複雑なシステムの開発者としてLARP(ロールプレイ)できるのも一因だと思う。インターフェースがあって、まるでl33t h4xx0rsみたいに見えるから、実際には15回「続ける」を押してるだけなのにね。
結局、これが全てだと思う。みんなが自分で作ったTUIやclaude/codex CLIでやってることは、簡単なIDEや見やすいUIでやった方が多分簡単だし、でももっとやってる風に見えるのがいいんだよね。みんな、ターミナルにこだわる「合理的な」理由を持ってるけど、実際にはもうコーディングしてないのにね。どうしても必要ならターミナルの横にウィンドウを置くのも簡単だし、まあ、自由にやればいいんじゃない?自分が幸せならそれでいいし、みんなマネージャーになっていくしね。私もサイバーパンクなインターフェースが好きだよ、必要なくてもね :)
悪いUIがソフトウェア開発をずっと悩ませてきた。原因はAIじゃない。良いUIデザインはスキル(またはアート?)であって、後付けじゃないんだ。でもほとんどの人はそう見てないから、今の状況になってるんだよね。
> まるでl33t h4xx0rsみたいに見えるから、実際には15回「続ける」を押してるだけなのにね。 それ、めっちゃ共感する。絶対に、全てが膨れ上がったElectronアプリになるのに反発する要素があると思う。もしまだ起こってないなら、アプリの中には、TUIレイヤーをフロントエンドとして実装したElectronアプリを真剣に出荷するものが出てくるだろうね。
Claudeを--dangerously-skip-permissionsで動かしてるけど、すごく快適で、戻れなくなりそう。15回続けるボタンを押すのは意外と重いけど、もうやらなくていいって気づくまでは気にならない。
2000年代初頭から開発に関わってきたけど、開発がもっとアクセスしやすくなったのは素晴らしいと思う。古い世代が「開発者であること」を制限しようとするのはあまり好きじゃないな。エンジニアになるにはもっと資格が必要だと思うし、昔からそうだった。でも、自分が開発者だと感じるなら、それはそれでいいと思うよ!
ちなみに、これが私が時々Vimを使う理由だよ。JetBrainsではめちゃくちゃ生産性が上がるけど、時々はヒロ・プロタゴニストになりたい気分になるからね。だからVimを使うんだ。
自分もそうだと思ってたけど、先週デスクトップアプリでClaude Codeを使ってみたら、めちゃくちゃひどかった。遅いし、グリッチも多いし…すぐにTUIに戻っちゃった。
CLIプロンプトと100wpmでタイピングしながらログをスクロールするのはl33tって感じだけど、Claudeのコードはもっと1992年のDOSプログラムっぽい雰囲気だね。
開発者がCLIを使うことを学ばず、可愛いインターフェースがなくてもターミナルに慣れないのが理解できない。画面にテキストが表示されるだけでそんなに嫌がる人がいるの?tmuxってそんなに難しいのかな?
このコメントありがとう。FAANGのプリンシパルエンジニアとして、これが正しい答えだと思う。
見たTUIは、ほとんどがNPMに依存してるみたい?エージェントたちがセキュリティの問題を抱えたものに書き換える時間がないのは奇妙だね。これを見ると、エージェントが支配するのは、結果を気にしないゴミスタートアップで働いてる人たちから来てるんじゃないかと思っちゃう。
そうなんだよね、AIに夢中な人たちのほとんどはJavaScript/TypeScriptの開発者で、たいていスタートアップで働いてるし、AI分野にいることが多い。
Go + リップグロス + バブルティーは、見た目も使いやすさも兼ね備えたTUIを構築(または生成)するための最も堅牢でパフォーマンスの高いスタックだよ。素晴らしいDX。npmは必要ない。
curlをbashにパイプしていたあの平和なセキュリティ時代に戻りたいな。
LLM関連のソフトウェアの99%は、常に壊れた状態でグルグル回ってるウェブスロップだよ。例えばOpenCodeは、「すべてのメッセージのログを保持して、そのログをSSEエンドポイントに同じ順番で送って次のレスポンスを得る」ってことがまだできてないし、コンテキストプルーニングを無効にしても、プロンプトキャッシュミスが頻発してる。
誰もネイティブUI開発に投資してないからね。Electronは、使いやすいGUIスタックがあれば企業が採用するっていう証拠だよ。
記事が言ってることとは逆に(「でもGoogleは本格的な製品が出る前にプロジェクトを諦めた」)、Flutterの開発は続いてるし、採用も増えてると思うよ。
Zedはそうだね。ファンはいるけど、GUIシステムをゼロから作るのに大きな努力をしてる割には、採用が急増してる感じはしないな。
投資が足りないとは思わないけど、正しいものを作れてないだけだと思う。必要なのは、使いやすくて、クロスプラットフォームで、オープンソースで、理想的には好きなプログラミング言語から使えるフレームワークだよ。
個人的には、最悪のケースは、ファイル内を正規表現で検索するような小さなユーティリティを開発することだと思う。大きなものを開発している場合、パッケージングや配布にかかる時間は少なくて済むし、ファイルサイズも気にしない。でも、たとえばWindows用のアプリを開発したいとしたら、簡単だよね。小さなバイナリを作って、ダブルクリックでフォームを開くだけで済む。インストールも不要。でも、Linuxで同じことをやろうとすると、無理だよ。GTKやQtのバージョンがインストールされている保証がないから、自己完結型にするにはOS全体を送らなきゃいけない。そうなるとファイルサイズがめちゃくちゃ大きくなる。Pythonは使えないな。WindowsユーザーはPythonを持ってないといけないし、インタプリタを送らなきゃならないから。唯一の現実的な選択肢はJavaみたいなものだね。そうすれば、どのシステムでも動く単一の.jarファイルができる。でも、オラクルがライセンスを変更したし、JavaFXはもはやJavaの一部じゃない(Swingはまだあるけど)。正直、キーボードショートカット付きのメニューバーを表示したいだけなんだ。どうしてメニューバーVMみたいなものがあって、すべてのOSでメニューバーにアクセスできるようにならないんだろう?すでにElectronでブラウザ全体を送ってるんだから、それはバカげてる。ユーザーがデスクトップアプリ用のFlashみたいなものをインストールして、すべてのアプリがそのプラットフォームを使うようにすればいいのに。DOSゲームをデスクトップアプリよりも簡単に送れるかもしれない。だって、DOSゲームをやりたい人はみんなDOSエミュレーターをインストールしてるから。
wxWidgetsとQtはどっちもいいと思うけど、どう?GTK 2と3も悪くないし(4以上は…微妙)。これらのどれかを使っているアプリはたくさんあるよ(多くはPythonバインディング経由だけど)。これは人手の問題だと思う。ウェブ開発を知ってる人がたくさんいるから、デスクトップでもその人たちを使いたいんだよね。デスクトップがJS(Electron)で動くのは、その点でかなり助かる。
> ハードコアな人たちは、即時フィードバックや高い使いやすさを捨てて、vimやemacsに移行したけど、見た中で一番急な学習曲線だと思う。 vimの一番の難点は、モーダルエディタで最も基本的な機能、つまりコマンドモードに戻るために、指をEscapeキーに伸ばさなきゃいけないことだね。理想的なワークフローは、さっと編集してすぐにコマンド(「ノーマル」)モードに戻ること。Escapeキーを使うのは歴史的な遺物だから、ちゃんと言っておく必要がある。だから、CapsLockをEscapeにリマップしちゃえばいいんだよ。システム全体でできるし、そんなに難しくないし、Escapeがそこにあると便利だよ。LinuxやMacOSではGUIの設定を変えるだけで、Windowsではレジストリキーを編集(作成?)するだけでできる。どのマシンでも1分以内でできるよ。それ以外は、vim-tutorの基本から始めて、何かに時間をかけすぎてると感じたら、もっと調べればいいから、学習曲線がどこにあるのか分からない。基本を知ってるだけで、他のエディタよりも早く感じたしね。vimの本当の問題は、モーダル編集にすぐ慣れちゃうことで、慣れないと石器時代に戻った気分になる。
残念ながら、EscapeをCapsLockにリマップすると、いろんなノートパソコンを使うことが多い僕みたいな人には結構なストレスになるんだよね。筋肉の記憶が邪魔をすることが多い。
CapsLockをEscapeにリマップするのは、僕がそれをやるように恥をかかせた誰もが戻れないことだよ。まるで昼と夜の違いみたい。最近思ってるのは、vimでhjklが必要なのは、キーボードレイアウトが矢印キーに対して実際に悪いからだと思う。タイプライターには矢印キーがなかったけど、コンピュータでは矢印が重要なんだよね。スペースバーはそんなに大きくなくてもいいと思うし、両方の親指が使える必要もないと思う。矢印キーの小さいセットをスペースバーの左か右に移動させる方が、タイピングにはずっと良いと思う。hjklのハックはハッカー向けのエディタでしか通用しないけど、普通のソフトウェアでは矢印をたくさん使うから、手にすごく悪い影響があるんだ。矢印に手を伸ばすために親指を折り曲げるやり方のせいで、炎症が始まっちゃった。
> vimの唯一の難しいところは、Escapeキーに指を伸ばさなきゃいけないことだよね。これを言う人がいる理由がまだ分からない。ctrl-cでも普通モードに戻れるし。 > Windowsでは、レジストリキーを編集(作成?)するだけだよ。 それかPowertoysを使うとか。なんでこれが設定にないのか分からない。(Mac、Linux、Emacsユーザーとして言ってるけど、ターミナルではまだVimを使ってる)
「jj」にマップしておけばいいんじゃない?指がすでにホームポジションにあるからさ。あと、ctrl + [は標準のターミナル/ASCIIでescだから、escに手を伸ばすよりも少しエルゴノミックかも。
これが悪いことかどうかわからないけど、私はずっとjkをエスケープに使うのが好きだった。人差し指と中指を動かしてノーマルモードに戻るのがすごく自然に感じるんだよね。数字を動きのコマンドの前に使うことを思い出す以外は、Vimに関して特に難しいことはなかったと思う。ちょっとがっかりしたよ、いつも「Vimをやめられない」ってジョークを聞いてたから!
変な話だけど、Escキーが遠いのが好きなんだ。効率のためじゃなくて、 ergonomicsのためにね。手を上げてホームポジションから離すことで、普段使わない筋肉を動かすことになるから、RSIのポイントがたまらないように強制されるんだよね。逆に、矢印キーもよく使う理由は同じなんだけど(とはいえ、hjklもまだ結構使ってるけど)。
CTRL + [がESCと同じ機能だって知ってた?うちのシニア開発者が1年前に教えてくれて、vimが日常的に使うのがかなり楽になったよ。
数字だけを見ると、TUIが人気な本当の理由はclaude codeだと思う。それ以外は背景の雑音に過ぎない。TUIを作りたいと思ったきっかけは、SSHを通じてアプリを配信するというコンセプトだった。SSHアプリはブラウザに似てるんだよね:ローカルインストールは不要。これが、僕がhttps://pico.shでハッキングを楽しむ大きな理由なんだ。TUIのデプロイにはユーザーの関与がゼロで済むから。
それは違うと思うな。新しいTUIプログラムの増加は、クロード・コードの立ち上がりよりも前から始まってる気がする。
純粋なCLIやGUIの代わりにTUIアプリケーションを使うことにまだモチベーションがあるのは、SSH越しに使えるからなんだよね。
Claude codeはそのトレンドを百倍にしたけど、go fzfやrust ratatui、python richの頃からTUIはすでにかなり増えてたよね。重いブラウザベースのUIを排除したいっていう欲求と、ターミナルベースのレンダリングの限界を試してみたいっていう好奇心があるんじゃないかな。
ClaudeCodeのTUI版は、VSCodeのプラグインと比べてもそんなに良くないよね。
GNU/Linuxの診断は思ったより良かったけど、まだ不完全だと思う。そう、主要なツールキットが2つ(GTK+とQt)あって、マイナーなものもたくさんある(ほとんどは主要なものをラップしてる)。Qtはプロプライエタリだけど、フリーソフトウェアライセンスでも使える。でも、その複雑さを避けたい場合はどうする?現代のGTK+は、クロスプラットフォームのツールキットというより、libaidwaitaやGNOMEスタックのためのランタイムレイヤーって感じがする。だから、GNOMEのUI規約に従いたくないなら、どこに行けばいいのか分からない。また、最近の新しい言語の爆発的な増加は、既存のライブラリの周りに新しいFFIラッパーを書く必要があることを意味していて、TUI開発のためのイディオマティックなライブラリを作る方が、GTK+やQt全体をラップするよりも簡単だと思う。
xfceの人たちはGTK+ 3.xを残してるけど、主に高度なテーマサポートのためだよね。それで十分じゃない?
GUIのような機能を再構築しようとするターミナルUIが本当に理解できない。コンピュータのインターフェースはもっと良くなるべきじゃない?もうキャラクターのグリッドに制限されて、線や形を描くふりをする必要はないんだから。標準外のターミナル(KittyやiTermなど)なしでは、ターミナルで画像を表示することすらできない。素晴らしいクロスプラットフォームでストリーミング可能なUIシステムがないのは残念だ。ウェブはそれなりに良いけど、この目的のためにはもっと良くできるはず。Flutterはまあまあだけど、オンデマンド性が足りないし、Dartに依存しすぎてる。
これは現代のGUI環境の失敗によるものだね。彼らはGUIを求めてるけど、結局こういうものに頼らざるを得ない。TUIの中のGUIみたいなもんだ。ポータブルなものが欲しい。リモートで動かせるものが欲しい。ソケットをさらけ出さずに安全に動かせるものが欲しい。デスクトップ全体を立ち上げたくない。ルートレスウィンドウは実質的に死んでる。残されたのはウェブインターフェース(その問題も含めて)か、みんなが持ってるSSH接続だけで動かせるTUIだね。昔はTcl/Tkで何かを組み合わせて、X Windows上でウィンドウを立ち上げることができたけど、今はそんなに簡単じゃないし、リモートXを動かしてる人なんていないよ。LCDはSSHで、これが唯一フィットするものなんだ。
TUI/GUIを試してるんだけど、XやWaylandが持ち込む余計なソフトウェア依存関係を避けたいのが理由なんだ。それに、Waylandはバグが多いし、Xは非推奨でメンテナンスもされてないから、GUIを使うのが常に苦労なんだよね。改善されるかどうかは時間が教えてくれるかな。
> 「素晴らしいクロスプラットフォームでストリーミングされたUIシステムがないのが残念だね。ウェブ/Jupyterって呼ばれてるけど。ウェブ駆動のUIも重くなくていいんだよ、HNがそうでないように。」
ソフトウェア開発者がユーザーインターフェースをデザインすること自体が狂ってるよ。テキスト以外のユーザーインターフェースを作る能力がないんだから。配管工が家を設計したら、床を全部下に傾けるだろうね。パイプを通すのが一番簡単だから。複数のウィンドウを動かしたりサイズ変更したりしたい?じゃあテキストウィンドウにしよう。素早くオプションを選べるようにしたい?じゃあテキストボックスにしよう。スタイルやフォーマットで文書を素早く作成したい?じゃあフォーマットするためにもっとテキストを書かなきゃね(でもフォーマットモードで簡単にテキストを表示するアプリは作らないけど)。
許可されてる?多くのオープンソースTUIプロジェクトは、自分たちの問題を解決したいと思った個人や小さなチームによって始められたんだ。だから、使わなくてもいいんだよ。
OSベンダーの自己利益が崩壊していく様子が見える気がする。良いユニバーサルUIなんて存在しないし、一番マシなのはブラウザだけど、サンドボックスのせいでローカルファイルやネットワークにアクセスする必要があることには向いてないんだよね。シンプルなものを動かしたいだけなのに、無駄にオーバーヘッドが高いし。リモートアクセスなんてさらに厄介だし。MacからWindowsホスト上で動いているアプリにアクセスできるの?トンネル接続を通してそれを転送できるの?TUIはシンプルでユニバーサルなプロトコルで、必要なことをやってくれるし、リモートでもネイティブに使える。ローカルで使うものはSSH接続を通してもスムーズに動くしね。OSベンダーが全てを互換性のないものにして、エコシステム特有にすることでみんなを閉じ込めようとしたのが、逆に大きな中指を立てられる結果になってる。
現代のばかげたGUI環境(Windows 11はその良い例だね)の失敗が、ミニマリストなxfce4デスクトップ環境に戻ってくる理由だよ。あんな無駄は本当に必要ないと思う。
Midnight Commanderは今でも最も進んだTUIだと思う。隠れた機能がたくさんあって、知らないかもしれないよ。SSHで別のコンピュータに接続しながら、圧縮されたzipファイルの中をブラウズして、その中のファイルの内容をプレビューすることもできるんだ。lynxモーションと大文字小文字を無視する設定を有効にすれば、フォルダ間の移動が「cd」や「ls」を使うよりもずっと速くなるし…このカテゴリのファイルマネージャーが40年以上も同じように動いているのはすごいことだよね。ショートカットも同じだし。