アウトライナーは、コンピュータサイエンスの集合体だった
- 公開日
Kosshi を作り始めたばかりの頃、もともと Mac/iOS の開発にそこまで慣れていなかったこともあって、まずは「アウトライナーを作るには、どの機能を組み合わせればいいんだろう」と、Apple のドキュメントをかなり探していました。 でも、これを使えば近いところまで行ける、というものが、なかなか見つかりません。試しに使ってみても、どこかでうまくいかない。
プログラミングの仕事は、基盤になるようなものはたいてい世の中にすでにあって、それをいかにうまく使うのか、というのが大半です。 これまで自分が作ってきたものも、Web サービスにしても普通のアプリにしても、既存のフレームワークやライブラリを組み合わせて、その土台の上に積み上げるような作り方でした。アウトライナーも、最初は同じ感覚で作れるものだと思っていました。
いろいろ検討しているうちに、これはもう少し根本的なところから組み立てていかないとダメなんだな、ということが、だんだん分かってきました。
正確に言うと、アウトライナーとして動作するものなら、Apple の標準フレームワークだけでも、多分作れます。 リスト表示があって、字下げができて、行を折りたためる。それくらいならフレームワークが揃えてくれるので、最初は自分もそのつもりで触り始めました。
ただ、そうやって作っていくと、昨今の高度なアウトライナーを使い慣れている人が期待する挙動にするのは難しいです。 標準のリストやテキストビューは、もともとアウトライナーを作るために用意されたものではないので、その上に積み上げていくやり方ではどうしても限界があるんですよね。
触りながら、これはもう一段下から書かないと無理だな、と感じてきました。 結果として、Kosshi はもう少し下のレイヤーから直接組み立てる方向に倒しました。普通なら Apple の高レベルなフレームワークが提供してくれる挙動も、Kosshi ではほぼ自前で書いている、ということです。
それに加えて、もうひとつ内部で大変なところがあります。 大量の行があっても、快適に動くようにする、という話です。
自分はメモをわりと消す方なので、自分のアウトラインはそこまで大きくなっていません。 ただ、アウトライナーのユーザーを調べてみると、何年分ものメモやタスクをひとつのファイルに溜め込んで、十万行規模で使っている人もそれなりにいるようでした。
なので Kosshi では、10 万行を超えるような大量の行でも動作することを目標にして開発しています。 中心になっているのは SumTree というデータ構造で、Zed という高速なテキストエディタが内部で使っているものを参考にしています。ざっくり言うと、行を一列に並べて頭から数える素朴な作りをやめて、行を木のかたちにまとめて、必要な位置だけを少ないステップで取り出せるようにしています。 (参考: Kosshi が大規模でも高速な理由)
すでにいくつかフィードバックをいただいているのですが、「なんでいつものこの操作が Kosshi だと効かないんだろう」と思われることがあるかもしれません。Kosshi はほとんどの挙動を自前で書いているので、自分が普段使っていない機能だと実装が漏れてしまっていることがあるんです。
アウトライナーの開発を続けているうちに、思うようになりました。
アウトライナーって、見た目から想像するよりもずっとコンピュータサイエンス寄りのソフトウェアだったんだな、と。
普通のユーザーから見たら、ただ箇条書きを書けるアプリなのですが、データ構造、計算量、アルゴリズムと、内部では意外と込み入ったことをやっているソフトウェアです。
新卒で検索システムのバックエンドエンジニアをやっていた頃、こういうアルゴリズムが関わる仕事がやってみたい、と思っていた時期がありました。ある意味で花形というか、憧れがあったんですよね。
でも、普通の Web サービスやシステム開発の仕事は、たいてい既存の技術を組み合わせるところで成立します。基本的には地味な技術の組み合わせなんですよね。そうでないと、安定したソフトウェアを作るのはなかなか難しいです。
作りながら見えてきたことがあります。こういうコンピュータサイエンス寄りの仕事が必要になるのは、既存の土台の上に積み上げるやり方では届かないところを目指したとき、なのかもしれない。 一段下のレイヤーから自分で組み立て直そうとすると、そこにあるのはデータ構造や計算量の話で、結果的にアルゴリズム寄りの作りになっていきます。 Kosshi も最初に思っていたより、ずっと骨の折れる作り方になっています。
新卒の頃に憧れていた仕事が、まさかひとりで作っているアプリの中で出てくるとは思っていませんでした。 腰を据えて作らないといけないし、思うように進まない日もありますが、こういうものを自分の手で作れているのは、なかなか幸せなことだな、と最近は思っています。
関連記事
Kosshi を出すまで4年かかった
会社を辞めたのは2021年の年末でした。その前は何人かの同期と一緒に、勤め先で新規事業のアプリを作っていました。 結果としてそのサービスはうまくいかなかったのですが、ゼロからプロダクトを立ち上げる感覚が忘れられず、フルコミットで自分のアプリでやっていこうと決めて退職しました。 とはいえ収入をいきなり0にするのは難しいので、数年はフリーランスで仕事を受けつつ、隙間で個人のアプリを進める、という二段構えで動いていました。そのとき、最初に作ろうとしていたのが Kosshi です。当時は別の名前にしていましたが、2022年の年始ごろの構想でした。 ところが、フリーランスとアプリ開発の二段構えは、口で言うほど綺麗には回りませんでした。仕事を複数並列で抱えていると、当然スケジュールに押されて、気付くと会社員のときより
土日祝日が概念として存在しない毎日について
フリーランスエンジニアの案件と、個人の活動を行き来する働き方をしています。 独立してしばらく経つんですけど、最近、毎日の感覚がちょっとおかしくなってきました。 朝なのか昼なのか夜なのか、よく分からなくなっています。 複数のプロジェクトのプログラミングをしながら、隣で3Dプリンターがガシャガシャと音を立てていて、Slack に仕事の通知が来る。 そういう状態が一日中続いていて、ふとカーテンの隙間から外を見たときに、あ、もう日が暮れていたんだな、と気づく感じです。 土日祝日とか、ゴールデンウィークとか、まあ概念としては当然あるんですけど、もう自分の中では消えてしまいました。
何か作る人のための道具は、ガチな UX が要求される
「作る人のための道具を作る」というのが、最近の自分の主題なのですが、これをやっていて気づいたのが、何か作る人のための道具というのは、わりとガチな UX が要求される世界なんですよね。 なぜかというと、何かを作っている人たちというのは、道具の選定が真剣だからです。 毎日のように使うものだし、思考や手の動きに直接食い込んでくる種類のものなので、ちょっとした挙動の違いが、ものを作るリズムにそのまま影響してきます。 なので、フィードバックも細かい。何を入れて何を入れないか、画面のどこに何が出るか、キーボードのどのキーで何が起きるか、 そういう一つ一つに、はっきりこうあって欲しいという思いがあります。 誤魔化しが効かないんですよね。「とりあえずこんなもんで」みたいなレベルでは、採用されません。
記事の更新があった場合のみ、週に1度まとめてメールでお知らせします。
いつでも配信解除できます。