1000行未満でエディタを書いてみた、ただ楽しみのために
原文は Salvatore Sanfilippo により に公開されました。 このブログを購読する
警告:長くて正直あまり役に立たないブログ投稿だ。要約すると、ただ楽しみのために、ncursesに依存せず、シンタックスハイライトと検索機能を備えた1000行未満のテキストエディタを書いたということだ。コードはこちら: http://github.com/antirez/kilo。
スクリーンキャストはこちら: https://asciinema.org/a/90r2i9bq8po03nazhqtsifksb
感傷に浸りたい人は、この先も読んでほしい…
数週間前、NanoエディタがもはやGNUプロジェクトの一部ではなくなるというニュースがあった。最初に思ったのは、うわ、みんな今でも、元々は端末ベースのEMAIL CLIENTに付属していたエディタのクローンである古いエディタを本気で気にかけているんだな、ということだった。もう一度言おう、「電子メールクライアント」だ。もはや「電子メールクライアント」という概念自体が消えかけていて、すべてが変わった。それでもHacker Newsでは、例えばシステム管理の作業で、たまたま触ったシステムにnanoがあったおかげで何度も助かった、といった書き込みをいくつも読んだ。私の息子が初めてCでプログラムを書いたのもnanoだった。ファイルを編集した経験がなくても使える、問題のない体験を提供してくれる。
そんなわけで、Nano自体よりもはるかに小さいテキストエディタを書くことを考え始めた。基本的にはただ楽しみのためだ。小さなプログラムが好きで、尊敬しているからだ。
今どきエディタを書くなんて、どれだけダサくて、無駄で、時間の浪費だろうか?僕らは、キラキラしたすごいプロジェクト、とてもクールで、とても複雑で、価値のあるものを作るべきとされている。でも時には、明確な目的もなくものを作ることが新鮮だったりする。そして思い出もあった…
Commodore 16のROM内蔵アセンブラでの最初の体験や、子ども時代に後に使ったすべてのホームコンピュータやBASICインタプリタを覚えている。エディタは人間と機械をつなぐ根本的な接点だ。人間がコンピュータに解釈させられる何かを書くことを可能にする。四角いプロンプトの点滅は、多くの人にとって決して忘れられないものだ。
まあ、どれもいい話だが、時間は非常に限られていた。2つの週末にわたって数時間だけ、家族の予定は詰まっていて、友人との長いバーベキューのために肉を準備しなければならなかった。何か工夫をすれば、空いた数時間でまだエディタを書けるかもしれない。目標は、とにかく非常に小さく、cursesを使わず、シンタックスハイライト付きのエディタを書くことだった。基本的に、使えるものだ。それが条件だ。ささやかなことだが、これらすべてをゼロから数時間で書くのはすでに難しい。
でも……ちょっと待て、実は以前エディタを書いたことがある。子ども向けのLuaベースのプログラミング環境であるLOAD81プロジェクトの一部だ。それを再利用できるかもしれない……そして画面に描画するのにSDLを使う代わりに、VT100エスケープシーケンスを直接ターミナルに送るのはどうだろう?そのためのコードもlinenoiseにある。linenoiseもまた別のトイプロジェクトだが、結局は他の多くの真面目なプロジェクトで使われるようになったものだ。だからその2つを混ぜてみるのもありかもしれない……
最初の週の土曜の朝は海に行った、最高だった。その後兄がEdinburgからCataniaへやってきて、一日の終わりには庭で一緒にラップトップを広げ、日中の30度から必死に身を守りながら、エディタの最初の骨組みをハックし始めた。LOAD81のコードはかなりモジュール化されていたので、元のプロジェクトから切り離すのは朝飯前だった。数時間後にはなんとなく編集できるようになり、もう寝る時間になっていた。翌日もまた海に出かける前に作業を続けた。15歳の息子は午後1時まで寝ている、結局のところ夏の15歳の頃の僕もそうだったように、だから彼が起きるのを待ちながら30分ごとのスプリントでコーディングし、残りの時間は素晴らしい娘と遊んで過ごした。最後に日曜の夜遅くに、残りの部分をなんとか直そうとした。
そういえば数年前は、プロジェクトに取り組むといえば、*ハックする*ことだった、何日もフルタイムで。今は歳をとったが、それでもトイエディタを書いて、それを真剣な仕事とみなせるくらいにはまだ若い :-)
しかし人生は厳しく、月曜日がやってきた。本業があり、トイプロジェクトにかける時間はない。週末に作ったものを公開する時間さえない……最低限の磨き上げとブログ投稿くらいは必要だったのに。
この月曜日まで待って、ようやく再び「Kilo」エディタに手を付けることができた。1024行未満のコードだから「Kilo」と名付けた。コード行数を数えるための「cloc」ユーティリティが、1024 LOCに達するまでまだ約100行の余裕があると教えてくれたし、真面目なエディタにはやはり「検索」機能が必要だ。というわけで再びコードに戻り、少し構造を整理してコメントも付け直そうとした。ご存知の通り、2つのプロジェクトの断片を数時間で混ぜ合わせると、コードの品質があまり優れたものにならないリスクがあるからだ。
さて、今こそ公開する時だ、このクレイジーなプロジェクトも終わりだ。誰かがこれを本物のエディタを書くための出発点として使ってくれるかもしれないし、あるいは通常のREPLスタイルのモデルを超えた、何か新しい面白いCLIを書くために使われるかもしれない。
コードはこちら: http://github.com/antirez/kilo
記事をランダムに読む
コメント
ログインしてコメントする