アウトライナーは、コンピュータサイエンスの集合体だった
- 公開日
Kosshi を作り始めたばかりの頃、もともと Mac/iOS の開発にそこまで慣れていなかったこともあって、まずは「アウトライナーを作るには、どの機能を組み合わせればいいんだろう」と、Apple のドキュメントをかなり探していました。 でも、これを使えば近いところまで行ける、というものが、なかなか見つかりません。試しに使ってみても、どこかでうまくいかない。
プログラミングの仕事は、基盤になるようなものはたいてい世の中にすでにあって、それをいかにうまく使うのか、というのが大半です。 これまで自分が作ってきたものも、Web サービスにしても普通のアプリにしても、既存のフレームワークやライブラリを組み合わせて、その土台の上に積み上げるような作り方でした。アウトライナーも、最初は同じ感覚で作れるものだと思っていました。
いろいろ検討しているうちに、これはもう少し根本的なところから組み立てていかないとダメなんだな、ということが、だんだん分かってきました。
正確に言うと、アウトライナーとして動作するものなら、Apple の標準フレームワークだけでも、多分作れます。 リスト表示があって、字下げができて、行を折りたためる。それくらいならフレームワークが揃えてくれるので、最初は自分もそのつもりで触り始めました。
ただ、そうやって作っていくと、昨今の高度なアウトライナーを使い慣れている人が期待する挙動にするのは難しいです。 標準のリストやテキストビューは、もともとアウトライナーを作るために用意されたものではないので、その上に積み上げていくやり方ではどうしても限界があるんですよね。
触りながら、これはもう一段下から書かないと無理だな、と感じてきました。 結果として、Kosshi はもう少し下のレイヤーから直接組み立てる方向に倒しました。普通なら Apple の高レベルなフレームワークが提供してくれる挙動も、Kosshi ではほぼ自前で書いている、ということです。
それに加えて、もうひとつ内部で大変なところがあります。 大量の行があっても、快適に動くようにする、という話です。
自分はメモをわりと消す方なので、自分のアウトラインはそこまで大きくなっていません。 ただ、アウトライナーのユーザーを調べてみると、何年分ものメモやタスクをひとつのファイルに溜め込んで、十万行規模で使っている人もそれなりにいるようでした。
なので Kosshi では、10 万行を超えるような大量の行でも動作することを目標にして開発しています。 中心になっているのは SumTree というデータ構造で、Zed という高速なテキストエディタが内部で使っているものを参考にしています。ざっくり言うと、行を一列に並べて頭から数える素朴な作りをやめて、行を木のかたちにまとめて、必要な位置だけを少ないステップで取り出せるようにしています。 (参考: Kosshi が大規模でも高速な理由)
すでにいくつかフィードバックをいただいているのですが、「なんでいつものこの操作が Kosshi だと効かないんだろう」と思われることがあるかもしれません。Kosshi はほとんどの挙動を自前で書いているので、自分が普段使っていない機能だと実装が漏れてしまっていることがあるんです。
アウトライナーの開発を続けているうちに、思うようになりました。
アウトライナーって、見た目から想像するよりもずっとコンピュータサイエンス寄りのソフトウェアだったんだな、と。
普通のユーザーから見たら、ただ箇条書きを書けるアプリなのですが、データ構造、計算量、アルゴリズムと、内部では意外と込み入ったことをやっているソフトウェアです。
新卒で検索システムのバックエンドエンジニアをやっていた頃、こういうアルゴリズムが関わる仕事がやってみたい、と思っていた時期がありました。ある意味で花形というか、憧れがあったんですよね。
でも、普通の Web サービスやシステム開発の仕事は、たいてい既存の技術を組み合わせるところで成立します。基本的には地味な技術の組み合わせなんですよね。そうでないと、安定したソフトウェアを作るのはなかなか難しいです。
作りながら見えてきたことがあります。こういうコンピュータサイエンス寄りの仕事が必要になるのは、既存の土台の上に積み上げるやり方では届かないところを目指したとき、なのかもしれない。 一段下のレイヤーから自分で組み立て直そうとすると、そこにあるのはデータ構造や計算量の話で、結果的にアルゴリズム寄りの作りになっていきます。 Kosshi も最初に思っていたより、ずっと骨の折れる作り方になっています。
新卒の頃に憧れていた仕事が、まさかひとりで作っているアプリの中で出てくるとは思っていませんでした。 腰を据えて作らないといけないし、思うように進まない日もありますが、こういうものを自分の手で作れているのは、なかなか幸せなことだな、と最近は思っています。
関連記事
Kosshi を出すまで4年かかった
会社を辞めたのは2021年の年末でした。その前は何人かの同期と一緒に、勤め先で新規事業のアプリを作っていました。 結果としてそのサービスはうまくいかなかったのですが、ゼロからプロダクトを立ち上げる感覚が忘れられず、フルコミットで自分のアプリでやっていこうと決めて退職しました。 とはいえ収入をいきなり0にするのは難しいので、数年はフリーランスで仕事を受けつつ、隙間で個人のアプリを進める、という二段構えで動いていました。そのとき、最初に作ろうとしていたのが Kosshi です。当時は別の名前にしていましたが、2022年の年始ごろの構想でした。 ところが、フリーランスとアプリ開発の二段構えは、口で言うほど綺麗には回りませんでした。仕事を複数並列で抱えていると、当然スケジュールに押されて、気付くと会社員のときより
Kosshi に日本語を足したら、9言語になった
自分は英語がけっこう苦手です。 プログラミングは英語の塊みたいなものなので、 まあ一応触れる機会は多いんですけど、読むのも書くのも日本語よりずっと大変です。 最近は海外サイトもだいたいブラウザの翻訳をオンにして読んでいます。 このくらいのレベル感の人は、日本人だと結構多いんじゃないかと思います。 そういう自分が作っている Kosshi は、リリース当初から英語のアプリでした。 サイトだけは日本語と英語に対応していて、アプリ本体は英語オンリー。 理由は二つあって、一つはアウトライナーというジャンルの構造です。 操作そのものはシンプルなんですけど、見かけより使うのが難しい。 ある種の生産性を追求した人に刺さるみたいなツールで、そもそも必要としている人がもともと少ないジャンルです。
Kosshi を Product Hunt に出してみたら結構いいことがあった
Kosshi を Product Hunt に出しました。 リリースしてから2ヶ月ほど経って、日本ではだんだんと使ってもらえるようになってきたのですが、日本以外の人にほとんど使ってもらえていない、というのが今の課題でした。 理由を冷静に並べてみると、まあそりゃそうだよね、という感じです。 SNS はほぼ日本語だけで、英語のコミュニティでは何も言っていない。AppStore の検索も英語だとほぼヒットしないし、英語版サイトに至っては Google にすらインデックスされていない状態でした。海外のユーザーから見たら、そもそも存在を知る手段がなかったわけです。 という状況で、Product Hunt に出してみたら思ったよりも反応がありました。ここでは upvote によって毎日その日のプロダクトの投票が行われ
記事の更新があった場合のみ、週に1度まとめてメールでお知らせします。
いつでも配信解除できます。