
2026/04/28 4:53
L123:Lotus 1-2-3 のようなターミナル上のスプレッドシートソフトでありながら、現代の Excel と互換性を持つ製品です。
RSS: https://news.ycombinator.com/rss
要約▶
Japanese Translation:
本テキストの主な焦点は、Rust で積極的に開発が進められているターミナル系スプレッドシート「l123」であり、それはレガシーな Lotus 1-2-3 Release 3.4a の体験を忠実に再現したものです。DOS エミュレーターや単なる視覚的なオマージュとは異なり、「l123」は IronCalc エンジンによって動作するネイティブアプリケーションであり、真の式処理を可能としつつ、最新の .xlsx ファイルとの往復互換性(グラフには SVG/PNG のエクスポート機能も)を提供します。このソフトウェアは 1993 年のコマンドライン哲学に厳格に従っており、スラッシュメニュー、3 行のコントロールパネル、WYSIWYG アイコンパネル、そして現代のグラフィカル clutter を排したレガシー構文(例:
@SUM、#AND#)を使用したキーボードファーストなワークフローを特徴としています。現在、マイルストーン M10 にあり、開発の焦点はテーマ、ヘルプドキュメント (docs/SPEC.md 等に所在)、および将来の読み取り専用 .WK3 サポートにあります。インストールは Rust stable(git clone、cargo build)を通じて容易です。MIT ライセンスの下で提供され、このプロジェクトは今日の歴史的なワークフローを維持する必要がある経験豊富なレガシーユーザーのためにユニークに役立っています。そのモジュール化されたアーキテクチャにより、計算エンジンを交換することが可能であり、長期的な適応性を確保しています。本文
A Lotas 1-2-3 様式のターミナル電卓表計算ソフトであり、現代の Excel と互換性を持っています。l123 は、斜線メニュー、3 ラインコントロールパネル、キーボード主導のワークフロー、WYSIWYG アイコンパネルなど、クラシックな DOS 時代のスプレッドシート体験を再現します。その上には現代的な式エンジンとネイティブの .xlsx 二重書き込み(round-trip)機能を実装しています。相互作用モデルは、DOS 版 Lotus 1-2-3 Release 3.4a(1993 年)を対象としています。計算および I/O レイヤーは、Rust、IronCalc、UTF-8 を採用しています。
✦ ステータス 現在、開発が続いています。ドキュメント/PLAN.md に記載されたマイルストーン計画を追跡しています:
| マイルストーン | スコープ | 状態 |
|---|---|---|
| M0 | グリッド、ポインタナビゲーション、ワークスペース起動 | ✅ 完了 |
| M1 | コントロールパネル、モード、最初の文字入力 | ✅ 完了 |
| M2 | エンジンワイヤーアップ、式、再計算 | ✅ 完了 |
| M3 | メニューシステムおよび MVP 斜線コマンド | ✅ 完了 |
| M4 | .xlsx と CSV の二重書き込み | ✅ 完了 |
| M5 | 3D シート、GROUP、命名範囲、元に戻す(undo) | ✅ 完了 |
| M6 | プリント(ASCII、PDF、ラインプリンター)および範囲検索 | ✅ 完了 |
| M7 | グラフ:7 つのチャートタイプ、F10 ビュー、SVG/PNG 保存 | ✅ 完了 |
| M8 | R3.4 の WYSIWYG アイコンパネル(マウス対応) | ✅ 完了 |
| M9 | マクロ:/X、{BRANCH}、{IF}、Learn | 計画済み |
| M10 | ポリッシュ:起動スプラッシュ、文脈ヘルプ、テーマ | 🚧 進行中 |
API キーバインディングおよびファイルパスは、v1.0 公開前に変更される可能性があります。
✦ インストール Rust stable(rust-toolchain.toml で固定)が必要です。
git clone git@github.com:duane1024/l123.git cd l123 cargo build --release ./target/release/l123 # または:cargo run -p l123
既存のワークブックを開く場合は、以下を実行してください。
設定を確認または初期化するには、以下を実行します。
l123 config # 有効な設定とそのソースを表示 l123 config --init # サンプル構成を ~/.l123/L123.CNF に書き込む
詳細なキーおよび環境変数のリストについては、docs/CONFIG.md を参照してください。
✦ キーボード(短縮版) キーボードが製品の核心です。
| キー | 動作 |
|---|---|
| / | 斜線メニューを開く |
| 最初の文字 | メニュー項目へ降下(Enter 不要) |
| 矢印キー / Tab | ポインタ移動;入画中の場合は確定して移動 |
| Enter | セル入力を確定 |
| Esc | 1 レベル上位に戻る(メニュー、プロンプト、POINT アンカーなど) |
| Ctrl-Break | どこからでも READY に中断(abort) |
| . (POINT モード内) | アンカーされる範囲のどの角か切り替え |
| F1 | 文脈ヘルプ |
| F2 | 現在のセルを編集 |
| F3 | 命名範囲一覧を表示 |
| F4 | 引用の絶対性 ($) を切り替え |
| F5 | セルへ移動(GOTO) |
| F9 | 再計算 |
| F10 | フルスクリーングラフビュー |
| Alt-F4 | 元に戻す(undo) |
| Ctrl-PgUp / Ctrl-PgDn | 前または次のシート |
マウスは、WYSIWYG アイコンパネル(17 つのアイコン、R3.4a レイアウト)向けにサポートされています。式は 1-2-3 構文を使用します:@SUM(A1..A5) という形式で、=SUM(A1:A5) のようにとは異なります。@ 記号と .. セパレータは必須です。論理演算子は #AND#、#OR#、#NOT# です。
READY モードで最初に打たれた文字がラベルか値かを決定します:桁数、+、-、.、@、#、$ は値の開始を意味し、それ以外の文字はラベルの開始を意味します(自動的に ' プレフィックスが挿入されます)。“は右揃え、「^」は中央揃え、「-」はダッシュでセルを埋めます。
✦ 現在動作している機能
3 ラインコントロールパネル(ライブモードインジケーター付き) 13 のモード(READY、LABEL、VALUE、EDIT、POINT、MENU、FILES、NAMES、HELP、ERROR、WAIT、FIND、STAT) 完全な斜線メニューツリー:docs/MENU.md に記載の全てのパスが到達可能;MVP セグメントは実行され、非-MVP セグメントは 3 ライン /Worksheet、/Range、/Copy、/Move、/File、/Quit に「まだ実装されていません」と表示されます IronCalc を通じた .xlsx の二重書き込み;.csv のインポートとエクスポート 3D ワークブック:A..IV シート、A:B3..C:D5 範囲、GROUP モード 命名範囲、@ 関数の MVP セット(docs/SPEC.md §15 を参照) コマンドジャーナルによる元に戻す(/WGD Other Undo で切り替え可能) 複数ファイルセッション(/File Open Before|After、Ctrl-End ナビゲーション) /Print File を ASCII、PDF、ラインプリンター出力へ;ヘッダー、フッター、マージン、ページ長、フォーマット済み / 非フォーマット済み / 表示通り / セル式モード;第 1 列に「|」を置くと印刷から行を隠す /Range Search Formulas|Labels|Both Find and Replace /Graph ツリー:Line、Bar、XY、Stack、Pie、HLCO、Mixed;タイトル、凡例、スケール、グリッド、カラー/B&W、データラベル F10 / /Graph View のフルスクリーンレンダリング(Unicode バー + ライン出力);Kitty / iTerm2 / Sixel イメージサポート(ratatui-image を介して) /Graph Save SVG へ(すべてのチャートタイプ向け plotters PNG 出力も可能) R3.4a WYSIWYG アイコンパネル:全 17 つのアイコン、マウス接続 起動スプラッシュ画面 カラム幅オプション(/WGC、範囲レベルでの設定/リセット)
✦ 今後予定
文脈ヘルプ(F1)、CRT テーマ、LMBCS コンポジションキー(M10、有効化済み) /Data ツリー:Fill、Sort、Query、Table、Distribution、Regression、Parse マクロ:/X、{BRANCH}、{IF}、{MENUBRANCH}、/Worksheet Learn .wk3 の読み取り専用インポート(値のみ)
✦ アーキテクチャ Rust ワークスペース、厳密なレイヤー構造:
l123-core ← タイプのみ、外部依存なし ↑ l123-parse, l123-menu ↑ l123-engine (IronCalc をトレイトでラップ) ↑ l123-cmd, l123-io, l123-graph, l123-print ↑ l123-ui (ratatui + crossterm;エンジン非依存) ↑ l123 (バイナリ)
IronCalc は Engine トレイトの背後に置かれ、交換可能です。1-2-3 の式構文(@SUM、..、#AND#)は、l123-parse で IronCalc に届く前に Excel 構文に変換されます。UI は IronCalc のタイプを直接見ることはありません。
✦ 信憑性契約(Authenticity Contract) l123 は以下の 2 つの約束を果たします(docs/SPEC.md §1 を参照):
有経験のある Lotus 1-2-3 R3.4a ユーザーは、何も読まずに l123 を冷態から操作できる。 ファイルは .xlsx と綺麗に二重書き込みされる。
SPEC §20 は挙動を列挙しています:3 ラインコントロールパネル、メニューアクセラレーター、POINT アンカーの意味、最初の文字ルール、@ 記号、形式タグ、矢印での確定、WYSIWYG アイコンパネルなど。契約の各項目は、tests/acceptance/ 以下のテストで少なくとも 1 つの受入トランスクリプトを持っています。
✦ 開発 厳格なレッド / グリーン / リファクタリングアプローチ。規約は CLAUDE.md に記載されています。
cargo test --workspace # すべてのテスト cargo test -p l123-ui --test acceptance # キーストロークトランスクリプト cargo clippy --workspace --all-targets -- -D warnings # リントチェック cargo fmt --all # フォーマット
受入トランスクリプトは .tsv ファイルで、入力キーと出力画面状態を記述します。指令構文については tests/acceptance/README.md を参照してください。UI で可視化されるすべての変化にはトランスクリプトが対応します。
公認ドキュメント(真理の源泉として扱う):
docs/SPEC.md — l123 は何か docs/PLAN.md — マイルストーンとリスクレジスター docs/MENU.md — 完全なメニューツリー
コードと文書が不一致の場合、まず文書を修正してください。
✦ 非目標(Non-goals)
DOS エミュレーターではありません。INT21h、コードページなし。文字列は UTF-8 です。 視覚的なオマージュではありません。機能的真実性、CRT のノスタルジーではない(緑色/アンバーテーマはストレッチゴールであり、目的ではありません)。 既存の .WK3 ファイル用マクロプレイヤーではありません。.WK3 の読み取り専用インポートはストレッチゴールで、書き込みは計画されていません。 1-2-3 計算コアのリ実装でもありません。その役割は IronCalc が担っています。 Lotus 1-2-3 for Windows や SmartSuite を目指していません。DOS 版 Release 3.4a のみ対象です。
✦ フィロソフィー スプレッドシートは悪くなったのではなく、単に重くなっただけです。l123 は、早期のスプレッドシートソフトウェア特有の速度、明瞭さ、キーボード主導の精度を復活させつつ、現代的なワークフローとの互換性を損ないません。
✦ 为什么?(Why?) / キーが問題だったわけではないからです。
✦ ライセンス MIT ライセンスによる。LICENSE を参照してください。