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

30年前のIDEたち…そして私たちが失ったもの

概要

  • 1980年代後半から1990年代初頭の テキストベースIDE の体験回顧
  • 当時のIDEは 機能面で現代と遜色ない 完成度
  • 現代のTUIエディタとの 比較と機能退化の考察
  • LSPなどの登場で 再びTUIが注目される背景
  • TUI IDEの 現代的意義と利点 の整理

1990年代のテキストベースIDEの体験と進化

  • 1980年代後半から プログラミング学習 を開始
  • 当時の ハードウェア制約 を理解せずに使用していた体験
  • DOSBox を使い、当時のソフトの再体験と現代との比較
  • Windows登場前の純粋なTUI IDE の特徴に注目
  • 機能的に現代IDEに 引けを取らない完成度 を持つIDEが多かった時代
  • 一時的に機能が 失われた“暗黒時代” を経て、再び機能が復活しつつある現状
  • 過去の機能や体験を知ることで、今後の新機能をより批判的に評価 できる視点の重要性

1990年代のTUIの特徴と代表的エディタ

  • DOS時代のプログラムは フルスクリーンTUI が主流
  • テキストウィンドウ、ドロップシャドウ、色彩、マウス対応など 多彩なUI表現
  • 例えば MS-DOS Editor (EDIT.COM) はメニュー・ダイアログ・ショートカット表示など充実
  • 各プログラムのUIは独自ながらも 操作体系が似ており習得が容易
    • Altキーでメニュー、Tabで項目移動など 共通操作体系

エディタとIDEの進化

  • MS-DOS 5 以降、標準でTUIエディタを搭載
    • ただし、 コード編集とビルドが分断 されていたため不便
  • SideKick Plus (1984) のようなTSR型PIMも登場
    • Ctrl+Altで即座に呼び出せる 疑似マルチタスク機能
    • コード編集とビルドの 効率的な切り替え を実現

本格的IDEの登場

  • Turbo Pascal 1.0 (1983) で統合開発環境の原型が登場
  • QuickBASIC 2.0 (1986) で本格的なTUIを実現
  • Borland Turboシリーズ (Turbo C++、Turbo Pascalなど)が 最強のTUI IDE として君臨
    • シンタックスハイライト
    • コンパイラ統合と診断
    • プロジェクト・ビルド管理
    • デバッガ(ブレークポイント、スタックトレース等)
    • 統合リファレンスマニュアル
  • 1990年代初頭で既に 現代IDEに匹敵する機能 を実現
  • インターネットが普及していない時代 でも、IDE自体が十分に 直感的かつ自己完結型 であった

UNIX・LinuxのTUI事情との比較

  • 当時のLinuxも テキストベース中心 だが、 フルスクリーンTUIは少数派
  • X11設定ツールやOpenBSDインストーラの シンプルすぎるUI に驚愕
  • VimやEmacs は強力だが、 初学者には難解 でIDE的機能も限定的
    • Emacsは装飾や色も乏しく、 マウス非対応 だった時代も
    • メニューバーも 実用性に乏しい 設計

現代のTUI IDE・エディタ事情

  • RHIDE :Turbo C++に酷似するが DOS専用・開発停止気味
  • Free Pascal IDE :現代的なコードベースで UNIX系OS対応、TUI IDE体験を再現
  • QB64 :QuickBasic風だが GUIでTUIを模倣、端末上では動作不可
  • Free Pascal・QB64は 現役開発中 だが、 言語の人気低迷 で注目度は低い

現代TUIエディタの限界と新潮流

  • Neovim、Doom Emacs、Helix などが IDE的機能を拡張
    • ただし、 直感性や一貫性はBorland製IDEに劣る
    • 多言語対応の柔軟性 と引き換えに、どれも“器用貧乏”な印象
  • GNU Nano が“シンプルなTUIエディタ”として人気
    • だが IDE機能は皆無、ワープロ的な印象が強い
  • 30年の間に機能が後退し、ようやく再び追いつきつつある現状

TUI IDEが再注目される理由

  • グラフィカルOS普及でTUI IDEは一時衰退
  • LSP(Language Server Protocol) の登場で、TUIでも 高度なIDE機能が容易に実装可能
  • TUIエディタの開発者層が薄く、IDE化は困難だったが、LSPで一気に進展
  • 今後は BSP(Build Server Protocol) にも期待

現代におけるTUI IDEの意義

  • VSCodeのリモート機能 は優秀だが、 TUI IDEはリモート開発でより快適
    • SSHでサーバーに入り、tmuxと組み合わせて 本格的な多重作業 が可能
    • リモートデスクトップは 遅延やショートカットの不統一 で使い勝手が劣る
  • VSCodeのリモート拡張はOSSでなく、FreeBSDなどでは動作不可
    • TUI IDEならOS問わず利用可能

まとめ

  • 1990年代の TUI IDEは現代に劣らぬ快適な開発体験 を提供
  • 一時的な機能後退を経て、 LSP等の技術革新で再びTUI IDEの価値が見直されつつある
  • リモート開発やOSS環境 では、TUI IDEが今なお 実用的かつ有力な選択肢
  • 過去の知見を活かし、 今後の開発環境の進化をより批判的に評価 していく姿勢が重要

Hackerたちの意見

DOSの黄金時代には、文字を表すバイトの配列と属性(背景色や前景色)を表す配列があって、ハードウェアがそれを描画してたんだよね。特定の場所に「A」を書きたければ、特定のメモリアドレスに0x41を書き込むだけ。それだけで済んだんだ。待機状態があったけど、9600ボーのターミナルでANSIコマンドを使って描画するよりずっと速かったよ。最初にemacsを使ったのは、Sunワークステーションに接続されたターミナルで、その時はすごく遅いシリアルターミナルか、GUIプログラムのターミナルエミュレーターを使うしかなかった。だから、TUIsが消えていった理由はこれだね。

それ、実際に優れてるって感じだね。サイズ変更はどうやってうまくいったの?

1984年にBorland Turbo Pascalを使ったんだけど、すごく遅いPCでこんなに速いものを使えるなんて驚きだった。あれ以降、あんな速さのIDEやコンパイラには出会ってないよ。今のコードはものすごく洗練されてて複雑だから、今のコンピュータの速さではあのパフォーマンスには到底追いつけないね。

2002年にガレージセールで、16MB RAMの66MHz PentiumのWindows 95マシンを手に入れたんだ。Visual Studio 5 Enterpriseはそれでも十分速く動いて、今でも恋しい機能があったよ(今の環境ではあまりうまく動かないけど)。

ほんとにそう。あれが今までで一番流れるような開発体験だったなんて不思議だよ。それ以来ずっとその感覚を追い求めてる。でも、RailsやVite、Reactのファストリフレッシュとかは、そういう意味では結構いい感じだね。

最近Delphi試してみた?めっちゃ速いし、コンパイルも1秒以内だよ。

この話題に関する必須リンクをシェアしに来たよ、Dadgmの「Turbo Pascalより小さいもの」: https://prog21.dadgum.com/116.html 1991年まで、いやそれ以降もTurbo Pascal 2を使ってたんだ。あの頃の386 40 MHzのPCではめっちゃ速かった。CGAグラフィックス用のライブラリしか付いてなかったのはちょっと制限があったけど、その分シンプルで学ぶには良かった。数年前、古いTurbo Pascalのゲームを動かしたくてFree Pascalに移植することにしたんだけど、残念ながらFree PascalはTurbo Pascal 4で導入されたグラフィックスライブラリしか付いてなかった。でも、Turbo Pascal 1-3のグラフィックスAPIをアセンブラを使ってCGAグラフィックスを描く方法を考えるのに数時間楽しめたから、ゲームは動いたよ(正直あんまり面白いゲームじゃなかったけど、そのAPIを実装するのは楽しかった)。

Emacsは今でもこれらのことを全部やってると思うよ。著者が言ってるのは「難解」ってことだけど、彼が慣れてないだけなんじゃないかな。実際、完全に自己文書化されててインタラクティブだし。私にとって、今まで使った中で一番のテキストインターフェースはEmacsのMagitだね。もっとEmacsがああいう感じだったらいいのに。実際、理由があって別のIDEを使ってる時でも、EmacsをGitクライアントとして使ってるよ。

Magitの体験は、そのUIにトランジェントパッケージを使ってるからなんだ。他のパッケージもそれを使ってるよ。私の個人的な使用では、gptelパッケージが特に目立つね。

彼が慣れてないだけの慣習を使ってると思う。25年以上使ってるから、もう「慣れてる」よ。

Magitはすごいね。あのMagitの人たちはどうやってデータモデルを考えたんだろう?いつも、gitのデータモデルを超えてる感じがする。gitのポーセリンはただの破片の山だし。

Emacsには同意だね。昔、MS-DOSの頃から使ってたよ。M-x compileでコンパイラ(多分make)を起動したり、C-zでcommand.comを開いてコマンドを実行してからEmacsに戻ったりしてた。ほぼマルチタスクみたいな感じ!あの頃の典型的な後期MS-DOS時代のTUIアプリはあんまり好きじゃなかったし、懐かしさもないな。小さなTUI、例えばOSインストーラーみたいなのはいいと思うけど、結局好きなのはコマンドラインだって気づいた。TUIを起動するのはGUIを開くのとあまり変わらないし、どちらもプロンプトでコマンドを打つ流れを壊しちゃう。DOSBoxとFreeDOSはいつも使ってるけど、TUIアプリにはほとんど時間を使わないな。それでも今は40x25 CGAテキストモードで動くDOSアプリを作ってるよ。技術的にはTUIだけど、典型的なTUIにはあまり見えないかな。

昔はXEmacsを使ってたんだ。普通のEmacsよりも進んでたからね。IDEがUNIXシステムで一般的になってからは、Emacsを置いてIDEに戻ったよ。それでも、Emacsのバリアントやviだけが選択肢だった時代がほぼ10年あったな。joeやnano、edみたいなもっと制限されたものは無視して。

Turbo-VisionスタイルのIDEをナビゲートして機能を探るには、基本的にAltキーとTabキーの使い方だけ知ってれば大丈夫だよ(あ、ReturnとEsc、矢印キーもね)。TFAでも触れられてるけど、Emacsにはその基本的な操作の統一感がないと思う。

実は、emacsはAppleがcmd-z/x/c/vを開発する前から存在してたんだよ。MicrosoftがAppleを真似る前にね。それ以前は、プログラマー用エディタで最も一般的にコピーされたキー操作はWordstarのやつだったし、Borland製品でも使われてた。OPは、30-40年前にあったもっと優れたIDEについて全然知らないみたいだね。例えば、以下のようなものがあったよ: - Apple MPW, 1986年。GUIエディタで、すべてのウィンドウが(潜在的に)Unixライクなシェルになってて、Enter(またはcmd-Return)を押すとコマンドが実行される。シェルスクリプトにはウィンドウを操作したり、編集アクションを実行するためのコマンドもあった。elispみたいだけど、シェルの構文を使ってる。Projectorという統合ソースコード管理システムもあった。コマンド名をタイプして、引数やスイッチを付けても付けなくてもoption-Returnを押すと、GUIのチェックボックスやメニューがある「Commando」ウィンドウがポップアップして、すでに入力した内容が自動で埋められる。自分のプログラム用にCommandoを設定するのも簡単だった。 - Apple Dylan, 1992-1995年。AppleのDylan言語用の素晴らしいLisp/SmalltalkライクなIDE。 - THINK PascalとC, 1986年。Pascal版は元々インタプリタだったと思うけど、Apple向けに書かれたんじゃないかな。その後、BorlandのCP/MやMS-DOSよりも速いコンパイラになった(GUI付き)。C IDEは後にSymantec製品になった。 - Metrowerks Codewarrior, 1993年。元THINK/Symantecの人たちがMacのIDEをゼロから作り始め、最初はMetrowerksのM68000コンパイラをAmiga向けに、その後新しいPowerPCバックエンドを取り入れた。素晴らしいIDEで、素晴らしいコンパイラ。StepanovのSTLをゼロオーバーヘッドでコンパイルできる最初のものだったし、新しいC++機能に大きく依存した革新的なアプリケーションフレームワーク「PowerPlant」もあった。特にSymantecのバグだらけのPoSバージョン6の後は、THE PowerPC開発環境だった。 - Macintosh Allegro Common Lisp(後に「Allegro」を削除)、1987年。素晴らしいMac IDE。素晴らしいLispコンパイラと環境が一つにまとまってた。高価だったけど、カスタムのネイティブMacアプリケーション開発において驚くべき生産性を発揮した。Pascal/C/C++環境よりもずっと先を行ってた。コンサルタントには絶対に完璧だった。実際、これらの多くがどれほど洗練されていたか、8 MHzから33または40 MHzのM68000で、2-4 MB RAMから16-32 MBまでの範囲で開発されてたのは本当に信じられないよ。(Mac IIシリーズ(およびSE/30)は理論的には128 MB RAMをサポートしてたけど、誰もそんなにお金をかけられなかった。)

彼は慣れてない規約を使ってるだけだ。彼がホイールを再発明したときに、他の人が採用した規約はほとんどなかった。

でも、完全に自己文書化されていてインタラクティブなんだよね。残念ながら、それは真実じゃない。エマックスを一度か二度起動したことがあるけど、ドキュメントを保存する方法すら分からなかった。保存の仕方を教えてくれなかったからね。viよりはドキュメントがあるかもしれないけど(その基準は地面にあるし、viは最も発見しづらいユーザーインターフェースの一つだし)、指示なしで使えるほど自己文書化されてるわけじゃない。

Magitは本当に素晴らしいけど、時々かなり遅かったりバグがあったりするよね。

ああ、BorlandのIDE!本当に最高だった。今のものではあれに匹敵するものは見つけられないよ。確かに、ノスタルジーがすべてを甘くするけど、Free Pascalを使う理由を探してる自分がいる。まあ、パスカルも好きなんだけどね。バレちゃった。Plan 9のSamやAcmeも使ってるけど(技術的には素晴らしいplan9portから)、正直言って、あれはIDEじゃない。エディタだよ。考えるための道具で、格闘するための道具じゃない。古いTUIから学べることはたくさんあるし、学ぶべきだと思う。例えば、ファイルメニューからシェルを起動して、何かを実行して戻ってくるのは全然問題ないし、むしろヒーロー的な行動だよね。そういうことをすることでスタイルポイントを失うのを恐れてる人が多いみたい。あと、キーバインディングも!多くのクラシックなTUIはWordStarの神聖なキー操作を採用してる。もう体に染み込んでるから、EMACSを使うのはオーブンミットをつけてタイピングするみたいな感じ。長年、joe(祝福されたjstarエイリアス付き)が私のお気に入りのエディタだったよ。さて!Dr. DOSのVMを起動して、Advent of Codeのホイールを回して、わざとノスタルジックに非効率的になろう。

素晴らしいまとめだね、私も同じ気持ちだよ。暇な時間に、tuiのコードエディタを作ってるんだけど、最終的にはmakeとlldbを組み込む予定なんだ。

「プロフェッショナル」なDOSソフトウェアについて一つ言えるのは(Emacsみたいに、8つのモードがあって常に変わってるのが見えるけど)、基本的にそれに生きることが求められてたんだ。コンピュータとユーザーの全注意を引きつけてたし、使い方を学ぶことも期待されてた。だから、オルガン奏者みたいに「機械と一体化」する感じだった。Fry's Electronicsの社員がTUIをすごい速さで使いこなしてるのを見たことがあるけど、画面がまだ読み込まれてる間に歩き去って、最終的にはプリントアウトが出てくるのを見たよ。

Plan 9には好きなところがたくさんあるけど、Acmeのマウス依存のUIは全く受け入れられなかった。何時間も使わなきゃいけないのに、正確な狙いを要求されるUIには耐えられないし、もし実際に障害があったら使うのを想像するだけで嫌になる。

たくさんのクラシックなTUIがWordStarの神聖なキーストロークを採用してるよね。WordStarのバインディングって何?それについて何が好きなの?こういうパターンがどうやって生まれて、互いにどんな利点があるのか、歴史に興味があるんだ。

以前は「Visix Vibe」というJava向けのIDEを使ってたんだ。最初はJavaでのアプリ開発の実験として、次はDelphiの代替として使ってた。これらのIDEは生産性を大幅に向上させてくれて、UIを完成させるための実現可能な見積もりを顧客に出すのが簡単だった。これらのIDEが恋しいのは、統合の要素があったからだね。データベーステーブルを接続してフォームを生成して、すぐにデータ入力や検証に使えるものができるのが楽しかった。その後、数週間かけてUIをもっと堅牢にして、焦点を当てたアプリケーションのユースケースに合わせていくのが良かった。最近は、UI/API/バックエンドがちゃんと連携できるように、もっと慎重な計画が必要な気がする。このレベルのツールにもっと進展があればいいな。AIがUIコードを生成するのは一つのことだけど、コードを描いたり、UIを使ってUIを構築する余地はまだあると思う。(誰かがJUCE用のちゃんとしたWYSIWYGツールを作ったら、栄光の日々が再び始まるだろうね…)

笑うかもしれないけど、今でもそんな感じでhtmlフォームを使ってるよ。シンプルで効果的なんだ。

「うちでは、SideKick Plus(1984)っていうのを使ってたけど、これは本当のコードエディタじゃなくて、むしろ個人情報管理(PIM)システムで、メモ帳が内蔵されてたんだ。やっと!最高のソフトウェアを覚えてる人がいた!Sidekickが大好きで、小さな会社でずっと使ってたんだ。もうずいぶん前のことだけど、今は部分的にしか覚えてないけど、本当に便利なツールだったな。

ちなみに、今でも自分のテキストベースのエディタ/IDEを開発して使ってるよ: https://github.com/alefore/edge 最近、開発10年の結論についてちょっと書いたんだ: https://github.com/alefore/weblog/blob/master/edge/README.md

俺も。開発に約4ヶ月かかったけど、楽しかったよ。 https://github.com/ivanjermakov/hat

(この記事は2023年のものだから、タイトルは「32年前」とかに更新すべきだね)TUISの最大の損失は、最新の非同期フレームワークの波で、ターミナルにキー入力のドロップの喜びをもたらしてることだよ。2000年以前にリリースされたTUIでは、システムが準備できてないときにキーを押すと、そのキーはシステムが準備できるまで待ってた。今でも多くのTUIはそうだけど、最近の「ウェブにインスパイアされた」TUIフレームワークでは、システムがキー入力を受け付ける準備ができてるのに、非同期ダイアログボックスがイベントリスナーを登録してないから捨てられちゃうことが増えてきてる。それ以外は、最近のTUIは元気だよ。ターミナルIDEについては、Neovimはこれまでで最も機能が豊富で、LSPや他のプラグインがこの記事で話されているすべての機能を提供してる。マウス駆動のTUIではないから、著者は興味ないかもしれないけどね。

大体の引用: 「1984年には家にあった」とか言ってたから、41年も範囲内みたい。Visual Studio 1.0やその後すぐのNetBeansで終わった初期プロジェクトを期待してたんだけど、"vim(1991年)はまだ出てなかった"っていうのはちょっと違ったな(引用じゃないけど、ncursesを見てて思ったこと)。

30年前がいつだったか、あんまり考えてなかったな… GUIのSmalltalkシステムブラウザを期待してたのに、DOSのTUIを見てがっかりした。Turbo C/PascalやMS C 4.0のCodeViewを思い出して、43行や50行モードでも動いてたのが嬉しかった。

IDE製品を愛しすぎて、それなしでは作業できない人たちは、逆に自分を過剰に特化させてしまってる。コード自体にも悪影響があるかもしれない。 > ターミナルIDEについては、GNU/Linuxのターミナルがキラーアプリだね。タイル型ウィンドウマネージャで複数のターミナルを使うのが、俺にとっての生産性のピークだ。(ブラウザは別の仮想ワークスペースに。)大きなディスプレイ用の現代的なスケーリングは、開発者のエルゴノミクスにとって最高だよ。

そうだね。DOS時代、実際のターミナルを使ってた頃には、キーストロークバッファがあった。インターフェースを本当に知ってる人たちは、UIよりも先に複数のキーストロークを進めてタスクをこなしてた。入力がバッファに既にあったから、画面に何かがフラッシュして消えることもあった。これを現代のフレームワークで実装するのは可能だと思うけど、考える必要があるね。

K&RからC言語を学んだけど、Turbo Cの中で右クリックしてC APIを覚えた。emacsでC-h fを使ってリスプも結構学んだ。現代のIDEのナビゲーション機能は大好きだけど、ライブラリの作者がドキュメントコメントを書くのに深く入り込まない限り、同じ発見のしやすさはないね。

著者が本当に求めてるものが何なのか、特定の見た目や感触へのノスタルジーを除いて理解するのが難しい。多分、機能が少ないシンプルさもあるのかな。あの古いクソIDEが具体的にどんな機能を提供しているのか、詳しく知りたかった。著者が一番欲しいのは、12歳に戻れるタイムマシンだと思うけど、ソフトウェアにはそれは無理だよね。まだ。