アウトライナーは、コンピュータサイエンスの集合体だった

公開日

Kosshi を作り始めたばかりの頃、もともと Mac/iOS の開発にそこまで慣れていなかったこともあって、まずは「アウトライナーを作るには、どの機能を組み合わせればいいんだろう」と、Apple のドキュメントをかなり探していました。 でも、これを使えば近いところまで行ける、というものが、なかなか見つかりません。試しに使ってみても、どこかでうまくいかない。

プログラミングの仕事は、基盤になるようなものはたいてい世の中にすでにあって、それをいかにうまく使うのか、というのが大半です。 これまで自分が作ってきたものも、Web サービスにしても普通のアプリにしても、既存のフレームワークやライブラリを組み合わせて、その土台の上に積み上げるような作り方でした。アウトライナーも、最初は同じ感覚で作れるものだと思っていました。

いろいろ検討しているうちに、これはもう少し根本的なところから組み立てていかないとダメなんだな、ということが、だんだん分かってきました。


正確に言うと、アウトライナーとして動作するものなら、Apple の標準フレームワークだけでも、多分作れます。 リスト表示があって、字下げができて、行を折りたためる。それくらいならフレームワークが揃えてくれるので、最初は自分もそのつもりで触り始めました。

ただ、そうやって作っていくと、昨今の高度なアウトライナーを使い慣れている人が期待する挙動にするのは難しいです。 標準のリストやテキストビューは、もともとアウトライナーを作るために用意されたものではないので、その上に積み上げていくやり方ではどうしても限界があるんですよね。

触りながら、これはもう一段下から書かないと無理だな、と感じてきました。 結果として、Kosshi はもう少し下のレイヤーから直接組み立てる方向に倒しました。普通なら Apple の高レベルなフレームワークが提供してくれる挙動も、Kosshi ではほぼ自前で書いている、ということです。

それに加えて、もうひとつ内部で大変なところがあります。 大量の行があっても、快適に動くようにする、という話です。

自分はメモをわりと消す方なので、自分のアウトラインはそこまで大きくなっていません。 ただ、アウトライナーのユーザーを調べてみると、何年分ものメモやタスクをひとつのファイルに溜め込んで、十万行規模で使っている人もそれなりにいるようでした。

なので Kosshi では、10 万行を超えるような大量の行でも動作することを目標にして開発しています。 中心になっているのは SumTree というデータ構造で、Zed という高速なテキストエディタが内部で使っているものを参考にしています。ざっくり言うと、行を一列に並べて頭から数える素朴な作りをやめて、行を木のかたちにまとめて、必要な位置だけを少ないステップで取り出せるようにしています。 (参考: Kosshi が大規模でも高速な理由

すでにいくつかフィードバックをいただいているのですが、「なんでいつものこの操作が Kosshi だと効かないんだろう」と思われることがあるかもしれません。Kosshi はほとんどの挙動を自前で書いているので、自分が普段使っていない機能だと実装が漏れてしまっていることがあるんです。


アウトライナーの開発を続けているうちに、思うようになりました。

アウトライナーって、見た目から想像するよりもずっとコンピュータサイエンス寄りのソフトウェアだったんだな、と。

普通のユーザーから見たら、ただ箇条書きを書けるアプリなのですが、データ構造、計算量、アルゴリズムと、内部では意外と込み入ったことをやっているソフトウェアです。

新卒で検索システムのバックエンドエンジニアをやっていた頃、こういうアルゴリズムが関わる仕事がやってみたい、と思っていた時期がありました。ある意味で花形というか、憧れがあったんですよね。

でも、普通の Web サービスやシステム開発の仕事は、たいてい既存の技術を組み合わせるところで成立します。基本的には地味な技術の組み合わせなんですよね。そうでないと、安定したソフトウェアを作るのはなかなか難しいです。

作りながらだんだん分かってきたのは、こういうコンピュータサイエンス寄りの仕事が必要になるのは、ユーザーの手元の挙動を内側から組み立て直さないといけないときと、普通ではない量を捌かないといけないとき、くらいなのかもしれない、ということでした。 Kosshi はそのどちらも必要になっていて、最初に思っていたよりずっと骨の折れる作り方になっています。

新卒の頃に憧れていた仕事が、まさかひとりで作っているアプリの中で出てくるとは思っていませんでした。 腰を据えて作らないといけないし、思うように進まない日もありますが、こういうものを自分の手で作れているのは、なかなか幸せなことだな、と最近は思っています。

関連記事

記事の更新があった場合のみ、週に1度まとめてメールでお知らせします。

いつでも配信解除できます。