テキストエディタ開発の参考にしたもの

 ライフワークとして、炊紙というテキストエディタを開発している。一般的なテキストエディタよりちょっと風変わりで、三次元空間上でテキストを編集するユーザーインタフェイスの価値検証が主な目的のテキストエディタだ。

github.com

 なぜ、そんなものを作ろうとしているのか、その目的や情熱の詳細については GitHubリポジトリの README.md に書き残したり Findy Engineer Lab にインタビュー記事にしてもらったのでそちらを参照してもらえばと思います。

findy-code.io

 このブログ記事ではインタビューの公開に合わせた補足として、炊紙というテキストエディタ開発のなかで参考にした面白いネットの記事を感謝とともに列挙していこうと思います。私の開発しているテキストエディタにはとくに感じるものがなかった人でも、これらのリソースは非常に面白いと感じるかもしれません。

シンパシーを感じるテキストエディタ

 三次元空間で文章を編集するテキストエディタというのは、世の中にあまりない。私が単に見つけられていないだけという説もあるので、あれば教えてほしいというのが正直なところだ。ここに上げるテキストエディタはそれなりに類似点やシンパシーがあるため紹介したい。

  • Bloom Editor
    • 2011年に発表されたコンセプトムービーだけが残っているエディタ。非常にオシャレで 3D テキストエディタというコンセプトが自分の考えるエディタに近い。継続的なリリース、シェア獲得に至らなかったのが残念でならない。
    • www.youtube.com
  • Dramatic EDitor / GriddyCode
    • どちらも GPU で文字をレンダリングしている最近のテキストエディタ。炊紙の開発開始時にはなかったようだが、最近改めて調べていたら見つけた。どちらも技術的に近いところにありそうなので切磋琢磨して頑張っていきたい。
    • github.com
    • github.com
  • Zed
    • GPU を利用して 60 FPS 出すテキストエディタというコンセプトにシンパシーがある。しかし高フレームレートにこだわりながらアニメーションや三次元空間に手を出そうとしないのが不思議。GPU を用いておきながらカクカク迅速に編集してどうするんだ?wgpu で活躍していた kvark 氏が Linux 対応で貢献していることもあり、将来性を感じる。テックブログも技術的に面白いことがたくさん書かれているのでおすすめ。
    • zed.dev
  • Neovide
    • Neovim をバックエンドに、プレゼンテーション層をリッチにしたテキストエディタVim 派はおそらくこれが最適解。ヴィマーはいろんなエディタに Vim キーバインドを導入しても結局 Vim でないと満足できないという事がありがちなのでこういうのがいいと思う。
    • github.com
  • stone
    • Mac/iPad 専用のテキストエディタ。多機能にせず、文章を気持ちよく書くことに特化していることにシンパシーがある。縦書き・横書きのどちらにも対応している点もポイントが高い。日本デザインセンターという会社が有償でこのような思想の強いテキストエディタを販売しているという事実も、なんだか心強い気持ちにさせられる。文章を書くというのは思想の強いものなんだ!
    • stone-type.jp

役に立ったアルゴリズムや技術記事

  • Easy Scalable Text Rendering on the GPU
  • gl2d-sandbox
    • KOBA789 氏による上記ブログの OpenGL 実装。GPU でフォントレンダリングするのは自分の技術力では難しそうなので諦め気分もあったのだが、日本の人がシュッとやっていたので「俺もやったらぁ!」という気持ちにさせてもらえた。
    • github.com
  • Coding Adventure: Rendering Text
  • Slug Font Rendering Library
    • GPU でフォントをレンダリングするためのライブラリ。float の精度都合でフォントの描画が乱れる問題を完全に解決している(らしい)。レンダリング品質で目指すべき上はまだあるという気持ちになる一方、グリフ情報をテクスチャに書きだす必要があったり、論文を見る限りフラグメントシェーダーで for ループを回しているためパフォーマンス的なインパクトが気になる。
    • sluglibrary.com
  • 縦書きエディタを6プラットフォームで開発してみて
    • 縦書きエディタ、TATEditor を開発されている方のこれまでの歩みを紹介したスライド。複数プラットフォームで縦書きエディタを追及されているすごい方。このスライドにある問題は大体自分も同じように悩んだのでとても共感を感じる。
    • speakerdeck.com
  • Learn Wgpu
    • 最高の wgpu 学習用の教材。炊紙は当初 Java & JOGL で開発されていたが JOGL の開発が滞るのを機に Rust & Piston への移行を経て最終的に Rust & WebGPU(wgpu) になった。OpenGL に限界を感じてはいたものの C++ & Vulkan は自分の取る選択肢ではないと考えていた当時の自分にぴったりの選択肢と学習リソースが出てきたことは幸運だった。
    • sotrh.github.io
  • Easing関数
    • テキストを滑らかに動かすにはイージング関数が必須という事は常々考えていたが、代表的なイージング関数と詳細についてはあまり把握していなかったのでこのサイトが非常に役立った。
    • easings.net
  • 三次ベジエ → 二次ベジエ変換
    • figma CTO による GPU でフォント描画するためのアルゴリズムは二次ベジエしか対応できず OpenType のような三次ベジエを含むようなフォントはそのままでは対応できないというかなしい事情がある。そのため、三次ベジエを二次ベジエに近似変換してやる必要があるが、私にはその数学的素養が無かったためこの解説 & ソースコードに非常に助けていただいた。
    • nutsu.com

(おまけ) Hacker News 掲載

 Findy さんにインタビュー記事を書いてもらえることになったのでそれに合わせて炊紙の公開準備をしていたところ、親切な方に Hacker News に GitHub リポジトリをタレコミいただき、炊紙の GitHub のスター数が一気に 3 ぐらいから 280 まで激増しました。ここでは印象に残ったやり取りを残しておきます。

news.ycombinator.com

 Hacker News に宣伝すると星が沢山つくという噂は以前から聞いていたが本当に伸びた。すごい。登り龍だ。

mitoma/kashiki2のスターが伸びるの図

  • Emacs vs Vi
    • 炊紙ではemacsキーバインドを採用しているが、無用な争いを避けるために README.md に「これは私の好みにすぎない」と書いたところ延々とエディタ争いのツリーができてしまった。俺のテキストエディタのトピックでエディタ戦争をしないでくれ。戦争より感想をたのむ。
    • news.ycombinator.com
  • 日本語障壁のおかげでスパム Pull Request から守られている
    • 縦書きを大事にしたテキストエディタを作る時点で日本語圏以外を気にしても仕方がないなという気持ちになり、 UI 、コメント、コミットログ、README.md を全て日本語で書くことにしたが、そのおかげでこのリポジトリはスパムから守られているという謎の評価があった。日本では特に話題にならずに海外で盛り上がっているのを見ると英語で書いおいてもよかったかなという気も。プロジェクト運営の話より感想を頼む。
    • news.ycombinator.com
  • 新しい UI を期待している
    • Hacker News 掲載は、正直ほとんどの人がまともにテキストエディタを評価してはくれず参考になったり励みになる書き込みはほとんどなかったが、一人だけコンセプトを理解してコメントをしてくれた人がいたのでうれしかった。海外の人が、日本語リソースとアニメーションGIFだけでここまで汲み取ってくれるとは思わなかった。
    • (コメントの大意)「本来であれば VR/AR 空間上でコンピュータと対話するための新しい UI の再考は Apple Vision や Meta Quest などで行われるべきだったが行われなかった。iMaciPhone のような新しい UI 標準の変化の取り組みが起きていないことは残念だ。しかし(炊紙のような)オープンソースプロジェクトが UI について新しい可能性を示してくれることを期待している。」
    • news.ycombinator.com

 まだまだ完成には遠いですが、この炊紙は盆栽としてのポテンシャルは高く、個人の盆栽プロジェクトを作るのは自分の憧れの目標でもあったため今後が楽しみです。

以上。